杀死-9消费者时,Can Kafka自动提交抵消会继续吗?

时间:2018-01-02 02:50:11

标签: apache-kafka consumer

偏移量设置为自动提交,周期为一分钟。 我杀死了消费者。 Kafka自动提交抵消可以继续吗?

4 个答案:

答案 0 :(得分:1)

您不能使用kill -9(SIGKILL),因为消费者没有时间对该信号做出反应。

相反,使用kill -15(SIGTERM)并添加以下代码:

KafkaConsumer consumer = ...

Runtime.getRuntime().addShutdownHook(new Thread(consumer::close));
close方法的

Here's the description

  

关闭消费者,等待任何所需清理的默认超时30秒。如果启用了自动提交,则会在默认超时时间内提交当前偏移量。

如果你的30秒太长,还有另一个接受自定义超时的close方法。

答案 1 :(得分:0)

如果您运行kill -9,则该过程立即停止。无论那时还没有自动提交的内容都不会。

目前尚不清楚这是否是你想要的。关于这个问题的更多细节可以提供更多关于答案的细节。

答案 2 :(得分:0)

提交偏移量是由Kafka客户端执行的操作(它使用Kafka协议中的特定OffsetCommit命令完成)。启用自动提交只是意味着Kafka客户端会定期为您执行此操作,并且您不需要从应用程序代码中明确执行此操作。因此,如果您终止消费者,则不再执行偏移提交。

答案 3 :(得分:0)

简短的回答是否定的。

很长的答案是你没有说你正在使用哪种编程语言,并且自动提交在Java中与librdkafka客户端略有不同,但在两者中,如果你使用kill -9不合理地杀死客户端,则客户端应用程序是死了,所以无法提供补偿。偏移量始终由客户端提交,而不是kafka代理,因此如果您杀死-9客户端,则最后提交的偏移量将是在上次自动提交间隔到期后(对于librdkafka)或最后一次调用poll()之后提交的任何内容(对于Java)。