1.概述

在 Kafka 集群中,我們可以對每個 Topic 進行一個或是多個分區(qū),并為該 Topic 指定備份數(shù)。這部分元數(shù)據信息都是存放在 Zookeeper 上,我們可以使用 zkCli 客戶端,通過 ls 和 get 命令來查看元數(shù)據信息。通過 log.dirs 屬性控制消息存放路徑,每個分區(qū)對應一個文件夾,文件夾命名方式為:TopicName-PartitionIndex,該文件夾下存放這該分區(qū)的所有消息和索引文件,如下圖所示:

2.內容

Kafka 集群在生產消息入庫的時候,通過 Key 來進行分區(qū)存儲,按照相應的算法,生產分區(qū)規(guī)則,讓所生產的消息按照該規(guī)則分布到不同的分區(qū)中,以達到水平擴展和負載均衡。而我們在消費這些消息的時候,可以使用多線程來消費該 Topic 下的所有分區(qū)中的消息。

分區(qū)規(guī)則的制定,通過實現(xiàn) kafka.producer.Partitioner 接口,該接口我們可以進行重寫,按照自己的方式去實現(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
 *
 * @Note 先 Hash 再取模,得到分區(qū)索引 */ public class CustomerPartitioner implements Partitioner { public CustomerPartitioner(VerifiableProperties props) {
    } 
        
		

網友評論