由于kafkaConsumer,spring kafkaListener无法搜索,因此对多线程访问不安全

时间:2018-12-06 12:02:16

标签: spring apache-kafka

案例非常简单-我有两个来自两个不同主题的kafka侦听器,其中一个被视为数据主题,第二个被视为命令主题 当我收到命令主题的请求时,我想将数据主题的时间倒退到某个日期:

//get reference to consumer for data-topic 
protected Consumer<?, ?> consumer = ...

//when event from command-topic received i want to shift back in time
Map<TopicPartition, OffsetAndTimestamp> offsets = consumer.offsetsForTimes(interest);

不幸的是,我遇到一个错误:

java.util.ConcurrentModificationException: KafkaConsumer is not safe for multi-threaded access
at org.apache.kafka.clients.consumer.KafkaConsumer.acquire(KafkaConsumer.java:1808) ~[kafka-clients-1.0.2.jar:na]
at org.apache.kafka.clients.consumer.KafkaConsumer.acquireAndEnsureOpen(KafkaConsumer.java:1792) ~[kafka-clients-1.0.2.jar:na]

我相信数据监听器同时处理记录并从另一个线程offsetsForTimes调用违反了单线程规则,但是您认为解决该问题的最佳方法是什么?

0 个答案:

没有答案