扩展Kafka Connect SinkTask并开始使用给定的偏移量

时间:2016-07-17 22:35:46

标签: apache-kafka apache-kafka-connect

我想扩展SinkTask以创建我自己的接收器连接器。

如果我在刷新期间保存偏移量,下次启动接收器连接器时我想继续读取已保存的偏移量,这样做的正确方法是什么?

我尝试使用被覆盖的SinkTaskContext的{​​{1}}分配我自己的偏移量:

initialize(SinkTaskContext context)

但这不起作用,因为尚未分配分区。我得到了例外。

我是否应该将上下文(从@Override public void initialize(SinkTaskContext context) { HashMap<TopicPartition, Long> offsetMap = new HashMap<>(); ... context.offset(offsetMap); } )保存到全局变量中,然后使用它在方法initialize()(从open(Collection<TopicPartition> partitions)中重写)中为其分配偏移量我在SinkTask内做的一样吗? e.g:

initialize

1 个答案:

答案 0 :(得分:0)

open() 期间重置偏移应是正确的方法,但由于bug尚未解决,目前无法正常处理。

现在的解决方法是处理put()中的重置偏移。这可能有点违反直觉,但由于您正在管理自己的偏移,因此如果您愿意,您实际上可以忽略数据。当您收到第一个put()电话时,您可以处理加载偏移并重置它们。所有后续数据将来自您在重置时指定的偏移量。这就是HDFS connector目前实现其一次交付的方式。 (不幸的是,这是一个很好的例子,你可以准确地获得一次但相对复杂的代码。)事实上,由于HDFS连接器驱动了Kafka Connect中的偏移管理功能,因此它不会重置重新平衡正是实施过程中错过的原因。