KafkaConsumer 跨线程可见性
KafkaConsumer visibility across threads
我有一个有两个线程的应用程序 运行。这些线程在它们之间共享一个 KafkaConsumer 实例。
KafkaConsumer 是通过禁用自动提交配置创建的。一个线程将根据一些外部输入将主题分区分配给 KafkaConsumer 实例。另一个线程不断轮询主题,处理记录并在最后提交偏移量。
现在,假设线程 1 中的主题分区分配已更改。我们可以做些什么来确保 Thread-2 可以看到这些变化?即 Thread-2 的 KafkaConsumer 将知道主题分区已在 Thread-1 中更新。
将变量定义为 volatile 是否可以解决此问题?或者我们应该做更多的事情吗?请提供您对代码示例的解释,因为我是 Java.
中的多线程新手
One thread will assign topic-partitions to the KafkaConsumer instance based on some external input. The other thread constantly polls the topic, process the records and commit the offsets at the end.
根据 javadoc(第 Multi-threaded Processing 节):
The Kafka consumer is NOT thread-safe.
因此我不太确定您是否可以在一个线程中更改分区分配并在另一个线程中查看更改。
我有一个有两个线程的应用程序 运行。这些线程在它们之间共享一个 KafkaConsumer 实例。
KafkaConsumer 是通过禁用自动提交配置创建的。一个线程将根据一些外部输入将主题分区分配给 KafkaConsumer 实例。另一个线程不断轮询主题,处理记录并在最后提交偏移量。
现在,假设线程 1 中的主题分区分配已更改。我们可以做些什么来确保 Thread-2 可以看到这些变化?即 Thread-2 的 KafkaConsumer 将知道主题分区已在 Thread-1 中更新。
将变量定义为 volatile 是否可以解决此问题?或者我们应该做更多的事情吗?请提供您对代码示例的解释,因为我是 Java.
中的多线程新手One thread will assign topic-partitions to the KafkaConsumer instance based on some external input. The other thread constantly polls the topic, process the records and commit the offsets at the end.
根据 javadoc(第 Multi-threaded Processing 节):
The Kafka consumer is NOT thread-safe.
因此我不太确定您是否可以在一个线程中更改分区分配并在另一个线程中查看更改。