Kafka集群
Kafka集群:是由一个、或多个 Kafka Broker 服务器组成的系统。
如下图所示:
Kafka 集群并非单点服务,而是由多台服务器(Broker)组成,这带来了更高的可用性和扩展性。
这些 Broker 协同工作,共同承担消息的存储、和传输任务。
总之,可以将 Kafka 集群视为一个分布式的消息队列系统,它具有高吞吐量、可扩展性…等特点。
Kafka集群架构
Kafka集群架构,主要包括以下几个核心组成部分:
1. 生产者(Producer)
将消息发送到 Kafka 中的指定 Topic 和 Partition,支持同步/异步发送。
并且,支持消息压缩、批量发送、幂等性…等优化机制。
2. 消费者(Consumer)
从 Kafka 中读取数据,支持消费者组(Consumer Group)机制。
一个 Partition 同一时间只能被消费者组内一个消费者消费,保障消费的可伸缩性与负载均衡。
3. Broker
Broker(代理):集群的核心。
在 Kafka 集群中,Broker 是指运行 Kafka 服务的一个独立的服务器实例。
一个 Kafka 集群由一个或多个 Broker 组成。可以将 Broker 视为 Kafka 集群的基本构建块和核心运行单元。
它们承担着存储数据、处理客户端请求以及维护集群内部状态的关键职责,因此被称为集群的“核心”。
4.Partition(分区)
每个 Broker :可以托管多个 Topic 的多个 Partition。
每个 Topic 可以被划分为一个、或多个 Partition,每个 Partition 是一个有序且不可变的消息序列。
不同的 Partition 可以分布在不同的 Broker 上,实现负载均衡。
对于每个 Partition,会有一个 Broker 被选举为 Leader,负责处理该 Partition 的所有读写请求。
其他的 Broker 则作为 Follower,负责从 Leader 同步数据,以实现数据的冗余和高可用性。
Kafka集群配置
假设我们部署一个包含 3 个 Kafka Broker 和 3 个 Zookeeper 节点 的集群:
3 个节点分别为: broker-0 / broker-1 / broker-2。
以 broker-0 为例:
- broker.id=0 # 每个 broker 唯一 ID(0/1/2)
- listeners=PLAINTEXT://:9092
- log.dirs=/tmp/kafka-logs
- zookeeper.connect=zk1:2181,zk2:2181,zk3:2181
- num.network.threads=3
- num.io.threads=8
- num.partitions=3 # 默认分区数
- default.replication.factor=2 # 默认副本数
- log.retention.hours=168
- log.segment.bytes=1073741824 # 1 GB
- log.retention.check.interval.ms=300000
其他两个 Broker 修改 broker.id
和 log.dirs
即可。