Kafka是否允许一个线程或进程使用分区中的数据,而另一个线程或进程负责在数据完全处理后手动提交偏移量?
答案 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方法手动赋值(与旧的简单使用者一样)。但你可以试试前者,看看是否也有可能。