我知道Kafka声明KafkaConsumer不是线程安全的。
所以我这样做了:(斯卡拉)
val m = Map(new TopicPartition(msg.topic(), msg.partition()) -> new OffsetAndMetadata(msg.offset()))
consumer.synchronized{ consumer.commitSync(m) }
我将访问消费者的内容放在同步块中,但我仍然在使用consumer.commitSync(m)的行上获得了ConcurrentModificationException错误。
为什么,我该怎么办?
我正在使用Akka流,因此必然会有隐藏的线程,但同步块不应该处理这个问题吗?
答案 0 :(得分:0)
在文档中找到的一种方法是创建一个单独的线程,仅用于KafkaConsumer,并使用某种并发队列与外部工作进行通信。