我们如何重置与 Kafka Connect 源连接器关联的状态?
How do we reset the state associated with a Kafka Connect source connector?
我们正在使用 Kafka Connect 2.5.
我们正在使用 Confluent JDBC source connector(虽然我认为这个问题主要与连接器类型无关)并且正在使用 'incrementing mode'(主要键)作为每条记录的唯一 ID。
这在正常情况下工作正常;连接器第一次启动时,所有记录都被消耗并放置在一个主题上,然后,当添加新记录时,它们将被添加到我们的主题中。在我们的开发环境中,当我们更改连接器参数等时,我们希望有效地按需重置连接器;即让它再次使用 table“开头”的数据。
我们认为删除连接器(使用 Kafka Connect REST API)会做到这一点 - 并且会产生副作用,即从 Kafka Connect connect-*
元数据主题中删除有关该连接器配置的所有信息也是。
然而,这似乎并没有发生。元数据保留在那些主题中,当我们 recreate/re-add 连接器配置(再次使用 REST API)时,它 'remembers' 它在 table 中消耗的偏移量。这似乎令人困惑且无益 - 删除连接器不会删除其状态。有没有办法更永久地擦除连接器 and/or 重置其消费位置,而不是拉下整个 Kafka Connect 环境,这看起来很激烈?理想情况下,我们不希望直接干预内部主题。
对这个问题的部分回答:这似乎是我们看到的行为 is to be expected:
If you’re using incremental ingest, what offset does Kafka Connect
have stored? If you delete and recreate a connector with the same
name, the offset from the previous instance will be preserved.
Consider the scenario in which you create a connector. It successfully
ingests all data up to a given ID or timestamp value in the source
table, and then you delete and recreate it. The new version of the
connector will get the offset from the previous version and thus only
ingest newer data than that which was previously processed. You can
verify this by looking at the offset.storage.topic and the values
stored in it for the table in question.
至少对于 Confluent JDBC 连接器,有一个 workaround to reset the pointer。
就我个人而言,我仍然很困惑为什么 Kafka Connect 在删除时完全保留连接器的状态,但这似乎是设计行为。如果有更好的(和受支持的)方法来删除该状态,我们仍然会感兴趣。
另一篇相关博客文章:https://rmoff.net/2019/08/15/reset-kafka-connect-source-connector-offsets/
我们正在使用 Kafka Connect 2.5.
我们正在使用 Confluent JDBC source connector(虽然我认为这个问题主要与连接器类型无关)并且正在使用 'incrementing mode'(主要键)作为每条记录的唯一 ID。
这在正常情况下工作正常;连接器第一次启动时,所有记录都被消耗并放置在一个主题上,然后,当添加新记录时,它们将被添加到我们的主题中。在我们的开发环境中,当我们更改连接器参数等时,我们希望有效地按需重置连接器;即让它再次使用 table“开头”的数据。
我们认为删除连接器(使用 Kafka Connect REST API)会做到这一点 - 并且会产生副作用,即从 Kafka Connect connect-*
元数据主题中删除有关该连接器配置的所有信息也是。
然而,这似乎并没有发生。元数据保留在那些主题中,当我们 recreate/re-add 连接器配置(再次使用 REST API)时,它 'remembers' 它在 table 中消耗的偏移量。这似乎令人困惑且无益 - 删除连接器不会删除其状态。有没有办法更永久地擦除连接器 and/or 重置其消费位置,而不是拉下整个 Kafka Connect 环境,这看起来很激烈?理想情况下,我们不希望直接干预内部主题。
对这个问题的部分回答:这似乎是我们看到的行为 is to be expected:
If you’re using incremental ingest, what offset does Kafka Connect have stored? If you delete and recreate a connector with the same name, the offset from the previous instance will be preserved. Consider the scenario in which you create a connector. It successfully ingests all data up to a given ID or timestamp value in the source table, and then you delete and recreate it. The new version of the connector will get the offset from the previous version and thus only ingest newer data than that which was previously processed. You can verify this by looking at the offset.storage.topic and the values stored in it for the table in question.
至少对于 Confluent JDBC 连接器,有一个 workaround to reset the pointer。
就我个人而言,我仍然很困惑为什么 Kafka Connect 在删除时完全保留连接器的状态,但这似乎是设计行为。如果有更好的(和受支持的)方法来删除该状态,我们仍然会感兴趣。
另一篇相关博客文章:https://rmoff.net/2019/08/15/reset-kafka-connect-source-connector-offsets/