案例非常简单-我有两个来自两个不同主题的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调用违反了单线程规则,但是您认为解决该问题的最佳方法是什么?