kafka(1)

1、概念

broker:分布式中的每台服务器即broker。

topic:每个消息类别放在一个topic。

partition:每个topic包含一个或多个partition。

producer:生产者

consumer:消费者

consumer group 

 

2、存储格式

每个topic逻辑上就是一个queue。

为了kafka的吞吐率可以线性提高,物理上把一个topic分成多个partition。

每个partition物理上对应一个文件夹,这个文件夹存储这个partition的所有消息的索引文件。

每个日志文件都是一个log entrie序列,每个log entrie包含一个4字节整型数值(值为N+5),1个字节的"magic value",4个字节的CRC校验码,其后跟N个字节的消息体。条消息都有一个当前Partition下唯一的64字节的offset,它指明了这条消息的起始位置。

message length : 4 bytes (value: 1+4+n)
"magic" value : 1 byte 
crc校验码 : 4 bytes 
payload (消息体): n bytes

这个log entrie并非一个文件,而是由多个segment,每个segment以该segment第一条消息的offset命名并以“.kafka”为后缀,另外会有一个索引文件,它标明了每个segment下包含的log entry的offset范围。

因为每条消息都被append到该Partition中,属于顺序写磁盘,因此效率非常高(经验证,顺序写磁盘效率比随机写内存还要高,这是Kafka高吞吐率的一个很重要的保证)。

对于传统的message queue而言,一般会删除已经被消费的消息,而Kafka集群会保留所有的消息,无论其被消费与否。当然,因为磁盘限制,不可能永久保留所有数据(实际上也没必要),因此Kafka提供两种策略删除旧数据。一是基于时间,二是基于Partition文件大小。例如可以通过配置$KAFKA_HOME/config/server.properties,让Kafka删除一周前的数据,也可在Partition文件超过1GB时删除旧数据,配置如下所示。

 

posted @ 2017-10-31 18:01  海东青Lo  阅读(135)  评论(0编辑  收藏  举报