[英]Writing Multiple Flat Files with Item Readers And Writers Spring Batch
[英]Refactoring a Spring Batch Job to use Apache Kafka (Decoupling readers and writers)
我目前有一个 Spring 批处理作业,只需一步即可从 Oracle 读取数据,将数据传递给多个 Spring 批处理处理器 ( CompositeItemProcessor
),并将数据写入不同的目的地,例如 Oracle 和文件 ( CompositeItemWriter
):
<batch:step id="dataTransformationJob">
<batch:tasklet transaction-manager="transactionManager" task-executor="taskExecutor" throttle-limit="30">
<batch:chunk reader="dataReader" processor="compositeDataProcessor" writer="compositeItemWriter" commit-interval="100"></batch:chunk>
</batch:tasklet>
</batch:step>
上述步骤中, compositeItemWriter
配置了2个writer,依次运行,将1亿条记录写入Oracle和一个文件。 此外, dataReader
有一个同步读取方法,以确保多个线程不会从 Oracle 读取相同的数据。截至今天,这项工作需要 1 小时 30 分钟才能完成。
我计划将上述工作分解为两部分,以便读取器/处理器生成关于 2 个 Kafka 主题的数据(一个用于将数据写入 Oracle,另一个用于将数据写入文件)。 在等式的另一边,我将有一个具有两个并行流的作业,从每个主题读取数据并将数据分别写入 Oracle 和文件。
考虑到上述架构,我想了解如何重构 Spring 批处理作业以使用 Kafka。 我认为以下方面是我需要解决的问题:
CompositeItemWriter
,并且每个编写器将解压缩该块并对其调用 write 方法。 这是否意味着当我写到 Kafka 时,将有 100 个发布调用到 Kafka?注意:我知道 Kafka Connect 但不想使用它,因为它需要设置一个 Connect 集群,而我没有可用的基础设施来支持它。
问题的答案:
multiple rows into one single message in Kafka to avoid multiple.network calls?
无效,因为可以在 single.network 调用中生成/使用多条消息(行)。 对于您的初稿,我建议通过让一行对应一条消息来保持简单。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.