2016-08-01 111 views
1

我有一個消費者組中有兩個消費者分配了相同的kafka主題分區。我希望從消費者B內部獲得最後一次讀取偏移量,消費者A.任何想法,如何實現這一點?如何獲取消費者組的最後消費抵消?

+0

你想有一個以上的消費者在消費從單個分區平行嗎? –

+0

@LucianoAfranllie類似的,但我可以讓消費者平行讀,但我希望只跟蹤其他消費者在卡夫卡的最後讀取偏移量。 – swappy

回答

2

單個分區永遠不會被分配給同一組中的兩個使用者實例。

您可以使用下面的腳本來知道最後的消耗偏移

sh kafka-consumer-groups.sh --bootstrap-server localhost:9092 --new-consumer --group groupname --describe 
+0

爲什麼它不會被分配,記住我說的是分配和未訂閱。 – swappy

+0

如果您手動分配分區,則它表現爲簡單消費者(低級消費者)。注意你的語言。 –

+0

不要聽起來傲慢,但現在你覺得我應該繼續執行這個問題? – swappy

0

卡夫卡店偏移量由(消費者組ID,主題,分區),所以首先要注意的一點是,從卡夫卡點認爲沒有像「最後一次讀取消費者A的抵消額」那樣的東西。您可以通過Kafka使用者API獲得的所有信息都適用於給定的(組,主題,分區)。消費者API中有兩種方法可能有用。

commited():獲取給定分區的最後提交的偏移量(無論提交是由此進程還是其他進程發生的)。

position():獲取將被提取的下一條記錄的偏移量(如果具有該偏移量的記錄存在)。

如果這不是你所需要的,那麼你將不得不自己實現一些東西。假設你已經知道如何獲得最後抵消消費的讀操作,那麼消費者A應該是值存儲在某個位置,提供給消費者B.這個位置可能是

  • 卡夫卡本身。例如,消費者A可以將最近的讀取偏移量發佈到 像ConsumerA-p0這樣的衆所周知的主題,而消費者B可以訂閱 這個主題。
  • 動物園管理員。再次,在一個衆所周知的道路上達成一致。
  • 外部數據庫。
  • 更基本的選擇,如果消費者都共享同一個操作系統:IPC,在文件系統中的文件,在內存與鎖保護的變量等
+0

我同意你和理論上它看起來似乎合理,但我想知道是否有某些功能由kafka本身提供服務的目的 – swappy

+0

添加更多的細節給我的答案。我認爲這些都是你有的選擇。 –