1.概述
在 Kafka 集群中,我們可以對每個 Topic 進(jìn)行一個或是多個分區(qū),并為該 Topic 指定備份數(shù)。這部分元數(shù)據(jù)信息都是存放在 Zookeeper 上,我們可以使用 zkCli 客戶端,通過 ls 和 get 命令來查看元數(shù)據(jù)信息。通過 log.dirs 屬性控制消息存放路徑,每個分區(qū)對應(yīng)一個文件夾,文件夾命名方式為:TopicName-PartitionIndex,該文件夾下存放這該分區(qū)的所有消息和索引文件,如下圖所示:
2.內(nèi)容
Kafka 集群在生產(chǎn)消息入庫的時候,通過 Key 來進(jìn)行分區(qū)存儲,按照相應(yīng)的算法,生產(chǎn)分區(qū)規(guī)則,讓所生產(chǎn)的消息按照該規(guī)則分布到不同的分區(qū)中,以達(dá)到水平擴(kuò)展和負(fù)載均衡。而我們在消費這些消息的時候,可以使用多線程來消費該 Topic 下的所有分區(qū)中的消息。
分區(qū)規(guī)則的制定,通過實現(xiàn) kafka.producer.Partitioner 接口,該接口我們可以進(jìn)行重寫,按照自己的方式去實現(xiàn)分區(qū)規(guī)則。如下,我們按照 Key 的 Hash 值,然后取模得到分區(qū)索引,代碼如下所示:
package cn.hadoop.hdfs.kafka.partition;import kafka.producer.Partitioner;import kafka.utils.VerifiableProperties;/** * @Date Nov 3, 2016 * * @Author dengjie &nbs