建議從頭閱讀:
銀行系統(tǒng)中的消息分發(fā)利器Kafka(一)
銀行系統(tǒng)中的消息分發(fā)利器Kafka(二)
6肝陪、Partition
上次我們說到展融,Kafka可以存儲數(shù)據(jù)正驻,而且數(shù)據(jù)按照Topic進行分類咒精。
這些存儲的數(shù)據(jù)可能會很大密末,這可能會給Kafka的Broker帶來很大的存儲壓力握爷。
一個好的解決辦法就是把這些數(shù)據(jù)拆成一個或多個Partition:
然后,把這多個Partition分發(fā)到不同的服務(wù)器上严里。
Kafka是一個分布式系統(tǒng)新啼,所以對數(shù)據(jù)文件的Partition進行分布式管理是很方便的。
隨之刹碾,另外一個問題來了燥撞,我們要把數(shù)據(jù)分成多少個Partition呢?
這個問題不是Kafka來解答的,而是Kafka的管理員物舒,他們會確定一項數(shù)據(jù)分成多少個Partition色洞,然后Kafka再按照他們的指令來處理分區(qū)。
每一個Partition就存在一個服務(wù)器上冠胯,也不能再將他們進一步拆分火诸。所以管理員可以根據(jù)服務(wù)器情況計算出Partition的數(shù)量。
7荠察、Offset
我們知道Kafka上會接受大量的消息(Message)置蜀,然后這樣一個一個消息在Kafka中會形成一個順序的隊列。
而Offset是就是“消息”在隊列中的位置悉盆。
在每一個Partition 中盯荤,第一個消息的Offset就是0,第二個就是1焕盟,以此類推秋秤。另外,Offset并不是一個全局的ID京髓,它只作用于所屬的Partition航缀。所以,在同一個Partition中堰怨,不會有相同的Offset。
結(jié)合上面的知識蛇摸,我們可以知道备图,如果要在Kafka中定位一個消息信息,就是先找到Topic赶袄,然后找到Partition揽涮,最后找到Offset。
8饿肺、Consumer Group
先把前面的場景復(fù)習(xí)一下蒋困。
首先我們有很多節(jié)點的數(shù)據(jù)要收集,于是我們通過Kafka來實現(xiàn):
然后我們?yōu)槊恳粋€節(jié)點創(chuàng)建一個Producer:
現(xiàn)在我們?yōu)镵afka創(chuàng)建Consumer敬辣,Consumer將從Kafka上獲取數(shù)據(jù)雪标,并將數(shù)據(jù)存入DataCenter:
這時,你有成百上千的Producer同時將數(shù)據(jù)放入同一個Topic溉跃,Kafka怎么能hold住呢村刨?我們前面說過Kafka是一個分布式系統(tǒng),于是我們利用很多的Kafka Broker來分散處理壓力撰茎,并且將數(shù)據(jù)分Partition:
這時你會發(fā)現(xiàn)嵌牺,處理壓力跑到Conumser那里了,于是我們就需要一個Consumer Group了。
Consumer Group中的Consumer要與Partition一一對應(yīng)逆粹。因此募疮,一個Topic有多少Partition,一個Consumer Group就有多少Consumer僻弹。Kafka不允許兩個或兩個以上的Consumer同時讀取一個Partition的數(shù)據(jù)阿浓,以避免double reading的問題。
Kafka的幾個重要的概念就介紹完了奢方。后面我會逐步深入的介紹Kafka的一些細節(jié)搔扁,歡迎關(guān)注~