Java 8流是解决方案I';我在找什么?

Java 8流是解决方案I';我在找什么?,java,mongodb,collections,apache-kafka,Java,Mongodb,Collections,Apache Kafka,我正在构建一个工具来使用来自Kafka的数据,并将它们插入MongoDB,在它们之间进行一些操作 目前我正在做: //在X毫秒内轮询 ConsumerRecords记录=consumer.poll(持续时间为(100,ChronoUnit.MILLIS)); //对于每条记录,将其插入Mongo 对于(消费者记录:记录){ System.out.println(“长度为[“+record.value().length()+”]received.”的消息; 工具。_insertReport(re

我正在构建一个工具来使用来自Kafka的数据,并将它们插入MongoDB,在它们之间进行一些操作

目前我正在做:

//在X毫秒内轮询
ConsumerRecords记录=consumer.poll(持续时间为(100,ChronoUnit.MILLIS));
//对于每条记录,将其插入Mongo
对于(消费者记录:记录){
System.out.println(“长度为[“+record.value().length()+”]received.”的消息;
工具。_insertReport(record.value());

}
我不知道您到底想要实现什么,但为了阅读来自Kafka的消息并将其写入MongoDB,我建议您使用Kafka Connect和MongoDB连接器! 所有排队都由kafka connect以本机方式完成,无需编写代码

您会发现许多mongodb连接器适合您的情况,这里有两个:

后者可能是一个很好的选择,首先尝试,它的使用更简单,镜头管理其他几个连接器

Java8流是这样的吗

不,不

显而易见的解决方案是创建一个固定大小的
列表
,然后定期检查该列表的大小。。。满时,循环并刷新到Mongo,否则您将一次只录制一条记录


不过,最好使用Kafka Connect,因为它可以以更合理的方式管理异常、重试和消息转换

是的,Streams一点都不是,但RxJava是我的答案我的用例的合适答案。更确切地说,出版主题是

我创建了一个类,启动了上述发布主题,并使用
.onNext()
函数将我的卡夫卡消费记录传递给该主题。定义如下:
publicstaticvoid\u initRx(){
RxRecordsList=PublishSubject.create();
订阅(_initRxRecordConsumer());
}
私有静态观察者_initRxRecordConsumer(){
返回新的观察者(){
@凌驾
认购的公共无效(一次性d){
System.out.println(“接收订阅:正常”);
}
@凌驾
public void onNext(消费者记录记录){
System.out.println(“接收到的消息-长度:+record.toString().Length());
MongoHelper._insertReport(record.value().toString());
}
@凌驾
公共无效申报人(可丢弃的e){
System.out.println(“错误:+e”);
}
@凌驾
未完成的公共空间(){
System.out.println(“流结束”);
}
};

}
您可能正在寻找rx java?如果您只是想从Kafka转移到MongoDB,可以尝试连接并使用自定义转换器。如果您希望这是一个长寿命的结构,那么您可能希望RxJava用于单个JVM中的内存,或者像RabbitMQ这样的消息队列(用于多个程序之间的通信)。