2

我正在设置一个 Kafka Connect 分布式模式应用程序,该应用程序将是一个 Kafka 到 S3 管道。我正在使用 Kafka 0.10.1.0-1 和 Kafka Connect 3.1.1-1。到目前为止,事情进展顺利,但对于我正在使用的大型系统而言,重要的一个方面需要了解 Kafka -> FileSystem 管道的偏移信息。根据文档,offset.storage.topic配置将是分布式模式应用程序用于存储偏移信息的位置。考虑到 Kafka 如何在“新”Kafka 中存储消费者偏移量,这是有道理的。但是,在使用 FileStreamSinkConnector 进行一些测试后,没有任何内容被写入 myoffset.storage.topic默认值:connect-offsets.

具体来说,我使用 Python Kafka 生产者将数据推送到主题,并使用 Kafka Connect 和 FileStreamSinkConnect 将数据从主题输出到文件。这可以正常工作并按照我期望连接器的行为表现。此外,当我停止连接器并启动连接器时,应用程序会记住主题中的状态并且没有数据重复。但是,当我去offset.storage.topic查看存储了哪些偏移元数据时,主题中没有任何内容。

这是我使用的命令:

kafka-console-consumer --bootstrap-server kafka1:9092,kafka2:9092,kafka3:9092 --topic connect-offsets --from-beginning

让此命令运行一分钟左右后,我收到此消息:

Processed a total of 0 messages

总结一下,我有两个问题:

  1. 为什么即使我的分布式应用程序正确保持状态,偏移元数据也没有写入应该存储它的主题?
  2. 如何访问 Kafka Connect 分布式模式应用程序的偏移元数据信息?这对于我的团队对我们系统的 Lambda 架构实施来说是 100% 必要的。

谢谢您的帮助。

4

3 回答 3

6
  1. Liju 是正确的,connect-offsets 用于跟踪源连接器(有生产者但没有消费者)的偏移量。Sink 连接器有一个消费者并以通常的方式跟踪偏移量 - __consumer_offsets 主题

  2. 查看最后提交的偏移量的最佳方法是使用消费者组工具:

    bin/kafka-consumer-groups.sh --group connect-elastic-login-connector --bootstrap-server localhost:9092 --describe

组名始终是“connect-”和连接器名称(在我的例子中是 elastic-login-connector)。这将显示该组提交的最新偏移量,这基本上承认该偏移量之前的所有消息都已写入 Elastic。

于 2017-03-07T05:48:39.850 回答
1

偏移量可能正在提交到 kafka 默认偏移量提交主题,即 _consumer_offsets

于 2017-03-07T04:37:44.057 回答
0

Confluent 发布的新S3 连接器可能会引起您的兴趣。

根据您的描述,也许它可以显着简化您将记录从 Kafka 导出到 S3 存储桶的目标。

于 2017-03-06T19:31:54.690 回答