2017-10-20 81 views
0

我有一個非常簡單的應用程序KafkaStreams。它看起來像這樣:本地狀態存儲在KafkaStreams

input topic --> extract smth., update aggregate in the local state -> output topic 

在開始的時候輸入的話題只有1分,一切工作順利。

但經過我在輸入題目增加分區的數量我觀察到的,而不是單一的更新我的應用程序的每個分區實例化,所以我的輸出主題有多個更新(每個分區1日更新)。

我該如何處理這種情況?我希望我的應用程序只生成所有輸入分區的一個聚合。

回答

2

卡夫卡流並行化的分區,因此,你只能做到這一點,通過使用單個分區的話題。

如果你無法控制你的輸入話題的主題數,您可以創建一個通過該分區的單一分區,並將所有數據的中間話題。

KStream multiPartitionInputStream = ... 
multiPartitionInputStream.through("single-partitioned-topic")... 

注意:做一個全球性的聚集不水平擴展,因此,這種模式應小心使用。

更新:

對於處理器API的用戶,您還可以通過配置"partition.grouper"創建一個單一的任務,兩者/所有分區分配給該任務提供自定義PartitionGrouper

注:提供DSL使用自定義PartitionGrouper非常沮喪,因爲人們需要了解很多內部細節和假設寫一個正確的PartitionGrouper