Java Flink:批量添加源作为流和接收器

时间:2018-06-15 11:34:04

标签: java apache-flink

我是Flink的新手。我有一个要求,我需要从Kafka流中连续读取数据,但是在批量中写入。这样可以减少MongoServer上的查询次数。

请指导我做到最好的方法。

我目前的尝试。

  • 从Kafka Source
  • 读取数据
  • 应用5分钟的时间窗口
  • 减少条目以创建条目列表。
  • 从MongoSink函数中读取列表执行BulkWrite

谢谢, ashnik

1 个答案:

答案 0 :(得分:0)

以上看起来应该可行。由于Mongo客户端非常简单,如果您想提高效率,可以实现自己的有状态public class MakeParallel { private final CountDownLatch countDown = new CountDownLatch(4); public void firstCall() { Transformation.map(makeFirstCall(), input -> { if(input.isSuccessful()) { countDownLatch.countDown(); checkResult(); } return input; } } public void secondCall() { Transformation.map(makeSecondCall(), input -> { if(input.isSuccessful()) { countDownLatch.countDown(); checkResult(); } return input; } } void checkResult() { if(countDownLatch.getCount == 0) { // Result is ready } else { // Something has error } } } 来保存条目列表,并在列表达到特定大小或已经过了足够的时间时刷新到MongoDB