我有一个Spring Batch解决方案,它读取Oracle数据库中的几个表,对数据进行一些扁平化和清理,并将其发送到我们的BI平台Restful Api。Spring Batch按日期而不是按大小将这些数据分解为块。可能在某一天,一个区块可能由数百万行组成。我们以以下方式运行完整的端到端流程:
- Control-M在预定时间向负载均衡器发送触发器
- 通过负载均衡器请求到达Spring Batch应用程序的一个实例
- Spring Batch从Oracle数据库中分块读取当天的数据
- 然后将区块发送到目标API
我的问题是:
- 块状物会变得更重。如果它包含数百万行,那么实例的堆大小就会增加,并且在某一点上块将以缓慢的速度处理
- 一个实例承担整个批处理的负载
如何在一组实例中分配此处理?并行处理可以实现吗?如果可以,我如何确保多个实例不会读取相同的行(以避免重复(?还有其他建议吗?
谢谢。
您可以使用(本地或远程(分区步骤,其中每个工作步骤都被分配了一个不同的数据集。您可以在这里的文档中找到更多详细信息和代码示例:
- https://docs.spring.io/spring-batch/docs/current/reference/html/spring-batch-integration.html#remote-分区
- https://github.com/spring-projects/spring-batch/tree/main/spring-batch-samples#partitioning-样品