kafka高可用集群搭建

本文涉及的产品
MSE Nacos 企业版免费试用,1600元额度,限量50份
服务治理 MSE Sentinel/OpenSergo,Agent数量 不受限
注册配置 MSE Nacos/ZooKeeper,118元/月
简介: kafka高可用集群搭建

kafka高可用集群搭建

说明

这篇博文主要是为了后面的 elk 做准备,我们这里搭建一个 kafka 集群,使用2个节点,还是前面的节点。主要是为了后面做数据缓冲。

这里不对 mq 的详细进行介绍,必要会对 kafka 相关配置进行描述。

  • 节点说明
节点 hostname
192.168.179.123 node-5
192.168.179.124 node-4
192.168.179.125 node-3

当我们进行集群搭建的时候,要注意节点数量应该为基数,要求 可用节点数量 > 总节点数量/2,我们采用最少节点数:3台

安装配置kafka

https://mirror.bit.edu.cn/apache/kafka/2.5.0/kafka_2.12-2.5.0.tgz
tar -zxvf kafka_2.12-2.5.0.tgz

vi config/server.properties

# node-5
broker.id=1
listeners=PLAINTEXT://192.168.179.123:9092
offsets.topic.replication.factor=3
transaction.state.log.replication.factor=3
transaction.state.log.min.isr=3
zookeeper.connect=192.168.179.124:2181,192.168.179.123:2181,192.168.179.125:2181
# node-4
broker.id=0
listeners=PLAINTEXT://192.168.179.124:9092
offsets.topic.replication.factor=3
transaction.state.log.replication.factor=3
transaction.state.log.min.isr=3
zookeeper.connect=192.168.179.124:2181,192.168.179.123:2181,192.168.179.125:2181
# node-3 也一样 就broker.id = 2

  • kafka 配置说明
key value
delete.topic.enable=true 是否允许删除topic,默认false不能手动删除
broker.id=0 当前机器在集群中的唯一标识,和zookeeper的myid性质一样
listeners = PLAINTEXT://192.168.100.151:9092 当前kafka服务侦听的地址和端口,端口默认是9092
num.network.threads=3 这个是borker进行网络处理的线程数
num.io.threads=8 这个是borker进行I/O处理的线程数
socket.send.buffer.bytes=102400 发送缓冲区buffer大小,数据不是一下子就发送的,先会存储到缓冲区到达一定的大小后在发送,能提高性能
socket.receive.buffer.bytes=102400 kafka接收缓冲区大小,当数据到达一定大小后在序列化到磁盘
socket.request.max.bytes=104857600 这个参数是向kafka请求消息或者向kafka发送消息的请请求的最大数,这个值不能超过java的堆栈大小
log.dirs= 消息日志存放的路径
num.partitions=1 默认的分区数,一个topic默认1个分区数
num.recovery.threads.per.data.dir=1 每个数据目录用来日志恢复的线程数目
log.retention.hours=168 默认消息的最大持久化时间,168小时,7天
log.segment.bytes=1073741824 这个参数是:因为kafka的消息是以追加的形式落地到文件,当超过这个值的时候,kafka会新起一个文件
log.retention.check.interval.ms=300000 每隔300000毫秒去检查上面配置的log失效时间
log.cleaner.enable=false 是否启用log压缩,一般不用启用,启用的话可以提高性能
zookeeper.connect=node1:2181,node2:2181,node3:2181 设置zookeeper的连接端口
broker.id=0 当前机器在集群中的唯一标识,和zookeeper的myid性质一样
zookeeper.connection.timeout.ms=6000 设置zookeeper的连接超时时间

vi config/zookeeper.properties

为了保证 kafka 的高可用,我们需要配置 zookeeper

三台主机配置保持一致即可

dataDir=/tmp/zookeeper
# 客户端连接server的端口,即对外服务端口,默认为2181
clientPort=2181
# 单个客户端与单台服务器之间的连接数的限制,是ip级别的,默认是60,如果设置为0,那么表明不作任何限制。请注意这个限制的使用范围,仅仅是单台客户端机器与单台ZK服务器之间的连接数限制,不是针对指定客户端IP,也不是ZK集群的连接数限制,也不是单台ZK对所有客户端的连接数限制
maxClientCnxns=0
admin.enableServer=false
# server列表 2888为选举端口,3888为心跳端口
server.0=192.168.179.124:2888:3888 # 0表示服务器的编号 对应 dataDir 下面的 myid 文件
server.1=192.168.179.123:2888:3888
server.2=192.168.179.125:2888:3888
# ZK中的一个时间单元。ZK中所有时间都是以这个时间单元为基础,进行整数倍配置的。例如,session的最小超时时间是2*tickTime
tickTime=2000
# Follower在启动过程中,会从Leader同步所有最新数据,然后确定自己能够对外服务的起始状态。Leader允许F在 initLimit时间内完成这个工作。通常情况下,我们不用太在意这个参数的设置。如果ZK集群的数据量确实很大了,F在启动的时候,从Leader上同步数据的时间也会相应变长,因此在这种情况下,有必要适当调大这个参数
initLimit=10
# 在运行过程中,Leader负责与ZK集群中所有机器进行通信,例如通过一些心跳检测机制,来检测机器的存活状态。如果L发出心跳包在syncLimit之后,还没有从F那里收到响应,那么就认为这个F已经不在线了。注意:不要把这个参数设置得过大,否则可能会掩盖一些问题
syncLimit=5

在上一步 dataDir 指定的目录下,创建 myid 文件。 直接将 kafkabroker.id 写入对应即可

节点 hostname myid
192.168.179.123 node-5 echo 2 > /tmp/zookeeper/myid
192.168.179.124 node-4 echo 0 > /tmp/zookeeper/myid
192.168.179.125 node-3 echo 1 > /tmp/zookeeper/myid

启动集群

所有节点都需要执行

./bin/zookeeper-server-start.sh -daemon ./config/zookeeper.properties
./bin/kafka-server-start.sh -daemon ./config/server.properties

进程正常启动表示成功,查看一下


生产消息+消费消息测试

./bin/kafka-console-producer.sh --bootstrap-server 192.168.179.124:9092 --topic test-messages
./bin/kafka-console-consumer.sh --bootstrap-server 192.168.179.124:9092 --topic test-messages --from-beginning



现在 kafka 可用确认生产消费是正常的了

容错测试集群可用性

虽然说两个节点的 kafka 正常启动了,我们还需要对他的可用性进行测试,保证到时候我们服务的一个高可用。

测试:我们创建一个 topic ,我们通过查看这个 topic 里面的 leader,如果说 leaderkafka 服务出现问题了,会不会切换到另一个节点,做这个测试的前提是配置好副本数,没有冗余的话是没有可用性的话可能有点绝对,这里我想表明的实际是冗余是解决可用性的方案

创建 topic

./bin/kafka-topics.sh --create --bootstrap-server 192.168.179.123:9092,192.168.179.124:9092,192.168.179.125:9092 --replication-factor 3 --partitions 1 --topic test-ha-kafka
# --replication-facotor 1 两个副本
# --partitions 1 创建1个分区
# --topic 主题为test

查看 topic 的 leader

./bin/kafka-topics.sh --describe --bootstrap-server 192.168.179.123:9092,192.168.179.124:9092,192.168.179.125:9092 --topic test-ha-kafka


我们手动制造错误,看集群的容错性,我们将 broker.id = 0kafka 手动停止,看看 topicleader 会不会自动切换


现在已经完成了我们的高可用测试,但是我们对 kafka 的管理老是通过命令行处理非常麻烦,然后给大家介绍一下 kafka 的可视化工具: kafkatool、或者可以使用 kafka-manager

可视化kafkatool使用

下载地址:https://www.kafkatool.com/,根据自己的系统下载


这样就方便多了,还可以看到我们前面测试的 topic ,搭建好这个集群先留着,要用来优化我们的 日志系统 哦。

我的博客即将同步至腾讯云+社区,邀请大家一同入驻:腾讯云自媒体分享计划 - 腾讯云开发者社区-腾讯云

目录
相关文章
|
3月前
|
消息中间件 运维 Java
搭建Zookeeper、Kafka集群
本文详细介绍了Zookeeper和Kafka集群的搭建过程,涵盖系统环境配置、IP设置、主机名设定、防火墙与Selinux关闭、JDK安装等基础步骤。随后深入讲解了Zookeeper集群的安装与配置,包括数据目录创建、节点信息设置、SASL认证配置及服务启动管理。接着描述了Kafka集群的安装,涉及配置文件修改、安全认证设置、生产消费认证以及服务启停操作。最后通过创建Topic、发送与查看消息等测试验证集群功能。全网可搜《小陈运维》获取更多信息。
258 1
|
4月前
|
消息中间件 人工智能 安全
秒级灾备恢复:Kafka 2025 AI自愈集群下载及跨云Topic迁移终极教程
Apache Kafka 2025作为企业级实时数据中枢,实现五大革新:量子安全传输(CRYSTALS-Kyber抗量子加密算法)、联邦学习总线(支持TensorFlow Federated/Horizontal FL框架)、AI自愈集群(MTTR缩短至30秒内)、多模态数据处理(原生支持视频流、3D点云等)和跨云弹性扩展(AWS/GCP/Azure间自动迁移)。平台采用混合云基础设施矩阵与软件依赖拓扑设计,提供智能部署架构。安装流程涵盖抗量子安装包获取、量子密钥配置及联邦学习总线设置。
|
7月前
|
消息中间件 Java Kafka
【手把手教你Linux环境下快速搭建Kafka集群】内含脚本分发教程,实现一键部署多个Kafka节点
本文介绍了Kafka集群的搭建过程,涵盖从虚拟机安装到集群测试的详细步骤。首先规划了集群架构,包括三台Kafka Broker节点,并说明了分布式环境下的服务进程配置。接着,通过VMware导入模板机并克隆出三台虚拟机(kafka-broker1、kafka-broker2、kafka-broker3),分别设置IP地址和主机名。随后,依次安装JDK、ZooKeeper和Kafka,并配置相应的环境变量与启动脚本,确保各组件能正常运行。最后,通过编写启停脚本简化集群的操作流程,并对集群进行测试,验证其功能完整性。整个过程强调了自动化脚本的应用,提高了部署效率。
1635 1
【手把手教你Linux环境下快速搭建Kafka集群】内含脚本分发教程,实现一键部署多个Kafka节点
|
7月前
|
消息中间件 存储 Kafka
2024最全Kafka集群方案汇总
Apache Kafka 是一个高吞吐量、可扩展、可靠的分布式消息系统,广泛应用于数据驱动的应用场景。Kafka 支持集群架构,具备高可用性和容错性。其核心组件包括 Broker(服务器实例)、Topic(消息分类)、Partition(有序消息序列)、Producer(消息发布者)和 Consumer(消息消费者)。每个分区有 Leader 和 Follower,确保数据冗余和高可用。Kafka 2.8+ 引入了不依赖 Zookeeper 的 KRaft 协议,进一步简化了集群管理。常见的集群部署方案包括单节点和多节点集群,后者适用于生产环境以确保高可用性。
303 0
|
8月前
|
消息中间件 存储 Prometheus
Kafka集群如何配置高可用性
Kafka集群如何配置高可用性
152 1
|
8月前
|
消息中间件 存储 监控
构建高可用性Apache Kafka集群:从理论到实践
【10月更文挑战第24天】随着大数据时代的到来,数据传输与处理的需求日益增长。Apache Kafka作为一个高性能的消息队列服务,因其出色的吞吐量、可扩展性和容错能力而受到广泛欢迎。然而,在构建大规模生产环境下的Kafka集群时,保证其高可用性是至关重要的。本文将从个人实践经验出发,详细介绍如何构建一个高可用性的Kafka集群,包括集群规划、节点配置以及故障恢复机制等方面。
238 4
|
9月前
|
消息中间件 监控 数据可视化
大数据-79 Kafka 集群模式 集群监控方案 JavaAPI获取集群指标 可视化监控集群方案: jconsole、Kafka Eagle
大数据-79 Kafka 集群模式 集群监控方案 JavaAPI获取集群指标 可视化监控集群方案: jconsole、Kafka Eagle
352 2
|
9月前
|
消息中间件 分布式计算 监控
大数据-78 Kafka 集群模式 集群的应用场景与Kafka集群的搭建 三台云服务器
大数据-78 Kafka 集群模式 集群的应用场景与Kafka集群的搭建 三台云服务器
217 6
|
11月前
|
消息中间件 监控 Java
联通实时计算平台问题之监控Kafka集群的断传和积压情况要如何操作
联通实时计算平台问题之监控Kafka集群的断传和积压情况要如何操作
112 1
|
11月前
|
消息中间件 监控 Java
【Kafka节点存活大揭秘】如何让Kafka集群时刻保持“心跳”?探索Broker、Producer和Consumer的生死关头!
【8月更文挑战第24天】在分布式系统如Apache Kafka中,确保节点的健康运行至关重要。Kafka通过Broker、Producer及Consumer间的交互实现这一目标。文章介绍Kafka如何监测节点活性,包括心跳机制、会话超时与故障转移策略。示例Java代码展示了Producer如何通过定期发送心跳维持与Broker的连接。合理配置这些机制能有效保障Kafka集群的稳定与高效运行。
301 2