Java Kafka连接接收器任务忽略文件偏移量存储属性

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 要在其中存储连接器偏移的文件。通过在

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

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

offset.storage.file.filename
要在其中存储连接器偏移的文件。通过在磁盘上存储偏移量,可以在单个节点上停止和启动独立进程,并恢复到以前停止的位置

但卡夫卡的行为方式完全不同

  • 它检查给定文件是否存在
  • 事实并非如此,卡夫卡只是忽略了这一点,并坚持卡夫卡的主题
  • 若我手动创建给定的文件,无论如何读取都会失败(EOFEException),并且偏移量会再次保留在主题中

  • 这是一个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,很遗憾,没有,我没有任何更新