在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

鍍金池/ 問答/人工智能  Java/ kafka客戶端怎么選擇發(fā)到哪個kafka的broker節(jié)點?

kafka客戶端怎么選擇發(fā)到哪個kafka的broker節(jié)點?

昨天學(xué)習(xí)kafka的時候,網(wǎng)上提到,kafka對于同一個topic是有多個不同的分區(qū)partition的,同一個分區(qū)會有l(wèi)eader和followers,分布在不同的節(jié)點上面,打個比方,有3個kafka節(jié)點,某一個topic有6個分區(qū)。當(dāng)客戶端往kafka發(fā)送信息時,是自己決定放到哪個分區(qū),還是隨意發(fā)到某一個kafka節(jié)點上,由kafka來決定放入哪個分區(qū)呢?為了保證高可用,是不是客戶端應(yīng)該配置多個kafka節(jié)點,當(dāng)某一個節(jié)點掛了,客戶端自動切換到可以使用的節(jié)點上,然而,我在客戶端連接程序的示例中,沒有發(fā)現(xiàn)這樣的配置,zk倒是有多個節(jié)點的配置。

回答
編輯回答
無標(biāo)題
2017年10月12日 16:53
編輯回答
汐顏

這個可以通過設(shè)置消息的key字段來hash,分配到固定的partition,比如同一個userId。
但是不能指定分配到那個具體的分區(qū),或許你可以看看低層API,Producer自己實現(xiàn)個發(fā)送的接口。
但是這樣的話,如果這個分區(qū)掛了的話,kafka就無法保證高可用了。理論上來說,不該有這樣的機(jī)制。
kafka相關(guān)學(xué)習(xí)的資料,可以看看我個人的博客,寫的很詳細(xì)。

2017年7月24日 06:22
編輯回答
瞄小懶

首先kafka生產(chǎn)者并不能將消息發(fā)送到指定broker,消息是必然發(fā)生到leader副本所在的broker的。
假設(shè)你有3個broker,主題有6個分區(qū),那么每個broker將分到2個分。你這里并沒有提到副本,如果副本數(shù)為1,那么這6個分區(qū)唯一的副本就是leader副本。
leader副本是用來處理客戶端的請求的,也包括follower復(fù)制的獲取消息請求。
Kafka的高可用性也是通過副本及復(fù)制機(jī)制實現(xiàn)的(當(dāng)其中一臺包含leader副本的broker奔潰,就會從分布在其他broker的follower副本中選舉leader副本)。
你能做的就是在new ProducerRecord時指定分區(qū),每指定就會根據(jù)你配置的分區(qū)器(不指定就使用默認(rèn)的分區(qū)器根據(jù)你的key(沒指定將隨機(jī)發(fā)送分區(qū))算出消息的分區(qū)。

2017年3月3日 01:58