
Kafka
消费者——从
Kafka
读取数据
|
61
重试异步提交
我们可以使用一个单调递增的序列号来维护异步提交的顺序。在每次提交偏
移量之后或在回调里提交偏移量时递增序列号。在进行重试前,先检查回调
的序列号和即将提交的偏移量是否相等,如果相等,说明没有新的提交,那
么可以安全地进行重试。如果序列号比较大,说明有一个新的提交已经发送
出去了,应该停止重试。
4.6.4
同步和异步组合提交
一般情况下,针对偶尔出现的提交失败,不进行重试不会有太大问题,因为如果提交失败
是因为临时问题导致的,那么后续的提交总会有成功的。但如果这是发生在关闭消费者或
再均衡前的最后一次提交,就要确保能够提交成功。
因此,在消费者关闭前一般会组合使用
commitAsync()
和
commitSync()
。它们的工作原理
如下(后面讲到再均衡监听器时,我们会讨论如何在发生再均衡前提交偏移量)
:
try {
while (true) {
ConsumerRecords<String, String> records = consumer.poll(100);
for (ConsumerRecord<String, String> record : records) {
System.out.println("topic = %s, partition = %s, offset = %d,
customer = %s, country = %s\n",
record.topic(), record.partition(), ...