2017-01-04 61 views
0

我可以爲不同類型的更新創建名爲update_i的主題,並使用user_id在Kafka MQ中對它們進行分區?我已經通過confluent.io通過這篇文章:https://www.confluent.io/blog/how-to-choose-the-number-of-topicspartitions-in-a-kafka-cluster/。另外,我知道我無法用動態數量的分區創建主題。這兩個事實(卡夫卡分區的帖子和靜態數量)。什麼是交付機制的選擇?卡夫卡用作新聞傳遞中的傳遞機制

+0

爲什麼要按用戶標識進行分區?你想「訂閱」還是僅處理來自某些用戶而不是其他用戶的消息?或者你正在考慮將user_id作爲目標用戶ID? –

回答

0

作爲一個可能的解決方案,我建議創建多個分區,然後建立生產者使用以下規則

user_id mod <number_of_partitions> 

這將讓你保持特定的user_id消息爲了選擇分區。

然後,如果您需要讓消費者只處理特定user_id的消息,則可以編寫一個(低級別)消費者,它將讀取特定分區並僅處理爲特定客戶發送的消息並忽略所有其他消息。

1

我可以爲不同類型的更新創建名爲update_i的主題,並使用Kafka MQ中的user_id對它們進行分區嗎?

如果我理解正確,答案是肯定的。

你需要簡而言之做什麼:

  • 主題配置:確定需要的分區你的主題(S)。通常,根據(1)輸入數據的預期比例/容量(即縮放的寫入側)和/或(2)消耗用於處理的消息所需的並行性來確定分區的數量,縮放的一面。詳情請參閱https://www.confluent.io/blog/how-to-choose-the-number-of-topicspartitions-in-a-kafka-cluster/

  • 給這些卡夫卡主題(也就是「卡夫卡製片人」一側)寫信息:在卡夫卡,信息是鍵值對。在你的情況下,你可以設置消息密鑰爲user_id。然後,當使用Kafka默認的「分區程序」時,同一個消息鍵(這裏是:user_id)的消息會自動發送到同一個分區 - 這是您想要實現的。