我想使用 Kafka 执行有界批处理,程序将知道何时处理最后一条记录。
批处理:
- 读取平面文件
- 将每一行作为消息发送到 Kafka
卡夫卡监听器:
- 使用来自 Kafka 的消息
- 将记录插入数据库
- 如果是最后一条记录,则在数据库中将批处理作业标记为已完成。
一种方法可能是使用单个 Kafka 分区,假设保证 FIFO(先进先出),并使批处理程序发送 isLastRecord 标志。
但是,这意味着处理将仅限于单线程(单个消费者)。
问题
有没有办法通过利用多个 Kafka 分区来实现并行处理?
最佳答案
如果您需要每个文件的有序保证,则只能使用单个分区。
如果您有多个文件,则可以为不同的文件使用不同的分区。
如果文件中的每一行都是数据库中的插入,我想知道您是否首先需要按顺序保证,或者是否可以按任何顺序插入所有记录/行?
一个更基本的问题是:为什么需要先将数据放入Kafka?为什么不直接读取文件并插入呢?
关于java - 卡夫卡 : Bounded Batch Processing in Parallel,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50224164/