重新启动集群时连接消费者作业被删除

Connect consumers jobs are getting deleted when restarting the cluster

我在更改与 kafka 相关的一些属性并重新启动集群时遇到以下问题。

In kafka Consumer, there were 5 consumer jobs are running . 

如果我们进行一些重要的 属性 更改,并且在重新启动集群时 some/all 现有的消费者作业将无法启动。

Ideally all the consumer jobs should start , 

因为它将从下面的系统主题中获取元数据信息。

config.storage.topic
offset.storage.topic
status.storage.topic

首先,介绍一下背景。 Kafka 将其所有数据存储在 topics, but those topics (or rather the partitions that make up a topic) are append-only logs that would grow forever unless something is done. To prevent this, Kafka has the ability to clean up topics in two ways: retention and compaction. Topics configured to use retention will retain data for a configurable length of time: the broker is free to remove any log messages that are older than this. Topics configured to use compaction 中,要求每条消息都有一个密钥,并且代理将始终保留每个不同密钥的最后一条已知消息。当每条消息(即 key/value 对)代表密钥的最后已知状态时,压缩非常方便;由于消费者正在阅读主题以获取每个键的最后已知状态,因此如果删除旧状态,他们最终将更快地到达最后一个状态。

代理将对主题使用哪种清理策略取决于几件事。默认情况下,每个隐式或显式创建的主题都将使用 retention,但您可以通过多种方式进行更改:

  • 更改全局 log.cleanup.policy 代理设置,仅影响在那之后创建的主题;或
  • create or modify a topic
  • 时指定 cleanup.policy 主题特定设置

现在,Kafka Connect 使用多个内部主题 来存储连接器配置、偏移量和状态信息。这些内部主题 必须 compacted topics 以便(至少)每个连接器的最后配置、偏移量和状态始终可用。由于 Kafka Connect 从不使用旧的配置、偏移量和状态,因此代理将它们从内部主题中删除实际上是一件好事。

在 Kafka 0.11.0.0 之前,recommended process 是使用正确的主题特定设置手动创建这些内部主题。您可以依靠代理自动创建它们,但由于多种原因这是有问题的,其中最重要的是三个内部主题应该具有不同数量的分区。

如果这些内部主题未压缩,配置、偏移量和状态信息将在保​​留期结束后清理并删除。默认情况下,此保留期为 24 小时!这意味着,如果您在部署/更新连接器配置后超过 24 小时重新启动 Kafka Connect,则该连接器的配置可能已被清除,并且连接器配置似乎从未存在过。

因此,如果您没有正确创建这些内部主题,只需使用 topic admin tool to update the topic's settings as described in the documentation

顺便说一句,没有正确创建这些内部主题是一个非常普遍的问题,以至于 Kafka Connect 0.11.0.0 将能够使用正确的方法自动创建这些 internal 主题设置而不依赖代理自动创建主题。

在 0.11.0 中,对于 源连接器写入 的主题,您仍然必须依赖手动创建或代理自动创建。这并不理想,因此有一个 proposal 来更改 Kafka Connect 以自动为源连接器创建主题,同时让源连接器控制设置。希望这一改进使其成为 0.11.1.0,以便 Kafka Connect 更易于使用。