Kafka——两种集群搭建详解 k8s

1、简介
Kafka是一个能够支持高并发以及流式消息处理的消息中间件,并且Kafka天生就是支持集群的,今天就主要来介绍一下如何搭建Kafka集群。

Kafka目前支持使用Zookeeper模式搭建集群以及KRaft模式(即无Zookeeper)模式这两种模式搭建集群,这两种模式各有各的好处,今天就来分别介绍一下这两种方式

1.1、Kafka集群中的节点类型
一个Kafka集群是由下列几种类型的节点构成的,它们充当着不同的作用:

Broker节点:即代理节点,是Kafka中的工作节点,充当消息队列的角色,负责储存和处理消息,每个Broker都是一个独立的Kafka服务器,可以在不同的机器上运行,除此之外Broker还负责分区(partition)的管理,将主题(topic)划分为多个分区,并分布在集群的不同Broker上
Controller节点:即控制器节点,是集群中的特殊节点,负责储存和管理整个集群元数据和状态,它能够监控整个集群中的Broker,在需要时还能够进行平衡操作
混合节点:即同时担任Broker和Controller节点角色的节点

1.2、两重模式的搭建方式
Zookeeper模式集群
KRaft模式集群
2、Zookeeper模式集群
这是一种比较简单,相对“传统”的搭建方式了!在这种模式下,每个Kafka节点都是依赖于Zookeeper的,使用Zookeeper存储集群中所有节点的元数据。

只要所有的Kafka节点连接到同一个Zookeeper上面(或者同一个Zookeeper集群),这些Kafka节点就构成了一个集群。所以说就算是只有一个Kafka节点在运行,这一个节点也可以称作一个集群。

在Zookeeper模式集群中,Zookeeper节点(或者集群)就充当了Controller的角色,而所有的Kafka节点就充当着Broker的角色。

下面就来介绍一下搭建过程,这里在1台主机上分别运行Zookeeper和Kafka来模拟一个集群,一共一个Zookeeper节点和三个Kafka节点构成,如下:

节点名 地址和端口
Zookeeper节点 localhost:2181
Kafka节点1 localhost:9092
Kafka节点1 localhost:9093
Kafka节点1 localhost:9094

1、搭建Zookeeper

首先我们要运行起一个Zookeeper节点,这里

首先我们要运行起一个Zookeeper节点,这里就不再赘述Zookeeper节点如何搭建了,搭建可以查看官方文档,或者使用Docker的方式搭建。

搭建完成并运行Zookeeper之后,我们会把所有的Kafka节点都配置到这一个Zookeeper节点上。

2、配置并运行所有Kafka节点

server1.properties

# 每个节点的id,不要不相同的整数
broker.id=1
# 存储位置
log.dirs=/tmp/kafka-logs/cluster/log1
# zookeeper集群的话,多个地址用逗号分割
zookeeper.connect=localhost:2181
# zookeeper连接超时时间
zookeeper.connection.timeout.ms=18000
# 外网暴露
advertised.listeners=PLAINTEXT://localhost:9092
# 内网端口
listeners=PLAINTEXT://localhost:9092

server2.properties

# 每个节点的id,不要不相同的整数
broker.id=2
# 存储位置
log.dirs=/tmp/kafka-logs/cluster/log2
# zookeeper集群的话,多个地址用逗号分割
zookeeper.connect=localhost:2181
# zookeeper连接超时时间
zookeeper.connection.timeout.ms=18000
# 外网暴露
advertised.listeners=PLAINTEXT://localhost:9093
# 内网端口
listeners=PLAINTEXT://localhost:9093

server3.properties

# 每个节点的id,不要不相同的整数
broker.id=3
# 存储位置
log.dirs=/tmp/kafka-logs/cluster/log3
# zookeeper集群的话,多个地址用逗号分割
zookeeper.connect=localhost:2181
# zookeeper连接超时时间
zookeeper.connection.timeout.ms=18000
# 外网暴露
advertised.listeners=PLAINTEXT://localhost:9094
# 内网端口
listeners=PLAINTEXT://localhost:9094

三台虚拟机配置完成后,分别使用终端进入到Kafka目录下并启动,执行下列命令:

./kafka-server-start.sh -daemon ../config/cluster/server1.properties
./kafka-server-start.sh -daemon ../config/cluster/server2.properties
./kafka-server-start.sh -daemon ../config/cluster/server3.properties

3、测试

先在kafka1的端口上面再开一个终端并进入Kafka目录,执行下列命令创建cluster-topic,共3个分区,每个人去都分配3个副本:

./kafka-topics.sh --bootstrap-server localhost:9092 --create --topic cluster-topic --partitions 3 --replication-factor 3

然后在kafka2的端口查询该topic:

./kafka-topics.sh --bootstrap-server localhost:9093 --describe --topic cluster-topic 


显而易见,该topic下有3个分区,每个分区有三个副本。每个分区的leader分别是1,2,3,表明kafka将该topic的3分区均匀地在3台broker上进行了分配。

删除分区:

./kafka-topics.sh --bootstrap-server localhost:9093 --delete --topic cluster-topic 

3、KRaft模式集群

在上述传统方案中,Kafka需要依赖Zookeeper完成元数据存放和共享,这样也就暴露出了一些问题:

  • 搭建Kafka集群时还需要额外搭建Zookeeper,增加了运维成本
  • Zookeeper是强一致性的组件(符合CP理论),如果集群中数据发生变化,那么必须要等到其它节点都同步,至少超过一半同步完成,这样节点数多性能差

KRaft模式是新版本Kafka中推出的集群模式,这种模式下就完全不需要

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值