Kafka基础架构

kafkat同一个topic中不同clientId和不同的group可以消费同一个消息吗 kafka多个topic_kafka


注意:

1)一个Topic可以分布式存储在多个broker

2)一个Topic的多个分区分布式存储在多个broker

3)每个分区都有一台 server 作为 “leader”,零台或者多台server作为 follwers;每个分区的Leader和follower一般会错在在不同的broker

核心概念

1.4.0 Broker

一台kafka服务器就是一个broker。一个集群由多个broker组成。

1.4.1 Topic

Topic 就是数据主题,kafka建议根据业务系统将不同的数据存放在不同的topic中。Kafka中的Topics总是多订阅者模式,一个topic可以拥有一个或者多个消费者来订阅它的数据。一个大的Topic可以分布式存储在多个kafka broker中。

1.4.2 Partition

每个topic可以有多个分区,通过分区的设计,topic可以不断进行扩展!即一个Topic的多个分区分布式存储在多个broker。

此外通过分区还可以让一个topic被多个consumer进行消费!以达到并行处理!kafka只保证按一个partition中的顺序将消息发给consumer,不保证一个topic的整体(多个partition间)的顺序。

1.4.3 Offset

据会按照时间顺序被不断第追加到分区的一个结构化的commit log中!每个分区中存储的记录都是有序的,且顺序不可变!

这个顺序是通过一个称之为offset的id来唯一标识!因此也可以认为offset是有序且不可变的!

kafkat同一个topic中不同clientId和不同的group可以消费同一个消息吗 kafka多个topic_数据_02


kafkat同一个topic中不同clientId和不同的group可以消费同一个消息吗 kafka多个topic_分布式存储_03

1.4.4 持久化
Kafka 集群保留所有发布的记录—无论他们是否已被消费—并通过一个可配置的参数——保留期限来控制。Kafka的性能和数据大小无关,所以长时间存储数据没有什么问题。
1.4.5 副本机制
日志的分区partition (分布)在Kafka集群的服务器上。
每个分区都有一台 server 作为 “leader”,零台或者多台server作为 follwers 。leader server 处理一切对 partition (分区)的读写请求,而follwers只需被动的同步leader上的数据。当leader宕机了,followers 中的一台服务器会自动成为新的 leader。通过这种机制,既可以保证数据有多个副本,也实现了一个高可用的机制!基于安全考虑,每个分区的Leader和follower一般会错在在不同的broker!
1.4.6 Producer
消息生产者,就是向kafka broker发消息的客户端。生产者负责将记录分配到topic的指定 partition(分区)中
1.4.7 Consumer
消息消费者,向kafka broker取消息的客户端。每个消费者都要维护自己读取数据的offset。低版本0.9之前将offset保存在Zookeeper中,0.9及之后保存在Kafka的“__consumer_offsets”主题中。
1.4.8 Consumer Group
每个消费者都会使用一个消费组名称来进行标识。同一个组中的不同的消费者实例,可以分布在多个进程或多个机器上!
一个topic可以有多个consumer group。topic的消息会复制(不是真的复制,是概念上的)到所有的CG,但每个partion只会把消息发给该CG中的一个consumer。