实现生产者和批量消费者模型的最简单java方法

实现生产者和批量消费者模型的最简单java方法,java,apache-kafka,producer-consumer,Java,Apache Kafka,Producer Consumer,我需要生产者一个接一个地生成数据,消费者将批量消费数据(除非队列中有足够的元素,否则将阻塞)。 但java BlockingQueue似乎只支持消费者逐个消费数据 卡夫卡似乎是一个解决方案,还有其他更简单的解决方案吗?让消费者一个接一个地从队列中消费,然后将项目放在自己的列表中,而不做其他事情。当列表达到一定大小时,开始处理列表。如果您需要纯java解决方案,我最近开发了这个实用程序,如果队列元素未达到批处理大小,则使用刷新超时来批处理阻塞队列元素。它还支持扇出模式,使用多个实例来细化同一组数据

我需要生产者一个接一个地生成数据,消费者将批量消费数据(除非队列中有足够的元素,否则将阻塞)。 但java BlockingQueue似乎只支持消费者逐个消费数据


卡夫卡似乎是一个解决方案,还有其他更简单的解决方案吗?

让消费者一个接一个地从队列中消费,然后将项目放在自己的列表中,而不做其他事情。当列表达到一定大小时,开始处理列表。

如果您需要纯java解决方案,我最近开发了这个实用程序,如果队列元素未达到批处理大小,则使用刷新超时来批处理阻塞队列元素。它还支持扇出模式,使用多个实例来细化同一组数据(使用更多的cpu核心)

//实例化注册表
FQueueRegistry注册表=新FQUEUEUERegistry();
//构建FQUE用户
registry.buildFQUE(String.class)
.batch()
.withChunkSize(5)
.withFlushTimeout(1)
.带FlushTimeUnit(时间单位秒)
.完成
.consume(()->(广播公司,elms)->System.out.println(“批处理的elms为:+elms.size()));
//将数据推送到队列中
对于(int i=0;i<10;i++){
registry.sendBroadcast(“示例”+i);
}
更多信息在这里


是一个消费者还是多个消费者?如果有多个消费者,队列中的顺序是否重要?@RogerGustavsson single consumer&single producer.@JoopEggen,如果队列中只有一个项目仍然会立即返回。当队列大小达到2时不会。第二个参数是元素的最大数量,但可以传递的元素更少。
// Instantiate the registry
FQueueRegistry registry = new FQueueRegistry();

// Build FQueue consumer
registry.buildFQueue(String.class)
                .batch()
                .withChunkSize(5)
                .withFlushTimeout(1)
                .withFlushTimeUnit(TimeUnit.SECONDS)
                .done()
                .consume(() -> (broadcaster, elms) -> System.out.println("elms batched are: "+elms.size()));

// Push data into queue
for(int i = 0; i < 10; i++){
        registry.sendBroadcast("Sample"+i);
}