- 一、Kafka体系结构
- 基本概念
kafka被定位为一个分布式流式处理平台,以高吞吐、可持久化、可水平扩展、支持流数据处理等多种特性而被广泛使用。
其所扮演的三大角色:
-
消息系统
与传统的消息中间件都具备系统解耦、冗余存储、流量削峰、异步通信、扩展性、可恢复性等功能。与此同时,kafka还提供了大多数消息系统难以实现的消息顺序性保障和回溯消费的功能。 -
存储系统
kafka把消息持久化到磁盘,相比于其他内存存储的系统而言,有效地降低了数据丢失的风险。 -
流式处理平台
不仅为每个流式处理框架提供了可靠的数据来源,还提供了一个完整的流式处理类库,如窗口、连接、聚合等各类操作。
1. Producer生产者:将消息发送到Broker
2. Broker服务代理节点:将收到的消息存储到磁盘。broker可以简单地看做一个独立的kafka服务节点或kafka服务实例,一个或多个broker组成了kafka集群。
3. Consumer:消费者:从Broker订阅并消费消息
4. Zookeeper集群:负责集群元数据的管理、控制器的选举
kafka中还有两个重要的概念:主题(Topic)和分区(Partition)
- 主题
消息以主题为单位进行分类,生产者负责将消息发送到特定的主题,而消费者负责订阅主题并消费 - 分区(主题分区)
主题可以细分为多个分区,同一主题下不同分区所包含的消息是不同的。在存储层,可以将分区看作一个可追加的日志文件,消息被追加到分区日志文件时会分配一个偏移量offset。kafka通过offset来保证消息在分区内的顺序性,但是offset并不跨越分区。也就是说,kafka保证的是分区有序而不是主题有序。- 分区多副本机制:提升容灾能力。leader负责处理读写请求,follower负责与leader的消息同步。副本处于不同的broker中,当leader出现故障时,从follower中重新选举新的leader对外提供服务。kafka通过多副本机制实现了故障的自动转移,当集群中某个broker失效时仍然能保证服务可用。
分区与Broker的关系:不同的分区可以分布在不同的broker上,也就是说,一个主题可以跨越多个broker,以此来提供比单个broker更强大的性能。
如图,kafka集群有4个broker,某个主题有3个分区,且副本数也是3(有一个leader和两个follower)



