Java Kafka连接接收器任务忽略文件偏移量存储属性
我在使用Confluent JDBC连接器时遇到了非常奇怪的行为。我很确定它与Confluent stack无关,而是与Kafka connect框架本身有关 因此,我将Java Kafka连接接收器任务忽略文件偏移量存储属性,java,apache-kafka,apache-kafka-connect,Java,Apache Kafka,Apache Kafka Connect,我在使用Confluent JDBC连接器时遇到了非常奇怪的行为。我很确定它与Confluent stack无关,而是与Kafka connect框架本身有关 因此,我将offset.storage.file.filename属性定义为默认的/tmp/connect.offset,并运行我的接收器连接器。显然,我希望连接器在给定文件中保留偏移量(它在文件系统中不存在,但应该自动创建,对吗?)。文件说: offset.storage.file.filename 要在其中存储连接器偏移的文件。通过在
offset.storage.file.filename
属性定义为默认的/tmp/connect.offset
,并运行我的接收器连接器。显然,我希望连接器在给定文件中保留偏移量(它在文件系统中不存在,但应该自动创建,对吗?)。文件说:
offset.storage.file.filename
要在其中存储连接器偏移的文件。通过在磁盘上存储偏移量,可以在单个节点上停止和启动独立进程,并恢复到以前停止的位置
但卡夫卡的行为方式完全不同
这是一个bug,或者更可能的是,我不知道如何使用这种配置?我理解持久化偏移量的两种方法之间的区别,文件存储更方便我的需要。属性
offset.storage.file.filename
仅适用于在独立模式下运行的工作人员。如果您在卡夫卡主题中看到卡夫卡持久偏移,那么您是在分布式模式下运行的。您应该使用提供的脚本connectstandalone
启动连接器。这里有对不同模式的描述。有关在不同模式下运行的说明如下。偏移量.storage.file.filename仅在源连接器中使用。它用于在输入数据源上放置书签,并记住在何处停止读取。创建的文件包含类似于文件行号(对于文件源)或表行号(对于jdbc源或数据库)
在分布式模式下运行Kafka Connect时,此文件将替换为默认名为Connect offset
的Kafka主题,应复制该主题以容忍故障
就接收器连接器而言,无论使用哪种插件或模式(独立/分布式),它们都会像任何卡夫卡消费者一样,将上次停止读取输入主题的位置存储在名为\u consumer\u offset
的内部主题中。这允许使用传统工具,如kafka consumer groups.sh
命令行工具了解接收器连接器的滞后程度
尽管是一个源连接器,但可能是一个例外,因为它从远程Kafka读取,并且可能使用Kafka使用者
我同意文档不清楚,无论连接器类型是什么(源或接收器),都需要此设置,但它仅由源连接器使用。此设计决策背后的原因是单个Kafka Connect worker(我指的是单个JVM进程)可以运行多个连接器,可能包括源连接器和接收器连接器。换言之,此设置是工作级别设置,而不是连接器设置。我正在独立模式下运行Elasticsearch Kafka Connect接收器,并看到相同的行为,即,
offset.storage.file.filename文件
未创建,并且偏移量似乎在其他位置保留。接收器连接器使用Kafka消费组功能存储偏移量。connect的偏移文件或主题通常只适用于源连接器。您是否解决过此问题?我在独立模式下运行Elasticsearch Kafka Connect接收器时看到了相同的行为。@John,很遗憾,没有,我没有任何更新