【问题标题】:Kafka-connect sink task ignores file offset storage propertyKafka-connect sink 任务忽略文件偏移存储属性
【发布时间】:2017-06-23 16:39:23
【问题描述】:

我在使用 Confluent JDBC 连接器时遇到了非常奇怪的行为。我很确定它与 Confluent 堆栈无关,而是与 Kafka-connect 框架本身有关。

所以,我将offset.storage.file.filename 属性定义为默认/tmp/connect.offsets 并运行我的接收器连接器。显然,我希望连接器在给定文件中保留偏移量(它在文件系统上不存在,但应该自动创建,对吧?)。文档说:

offset.storage.file.filename 用于存储连接器偏移量的文件。通过将偏移量存储在磁盘上,可以在单个节点上停止和启动独立进程,然后从之前停止的位置恢复。

但 Kafka 的行为方式完全不同。

  1. 它检查给定文件是否存在。
  2. 它不是,Kafka 只是忽略它并在 Kafka 主题中保留偏移量。
  3. 如果我手动创建给定文件,无论如何读取都会失败 (EOFException),并且偏移量会再次保留在主题中。

这是一个错误,或者更有可能是我不明白如何使用此配置?我了解两种持久化偏移量的方法之间的区别,并且文件存储更适合我的需求。

【问题讨论】:

  • 请问您解决了这个问题吗?我在独立模式下运行 Elasticsearch Kafka Connect 接收器时看到了相同的行为。
  • @John,很遗憾没有,我没有任何更新

标签: java apache-kafka apache-kafka-connect


【解决方案1】:

offset.storage.file.filename 仅用于 source 连接器。它用于在输入数据源上放置一个书签并记住它停止读取它的位置。创建的文件包含文件行号(对于文件源)或表行号(对于一般的 jdbc 源或数据库)。

在分布式模式下运行 Kafka Connect 时,此文件将替换为默认命名为 connect-offsets 的 Kafka 主题,该主题应被复制以容忍故障。

sink 连接器而言,无论使用哪种插件或模式(独立/分布式),它们都将上次停止读取输入主题的位置存储在名为 @987654324 的内部主题中@ 像任何 Kafka 消费者一样。这允许使用诸如kafka-consumer-groups.sh 命令行工具之类的传统工具来了解接收器连接器的滞后程度。

Confluent Kafka replicator 尽管是源连接器,但可能是一个例外,因为它从远程 Kafka 读取数据,并且可能使用 Kafka 消费者。

我同意文档不清楚,无论连接器类型是什么(源或接收器)都需要此设置,但它仅由源连接器使用。这个设计决策背后的原因是单个 Kafka Connect 工作程序(我的意思是单个 JVM 进程)可以运行多个连接器,可能包括源连接器和接收器连接器。换句话说,这个设置是工人级别的设置,而不是连接器的设置。

【讨论】:

    【解决方案2】:

    offset.storage.file.filename 属性仅适用于以独立模式运行的源连接器的工作人员。如果您在某个源的 Kafka 主题中看到 Kafka 持久偏移量,则说明您在分布式模式下运行。您应该使用提供的脚本connect-standalone 启动连接器。有不同模式的描述here。不同模式下的运行说明为here

    【讨论】:

    • 我在独立模式下运行 Elasticsearch Kafka Connect 接收器并看到相同的行为,即未创建 offset.storage.file.filename 文件,并且偏移量似乎在其他地方持续存在。
    • Sink 连接器使用 Kafka 消费者组功能来存储偏移量。连接的偏移文件或主题实际上只适用于一般的源连接器。
    猜你喜欢
    • 2021-10-16
    • 1970-01-01
    • 2021-03-17
    • 1970-01-01
    • 1970-01-01
    • 2020-09-23
    • 2019-10-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多