重新启动群集时,连接使用者作业将被删除

Sou*_*jee 1 apache-kafka apache-kafka-connect

关于更改与kafka相关的一些属性并重新启动集群,我面临以下问题.

In kafka Consumer, there were 5 consumer jobs are running . 
Run Code Online (Sandbox Code Playgroud)

如果我们进行了一些重要的属性更改,并且在重新启动集群时,部分/全部现有的使用者作业无法启动.

Ideally all the consumer jobs should start , 
Run Code Online (Sandbox Code Playgroud)

因为它将从以下系统主题获取元数据信息.

config.storage.topic
offset.storage.topic
status.storage.topic
Run Code Online (Sandbox Code Playgroud)

Ran*_*uch 6

首先,有点背景.Kafka将其所有数据存储在主题中,但这些主题(或者更确切地说是构成主题的分区)是仅附加日志,除非完成某些操作,否则这些日志将永远增长.为了防止这种情况,Kafka能够以两种方式清理主题:保留和压缩.配置为使用保留的主题将保留数据一段可配置的时间:代理可以自由删除任何早于此的日志消息.配置为使用压缩的主题要求每条消息都有一个密钥,并且代理将始终为每个不同的密钥保留最后一条已知消息.当每个消息(即键/值对)表示密钥的最后已知状态时,压缩非常方便; 因为消费者正在阅读主题以获得每个密钥的最后已知状态,所以如果删除旧状态,它们最终会更快地到达最后状态.

经纪人将用于主题的清理策略取决于几个方面.默认情况下,隐式或显式创建的每个主题都将使用保留,但您可以通过以下几种方式进行更改:

  • 更改全局log.cleanup.policy代理设置,仅影响在该点之后创建的主题; 要么
  • cleanup.policy创建或修改主题时指定特定于主题的设置

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

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

如果未压缩这些内部主题,则会在保留期过后清除并删除配置,偏移和状态信息.默认情况下,此保留期为24小时!这意味着如果在部署/更新连接器配置后超过24小时重新启动Kafka Connect,则该连接器的配置可能已被清除,并且看起来好像连接器配置从未存在过.

因此,如果您没有正确创建这些内部主题,只需使用主题管理工具更新主题的设置,如文档中所述.

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

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