kafka架构


Kafka基本概念
Broker
- Kaka集群中的一台或多台服务器称为Broker。Broker存储Topic的数据。
- 如果某topic有N个partition,集群有N个broker,那么每个broker存储该topic的一个partition。
- 如果某topic有N个partition,集群有(N+M)个broker,那么其中有N个broker存储该topic的一个partition,剩下的M个broker不存储该topic的partition数据。
- 如果某topic有N个partition,集群中broker数目少于N个,那么一个broker存储该topic的一个或多个partition。在实际生产环境中,尽量避免这种情况的发生,这种情况容易导致Kafka集群数据不均衡。
Topic
- 发布到Kafka的每条消息都有一个类别,是个逻辑概念。
- 物理上不同Topic的消息分开存储,逻辑上一个Topic的消息虽然保存于一个或多个broker上,但用户只需指定消息的Topic即可生产或消费数据而不必关心数据存于何处
Partition
- 物理上的Topic分区,一个Topic可以分为多个Partition,至少有一个Partition。
- 每个Partition中的数据使用多个segment文件存储,每个Partition都是一个有序的队列,不同Partition间的数据是无序的。
- Partition中的每条消息都会被分配一个有序的ID(即offset)。
Producer
- 消息和数据的生产者。Producer将消息发布到Kafka的topic中。
- Broker接收到Producer发布的消息后,Broker将该消息追加到当前用于追加数据的segment文件中。
- Producer发送的消息,存储到一个Partition中,Producer也可以指定数据存储的Partition。
Consumer
- 消息和数据的消费者。Consumer从Broker中读取数据。
- Consumer可以消费多个topic中的数据。
Consumer Group
- 每个消费者都属于一个特定的消费者组。
- 可为每个Consumer指定group name,若不指定group name则属于默认的group。
- 一个Topic可以有多个消费者组,Topic的消息会被复制到所有的消费者组中,但每个消费者组只会把消息发送给该组中的一个消费者。
- 消费者组是Kafka用来实现一个Topic消息的广播和单播的手段。
Leader
- 每个Partition有多个副本,其中有且仅有一个作为leader。
- Leader是当前负责数据的读写的Partition。
Follower
- Follower跟随Leader,所有写请求都通过Leader路由,数据变更会广播给所有Follower,Follower与Leader保持数据同步。
- 如果Leader失效,则从Follower中选举出一个新的Leader。
- 如果Follower与Leader挂掉、卡住或同步太慢,Leader会把这个Follower从"in sync replicas"## 高吞吐量的分布式消息组件Kafka是如何工作的

浙公网安备 33010602011771号