簡體   English   中英

Kafka 主題到多個 kafka 主題調度程序(同一集群)

[英]Kafka topic to multiple kafka topics dispatcher (same cluster)

我的用例如下:我有一個 kafka 主題A其中的消息“邏輯上”屬於不同的“服務”,我既不處理將消息發送到A的系統。

我想根據描述服務的一列(格式為 CSV 樣式)從A讀取此類消息並將它們分派到同一集群上的一組每項服務主題(我們稱它們為A_1, ..., A_n ) ,但沒關系)。

服務集是靜態的,我目前不必處理添加/刪除。

我希望使用KafkaConnect來執行這樣的任務,但令人驚訝的是,沒有 Kafka 源/接收器(我找不到票,但它們已被拒絕)。

我見過MirrorMaker2但對於我的(簡單)用例來說,它看起來有點矯枉過正。

我也知道KafkaStreams但我寧願不KafkaStreams編寫和維護代碼。

我的問題是:有沒有辦法用 kafka 本地工具實現這個主題調度,而無需自己編寫 kafka 消費者/生產者?

PS:如果有人認為MirrorMaker2很適合我,我也很感興趣,我不太了解這個工具。

Mirror Maker 是用來做...鏡像的。 當您希望將一個集群從一個數據中心鏡像到另一個具有相同主題的集群時,這很有用。 您的用例是不同的。

Kafka Connect 用於通過 Kafka 主題同步不同的系統(例如來自數據庫的數據),但我也沒有在這個用例中看到它。

我會為此使用 Kafka Streams 應用程序。

就我所知,沒有直接的方法可以根據傳入的消息將傳入的主題消息分支到主題列表。 您需要編寫自定義代碼來實現這一點。

  1. 使用處理器 API 請參閱此處
  2. 在 Processor 方法中傳遞主題列表
  3. 使用邏輯識別需要分支的主題
  4. 使用 context.forward 將消息發布到其他主題

context.forward(key, value, To.child("selected topic"))

所有其他答案都是正確的,在撰寫本文時,我確實在 Kafka 工具集中找到了任何“僅配置”解決方案。

最后的訣竅是使用Logstash ,因為它的“kafka 輸出插件”支持topic-id參數中的 jinja 變量。

因此,一旦您在字段(例如service_name )中有可用的“目標主題名稱”,它就像這樣簡單:

output {
  kafka {
    id => "sink"
    codec => [...]
    bootstrap_servers => [...]
    topic_id => "%{[service_name]}"
    [...]
  }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM