Kafka使用者可以在单独的线程中提交偏移量吗?

时间:2018-04-17 21:17:04

标签: apache-kafka offset manual

Kafka是否允许一个线程或进程使用分区中的数据,而另一个线程或进程负责在数据完全处理后手动提交偏移量?

2 个答案:

答案 0 :(得分:0)

Direct from the KafkaConsumer documentation

  

Kafka消费者不是线程安全的。所有网络I / O都发生在   打电话的应用程序的线程。

...

  

此规则的唯一例外是wakeup(),它可以安全地从外部线程用于中断活动操作。

所以,不建议不要在wakeup例外之外的一个线程之外使用消费者。

答案 1 :(得分:0)

是的,我相信这是可能的。如上所述,KafkaConsumer对象不是线程安全的,因此每个线程都应该有自己的实例。两个实例应具有相同的组ID,并且当然应禁用自动提交。有一些提交方法将特定分区和偏移量作为参数: https://kafka.apache.org/11/javadoc/org/apache/kafka/clients/consumer/KafkaConsumer.html#commitSync-java.util.Map-https://kafka.apache.org/11/javadoc/org/apache/kafka/clients/consumer/KafkaConsumer.html#commitAsync-java.util.Map-org.apache.kafka.clients.consumer.OffsetCommitCallback-

但是,我认为在通过订阅方法(旧的高级消费者风格用法)使用自动组管理时可能无法做到这一点,而是你必须管理分区使用assign方法手动赋值(与旧的简单使用者一样)。但你可以试试前者,看看是否也有可能。

相关问题