Apache NiFi-Kafka使用者后异步处理消息

时间:2018-08-17 13:32:38

标签: apache-kafka apache-nifi

当前,我们正在使用Apache NiFi通过Kafka使用者使用消息。 kafka使用者的输出连接到DB处理器,该处理器将消息(从使用者)获取到队列中并在其上运行存储的proc /处理。因此,DB处理器将对每个队列中的每个消息处理一条消息,并且我可以将DB处理器设置为对n个线程并行工作,但是基本上每个线程对每个队列可以处理一条消息。

我正在尝试执行以下操作:

    使用者使用后的
  1. 处理器将仅使用队列中的消息(或获取消息),并说将等待“批处理”或总计1000条消息。
  2. 一旦它获得1000条消息或经过60秒并且消息数小于1000,就推送到另一个处理器,该处理器可以是DB存储在这些消息组中的用于业务逻辑的proc。
  3. 主要,我希望上面是多线程的,即如果我们获得3000条消息,则第一个处理器将分3批读取它们并推送到DB处理器(并行)。

所以我想知道任何可以执行以上第2点的处理器,即仅读取消息并根据批处理/时间规则将其推送到下一个?

1 个答案:

答案 0 :(得分:0)

如果可以利用NiFi的记录处理器,则使用批处理大小为1000的ConsumeKafkaRecord,然后使用PutDatabaseRecord,将为您提供与您所描述的类似的行为。

如果在使用时您可能并不总是在Kafka主题中有足够的消息可用,那么在中间添加MergeContent或MergeRecord将使您等待一定的时间或数量的消息。