2013-05-11 44 views
1

我有一個Apache-卡夫卡0.8簇與下面的設置 -卡夫卡存儲多個消息比生產

1)3個經紀人同一機器
2)與10個分區和3個副本的一個主題的所有運行。

我有20個生產者生產一個主題。
我有10個消費者從每個分區消費。 我正在測試經紀人的失敗安全。

當所有代理啓動並運行時,消耗的消息數等於生成的消息數。

但是,當我通過一次一個地關閉代理來測試安裝時,我觀察到消息數量比生產消耗的多。

可能的原因是什麼?

+0

我經歷類似的行爲,同時使卡夫卡經紀人恢復生機。我從三個碼頭化的卡夫卡經紀人開始。比暫停一個。
開始生產消息。取消暫停的代理。卡夫卡的信息比製作的要多。這與acks = -1。當使用acks = 1時,有一些消息丟失...... – 2016-02-25 13:27:56

回答

0

首先一個念頭:

除非你有各家券商不同的磁盤上,強烈建議您使用單獨的機器每個經紀人。這是因爲每個磁盤都具有代理商希望使用的最大I/O吞吐量,並且如果您有多個代理使用相同的磁盤,則所有代理都將競爭I/O。

您的經紀商下跌速度有多快?即時殺死或優雅關機?直到下一個經紀人遇害多少時間?什麼是您的消息確認級別?你製作信息的速度是多少?

如果你殺死一個代理的速度太慢,那麼生產者可能已經向臨死的代理髮送了一條消息,這個消息在競爭條件下可能已經被複制,但是它在生產者死亡之前不會發送確認。這會導致生產者認爲該消息未被成功複製,然後它會嘗試將相同的消息發送給新領導。新的領導者會認爲重複的消息是一條新消息,因此將其添加到日誌中。

這是一種競爭條件,除非在高生產率和確認等級-1的情況下,這是非常不可能的。