Kafka

Kafka 知识点

(1)Kafka 概念

Kafka 是一种高吞吐量、分布式、基于发布/订阅的消息系统,最初由 LinkedIn 公司开发,使用 Scala语言编写,目前是Apache的开源项目。
1. broker:Kafka服务器,负责消息存储和转发。
2. topic:消息类别,Kafka按照topic来分类消息。
3. partition:topic 的分区,一个 topic 可以包含多个 partition,topic 消息保存在各个 partition上。
4. offset:消息在日志中的位置,可以理解是消息在 partition 上的偏移量,也是代表该消息的 唯一序号。
5. Producer:消息生产者。
6. Consumer:消息消费者。
7. Consumer Group:消费者分组,每个Consumer必须属于一个group。
8. Zookeeper:保存着集群broker、topic、partition等meta数据;另外,还负责broker 故 障发现,partition leader选举,负载均衡等功能。

如图所示:
概念图

(2)Kafka 数据存储设计

1. partition的数据文件(offset,MessageSize,data)
partition中的每条Message包含了以下三个属性:offset,MessageSize,data,其中offset表 示 Message 在这个 partition 中的偏移量,offset 不是该 Message 在 partition 数据文件中的实际存储位置,而是逻辑上一个值,它唯一确定了partition中的一条Message,可以认为offset是 partition 中 Message 的 id;MessageSize 表示消息内容 data 的大小;data 为 Message 的具 体内容。

2. 数据文件分段segment(顺序读写、分段命令、二分查找)
partition物理上由多个segment文件组成,每个segment大小相等,顺序读写。每个segment 数据文件以该段中最小的offset命名,文件扩展名为.log。这样在查找指定offset的Message的 时候,用二分查找就可以定位到该Message在哪个segment数据文件中。

3. 数据文件索引(分段索引、稀疏存储)
Kafka 为每个分段后的数据文件建立了索引文件,文件名与数据文件的名字是一样的,只是文件扩 展名为.index。index 文件中并没有为数据文件中的每条 Message 建立索引,而是采用了稀疏存 储的方式,每隔一定字节的数据建立一条索引。这样避免了索引文件占用过多的空间,从而可以 将索引文件保留在内存中。
数据文件索引

(3)生产者设计

1. 负载均衡(partition会均衡分布到不同broker上)
由于消息 topic 由多个 partition 组成,且 partition 会均衡分布到不同 broker 上,因此,为了有效利用broker集群的性能,提高消息的吞吐量,producer可以通过随机或者hash等方式,将消 息平均发送到多个partition上,以实现负载均衡。
负载均衡
2. 批量发送
是提高消息吞吐量重要的方式,Producer 端可以在内存中合并多条消息后,以一次请求的方式发 送了批量的消息给 broker,从而大大减少 broker 存储消息的 IO操作次数。但也一定程度上影响 了消息的实时性,相当于以时延代价,换取更好的吞吐量。

3. 压缩(GZIP或Snappy)
Producer端可以通过GZIP或Snappy格式对消息集合进行压缩。Producer端进行压缩之后,在 Consumer 端需进行解压。压缩的好处就是减少传输的数据量,减轻对网络传输的压力,在对大 数据处理上,瓶颈往往体现在网络上而不是CPU(压缩和解压会耗掉部分CPU资源)。

(4)消费者设计

消费者设计
Consumer Group
同一 Consumer Group 中的多个 Consumer 实例,不同时消费同一个 partition,等效于队列模 式。partition内消息是有序的,Consumer通过pull方式消费消息。Kafka不删除已消费的消息对于partition,顺序读写磁盘数据,以时间复杂度O(1)方式提供消息持久化能力。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值