重置JDBC Kafka Connector以从头开始拉行?

时间:2017-03-24 16:12:17

标签: sql-server apache-kafka apache-kafka-connect

Kafka Connector可以使用主键和时间戳来确定需要处理哪些行。

我正在寻找一种方法来重置连接器,以便它从一开始就处理。

2 个答案:

答案 0 :(得分:4)

由于要求是以分布式模式运行,因此最简单的方法是将连接器名称更新为新值。这将提示新的条目进入connect-offsets主题,因为它看起来像一个全新的连接器。然后连接器应该再次开始读取,好像还没有写入Kafka。您还可以手动将逻辑删除消息发送到与该特定连接器关联的connect-offsets主题中的键,但重命名比处理它更容易。此方法适用于所有源连接器,而不仅适用于此处描述的JDBC连接器。

答案 1 :(得分:0)

我在开发过程中每次都对重命名连接器感到有些厌倦,因此开始使用逻辑删除方法。此方法可用于任何源连接器。

首先检查连接器的键/值的格式:

kafka-console-consumer --bootstrap-server localhost:9092 --topic kafka-connect-offsets --from-beginning --property print.key=true
["demo",{"query":"query"}] {"timestamp_nanos":542000000,"timestamp":1535768081542}
["demo",{"query":"query"}] {"timestamp_nanos":171831000,"timestamp":1540435281171}
["demo",{"query":"query"}] {"timestamp_nanos":267775000,"timestamp":1579522539267}

通过发送不带任何值的密钥来创建逻辑删除消息:

echo '["demo",{"query":"query"}]#' | kafka-console-producer --bootstrap-server localhost:9092 --topic kafka-connect-offsets --property "parse.key=true" --property "key.separator=#"

现在重新启动或重新创建连接器,它将再次开始产生消息。

在生产中要非常小心,除非您真的知道自己在做什么。这里有更多信息:https://rmoff.net/2019/08/15/reset-kafka-connect-source-connector-offsets/