2017-02-02 92 views
0

我要爲我們的密集消息系統建立一個卡夫卡羣集。 目前我們已經建立了兩個kafka集羣,一個基於倫敦(LD)作爲主要,另一個基於紐約(紐約州)作爲DR(備份),我們已經讓java客戶端將數據從LD複製到NY。如何影響卡夫卡分區領導人選舉過程

正如卡夫卡有內置的功能,如分區和複製功能scalibity,高可用性和故障轉移的目的,使我們要創建一個更大的集羣,包括在倫敦和紐約

但兩者的服務器。 ..

我們遇到了NY和LD服務器之間的連接問題,網絡速度非常糟糕。

我已經執行了服務器測試。

生產者配置: - acks = 1(僅需要分區領導者的確認) - 發送異步。

  1. 當生產者在倫敦將消息發送到經紀人在LD中,thoughput 100000 MSG /秒,提供消息大小是:100字節=> 10MB /秒

  2. 當在倫敦生產者和發送消息給代理在紐約,在thoughput 10味精/秒,提供郵件大小爲:100字節=> 1KB /秒

所以......

我正在考慮什麼辦法,使小號生產者/消費者利用當地的優勢,這意味着如果他們在同一個網絡中,會向最近的經紀人發送消息。假設:LD中的消費者將消息發送給基於LD的經紀人。 (我明白寫入/讀取請求只發生在分區領導)。

任何建議將非常appriciate。

回答

0

從我瞭解你目前的結構是:

  • 1經紀位於紐約。
  • 1位於LD的經紀人。
  • n個話題。 (我將假設主題的數量是1)。
  • n個主題上的分區。 (我將假設分區的數量是2)。
  • 這兩個分區都通過代理進行復制。

你想使位於所有分區的LD領袖經紀人,因此,所有的生產商將與該經紀人和位於在紐約的經紀人互動將被用作複製。如果是這樣的話,那麼,你可以做到以下幾點:

檢查你的主題的配置:

./kafka-topics.sh --describe --topic stream-log 

Topic:<topic-name> PartitionCount:2 ReplicationFactor:2 Configs: 
    Topic: stream-log Partition: 0 Leader: 0 Replicas: 0,1 Isr: 0,1 
    Topic: stream-log Partition: 1 Leader: 1 Replicas: 1,0 Isr: 1,0 

並假設:

  • LD經紀編號:0
  • NY經紀人編號:1

您可以觀察分區1的領導者是如何由經紀人1(NY ),我們要修改的是,這樣做是必要的重新分配分區:

./kafka-reassign-partitions.sh --reassignment-json-file manual_assign.json --execute 

JSON文件的內容:

{"partitions": [ 
    {"topic": "<topic-name>", "partition": 0, "replicas": [0,1]}, 
    {"topic": "<topic-name>", "partition": 1, "replicas": [0,1]} 
], 
"version":1 
} 

最後,迫使卡夫卡更新的領導者,跑:

./kafka-preferred-replica-election.sh 

最後的命令會影響,如果沒有指定的主題列表已創建的所有主題,這不應該是一個問題,但有它在心中。

值得看看this guide,它解釋了類似的東西。如果您好奇,您可以查看工具here的官方文檔。

+0

感謝@ jose.goncabel的幫助。這實際上是我們正在考慮的方法之一,但據我瞭解,由於網絡連接,Kafka不建議創建集羣交叉數據中心,而應該有兩個獨立的集羣,並創建一個鏡像器來複制數據交叉數據中心。你如何看待這個提議? – Joey

+0

在我看來,在您的主數據中心創建一個Kafka集羣並使用鏡像製作工具在另一個地方複製它是一種有效的方法。然而,正如卡夫卡官方文檔中所描述的那樣,您需要考慮一些注意事項:「鏡像集羣並非真正意圖作爲容錯機制(因爲消費者的位置會不同);因此,我們建議使用正常羣集內複製「。你可以查看文檔[這裏](https://kafka.apache.org/documentation/#basic_ops_mirror_maker)。 –

+0

感謝您的推薦。順便說一句,我一直在嘗試使用MirrorMaker工具在集羣之間複製數據。但是我遇到了錯誤。 _italic_ [2017年2月3日06:17:00193]致命[mirrormaker線程0]鏡子製造者螺紋衰竭(kafka.tools.MirrorMaker $ MirrorMaker 螺紋) java.lang.IllegalArgumentException異常:無效時間戳-1 at org.apache.kafka.clients.producer.ProducerRecord。 (ProducerRecord.java:60) _italic_ – Joey