[英]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.