【问题标题】:Is it a must to synchronize ConsumerRecords when I only want to concurrnetly read it?当我只想并发阅读时,是否必须同步 ConsumerRecords?
【发布时间】:2020-01-29 08:09:05
【问题描述】:

首先我从kafka轮询数据并且需要使用异步方法读取记录,我很困惑访问consumerRecords是否是线程安全的?

sn-ps的代码如下:

ConsumerRecords<String,String> consumerRecords = kafkaConsumer.poll(100);
//1. asynchronously read topic1
foo.asynMethod1(consumerRecords(topic1));
//2. asynchronously read topic2
bar.asynMethod2(consumerRecords(topic2));

【问题讨论】:

  • 这些记录是可迭代的,因此您必须复制或转储到列表中,以免在两种方法中增加相同的迭代器
  • @cricket_007 即使我用两种方法处理不同的主题?
  • 只要你使用的是同一个可迭代对象,那么可以

标签: java multithreading apache-kafka kafka-consumer-api


【解决方案1】:

只要您不写入一条数据,并且在阅读器开始执行时该数据已经填充,您就不会不会 只要读取器引用数据的引用保持不变,就可以从并发读取该数据中获得任何数据竞争。

tl;dr:正如您在代码片段中指定的那样,没有。

【讨论】:

    猜你喜欢
    • 2010-12-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-10
    • 1970-01-01
    相关资源
    最近更新 更多