2014-05-21 47 views
8

我處於探索卡夫卡版本0.8.1.1的初始階段。卡夫卡在一個組中的單一消費者故障

我已經成功地運行了消費者組示例,其中有多個分區及其在消費者中的消息發佈情況。

我想運行的一個測試用例是組中的用戶突然死亡(例如,kill -9)。當我這樣做時,我預計再平衡發生,但沒有發生。那麼,我可以做這些事情嗎?使用API​​

  • 配置卡夫卡

    1. 觸發再平衡需要等待一定的時間,爲消費者活動,並重新平衡自動假設它是正常關機。

    這裏的問題是,分配給死亡使用者的分區中的所有消息都保留在隊列中,直到重新平衡發生時纔會處理。

  • +0

    我想提到的相同的方式,但issue..can你點我的線索仍面臨着相同的http://stackoverflow.com/questions/39241872/kafka-common-consumerrebalancefailedexception-cant-rebalance-after -4 – Ratha

    回答

    7

    重新平衡將自動發生,可以在消費者配置(zookeeper.session.timeout.ms)中設置。按照該文件建立

    zookeeper.session.timeout.ms:ZooKeeper的會話超時。如果消費者在這段時間內沒有對動物園管理員心跳,它被認爲是死亡,並且會發生重新平衡。默認值爲6000毫秒

    同一組中的其他現場消費者將在超時間隔後開始收到消息。

    根據您的要求配置此超時值。

    同樣來自卡夫卡文檔一些更多的信息:

    消費再平衡失敗(你會看到ConsumerRebalanceFailedException):這是由於當兩個用戶試圖擁有相同的主題劃分衝突。日誌會顯示導致衝突的原因(搜索「衝突」)。

    1. 如果消費者訂閱數量的主題和你的ZK服務器繁忙,這可能被消費者所造成沒有足夠的時間來看看在同一組中的所有消費者的一致視圖。如果是這種情況,請嘗試增加rebalance.max.retries和rebalance.backoff.ms。
    2. 另一個原因可能是其中一名消費者被殺死。再平衡期間的其他消費者不會意識到消費者在zookeeper.session.timeout.ms時間之後消失了。在這種情況下,請確保rebalance.max.retries * rebalance.backoff.ms> zookeeper.session.timeout.ms。
    +0

    謝謝,我已經這樣做了,經過了很多次。 但是,可能殺死我的代碼「模擬」是不夠的。我已經通過消費者線程 consumerThread.interrupt(); 可能沒有中斷與zk的連接。 當我將消費者作爲多個進程運行並殺死它們時,它完美運行,即發生了重新平衡。謝謝! – binit

    +0

    我試過了,但沒有解決我的問題。 http://stackoverflow.com/questions/39241872/kafka-common-consumerrebalancefailedexception-cant-rebalance-after-4 – Ratha