偏移量设置为自动提交,周期为一分钟。 我杀死了消费者。 Kafka自动提交抵消可以继续吗?
答案 0 :(得分:1)
您不能使用kill -9
(SIGKILL),因为消费者没有时间对该信号做出反应。
相反,使用kill -15
(SIGTERM)并添加以下代码:
KafkaConsumer consumer = ...
Runtime.getRuntime().addShutdownHook(new Thread(consumer::close));
close
方法的
关闭消费者,等待任何所需清理的默认超时30秒。如果启用了自动提交,则会在默认超时时间内提交当前偏移量。
如果你的30秒太长,还有另一个接受自定义超时的close
方法。
答案 1 :(得分:0)
如果您运行kill -9
,则该过程立即停止。无论那时还没有自动提交的内容都不会。
目前尚不清楚这是否是你想要的。关于这个问题的更多细节可以提供更多关于答案的细节。
答案 2 :(得分:0)
提交偏移量是由Kafka客户端执行的操作(它使用Kafka协议中的特定OffsetCommit命令完成)。启用自动提交只是意味着Kafka客户端会定期为您执行此操作,并且您不需要从应用程序代码中明确执行此操作。因此,如果您终止消费者,则不再执行偏移提交。
答案 3 :(得分:0)
简短的回答是否定的。
很长的答案是你没有说你正在使用哪种编程语言,并且自动提交在Java中与librdkafka客户端略有不同,但在两者中,如果你使用kill -9不合理地杀死客户端,则客户端应用程序是死了,所以无法提供补偿。偏移量始终由客户端提交,而不是kafka代理,因此如果您杀死-9客户端,则最后提交的偏移量将是在上次自动提交间隔到期后(对于librdkafka)或最后一次调用poll()之后提交的任何内容(对于Java)。