Linux系统上搭建高可用Kafka集群(使用自带的zookeeper)

本次在CentOS7.6上搭建Kafka集群

Apache Kafka 是一个高吞吐量的分布式消息系统,被广泛应用于大规模数据处理和实时数据管道中。本文将介绍在CentOS操作系统上搭建Kafka集群的过程,以便于构建可靠的消息处理平台。

文件分享(KafkaUI、kafka3.3.2、jdk1.8)

链接:https://pan.baidu.com/s/1dn_mQKc1FnlQvuSgGjBc1w?pwd=t2v9 提取码:t2v9

也可以从官网自己下

Kafka官网

步骤概览

本次使用三台机器 hostname别名分别为res01(10.41.7.41)、res02(10.41.7.42)、res03(10.41.7.43)

在这个教程中,我们将覆盖以下主要步骤:

  1. 准备环境:安装和配置Java、Zookeeper和Kafka所需的依赖。
  2. 配置Zookeeper集群:确保Kafka有可靠的分布式协调服务。(本次使用Kafka自带的zookeeper)
  3. 配置Kafka集群:在每个节点上安装和配置Kafka,设置Kafka集群以实现高性能和高可用性。

步骤详解

步骤1:环境准备 (先对第一台服务器操作 其他的使用scp传输之后进行小修改就好)

安装Java

确保Java安装正确,并设置JAVA_HOME环境变量。

如果对于jdk安装有问题的可以看一下这篇Linux安装MySQL、JDK(含环境变量配置)、Tomcat

步骤2:安装Kafka

下载和解压Kafka
[root@res01 module]# clear
[root@res01 module]# ll
总用量 104124
drwxr-xr-x. 4 root root        40 11月 10 10:07 data
-rw-r--r--. 1 root root 106619987 11月 10 10:33 kafka_2.13-3.3.2.tgz
[root@res01 module]# tar -zxvf kafka_2.13-3.3.2.tgz 
解压之后通过mv改名

步骤3:配置zookeeper

进入文件夹kafka3.3.2中找到config

接下来主要修改zookeeper.properties和server.properties这两个文件

zookeeper.properties如下

# 需要去新建/opt/module/data/zookeeper下面这两个文件夹
dataDir=/opt/module/data/zookeeper/data
dataLogDir=/opt/module/data/zookeeper/logs
clientPort=12181
maxClientCnxns=0
admin.enableServer=false
tickTime=2000
initLimit=10
syncLimit=5
# server.X=hostname:peerPort:leaderPort
# peerPort 是服务器之间通信的端口。
# leaderPort 是用于选举 leader 的端口。
server.1=res01:12182:12183
server.2=res02:12182:12183
server.3=res03:12182:12183

#res01、res02、res03是我本地设置过的主机名 如果没设置使用ip地址即可
在每个节点上zookeeper的配置文件中dataDir目录下创建一个名为myid的文件,并分别填入相应节点的ID号:123

步骤4:配置Kafka

编辑Kafka配置文件config/server.properties,设置broker.idzookeeper.connect

# 设置 broker.id 这个是 Kafka 集群区分每个节点的唯一标志符。 对应那个myid即可
broker.id=1
# 将监听端口设置为19091
listeners=PLAINTEXT://res01:19091

# 将广告给客户端的地址也设置为19091
advertised.listeners=PLAINTEXT://res01:19091

num.network.threads=3

num.io.threads=8

socket.send.buffer.bytes=102400

# The receive buffer (SO_RCVBUF) used by the socket server
socket.receive.buffer.bytes=102400

# The maximum size of a request that the socket server will accept (protection against OOM)
socket.request.max.bytes=104857600


############################# Log Basics #############################

# 设置 Kafka 的数据存储路径 这个目录下不能有其他非 Kafka 目录,不然会导致 Kafka 集群无法启动。
log.dirs=/opt/module/data/kafka-log
# 默认的 Partition 的个数。
num.partitions=3
# 设置默认的复制因子为3
default.replication.factor=3


num.recovery.threads.per.data.dir=1
offsets.topic.replication.factor=3
transaction.state.log.replication.factor=1
transaction.state.log.min.isr=1
# Kafka 的数据保留的时间,默认是 7 天 168h。 这里使用24小时
log.retention.hours=24

log.retention.check.interval.ms=300000
# Kafka 连接的 ZooKeeper 的地址和连接 Kafka 的超时时间。
zookeeper.connect=res01:12181,res02:12181,res03:12181
zookeeper.connection.timeout.ms=6000

group.initial.rebalance.delay.ms=0
# 设置是否可以删除 Topic,默认 Kafka 的 Topic 是不允许删除的 这里打开了
delete.topic.enable=true


# 这是用于启用或禁用日志清理的选项,默认值为 true,以确保 Kafka 持续进行日志清理。需要根据实际需求进行设置。
log.cleaner.enable=true
# 这个参数控制日志清理线程的数量。对于你的硬件配置,你可以考虑设置为 4 或 8 来充分利用服务器的性能。
log.cleaner.threads=4
# 这个参数用于控制日志清理线程的 IO 缓冲区大小。对于你的硬件配置,可以设置为 8192 或 16384。
log.cleaner.io.buffer.size=8192
# 这个参数是用来设置主题日志保留的最大字节数。对于控制磁盘空间的使用非常重要。例如,如果你希望限制每个主题的数据量不超过 100GB,可以设置为 107374182400
log.retention.bytes=107374182400
# 这个参数用于控制每个日志段文件的最大大小。对于你的硬件配置,你可以设置为 1073741824(即 1GB)。
log.segment.bytes=1073741824
# 这个参数用于设置 Zookeeper 会话的超时时间。对于较大的集群和连接较慢的网络,你可以考虑将其设置为 10000,即 10 秒。
zookeeper.session.timeout.ms=10000

重点是这个:

# 设置默认的复制因子为3
default.replication.factor=3

在Kafka集群的每个节点上,修改broker.id为对应的节点ID。

配置kafka环境变量

#java环境
export JAVA_HOME=/usr/local/java/jdk1.8
export PATH=$PATH:$JAVA_HOME/bin
#kafka环境
export KAFKA_HOME=/opt/module/kafka3.3.2
export PATH=$PATH:$KAFKA_HOME/bin

步骤5:复制虚拟机

(已有其他服务器的直接连网线scp就好 环境变量 配置小改一下就好 还有hosts、ip等等别忘了配置,我这里直接复制虚拟机了 )

配置ip、hostname以及hosts后尝试ping

res02修改kafka的config文件即可(zookeeper配置文件都一样 用res01配置的就好)

res03的kafka配置文件同理

以及各台机器的myid(对应上brokerId即可)

步骤6:配置Kafka集群

确保防火墙或安全组允许Kafka端口通过,通常是9092端口。(我这是修改过的为19091,我直接关防火墙了 方便。)

systemctl stop firewalld.service
#关闭运行的防火墙
systemctl disable firewalld.service
#永久关闭防火墙
本次使用的是绝对路径 各位可以到kafka目录下执行命令 去掉前面的绝对路径就好
zookeeper命令

在每个机器上,先启动zookeeper:

/opt/module/kafka3.3.2/bin/zookeeper-server-stop.sh
#停止命令
/opt/module/kafka3.3.2/bin/zookeeper-server-start.sh  /opt/module/kafka3.3.2/config/zookeeper.properties
#启动命令
/opt/module/kafka3.3.2/bin/zookeeper-server-start.sh -daemon /opt/module/kafka3.3.2/config/zookeeper.properties
#后台启动命令 常用~
统一启动后jps查看进程

Kafka命令
在每个Kafka节点上,启动Kafka服务器:
/opt/module/kafka3.3.2/bin/kafka-server-start.sh  /opt/module/kafka3.3.2/config/server.properties
#kafka启动命令
/opt/module/kafka3.3.2/bin/kafka-server-start.sh -daemon /opt/module/kafka3.3.2/config/server.properties
#kafka后台启动命令 常用~
/opt/module/kafka3.3.2/bin/kafka-server-stop.sh
#停止命令
统一启动后jps查看进程
创建主题

使用kafka-topics.sh命令创建一个主题:这里设置的复制因子为3 

bin/kafka-topics.sh --create --topic 你的topic--bootstrap-server res01:19091--replication-factor 3 --partitions 3

验证Kafka集群

使用生产者和消费者验证Kafka集群的功能:

# 启动生产者
bin/kafka-console-producer.sh --topic myTopic --bootstrap-server res01:19091

# 启动消费者
bin/kafka-console-consumer.sh --topic myTopic --bootstrap-server res01:19091--from-beginning

停止 Zookeeper:
/opt/module/kafka3.3.2/bin/zookeeper-server-stop.sh
启动 Zookeeper:
/opt/module/kafka3.3.2/bin/zookeeper-server-start.sh  /opt/module/kafka3.3.2/config/zookeeper.properties
后台启动 Zookeeper:
/opt/module/kafka3.3.2/bin/zookeeper-server-start.sh -daemon /opt/module/kafka3.3.2/config/zookeeper.properties
清空 Kafka 日志:
rm -rf //opt/module/data/kafka-logs/*
启动 Kafka 服务:
/opt/module/kafka3.3.2/bin/kafka-server-start.sh  /opt/module/kafka3.3.2/config/server.properties
后台启动 Kafka 服务:
/opt/module/kafka3.3.2/bin/kafka-server-start.sh -daemon /opt/module/kafka3.3.2/config/server.properties
停止 Kafka 服务:
/opt/module/kafka3.3.2/bin/kafka-server-stop.sh
创建 Topic:
/opt/module/kafka3.3.2/bin/kafka-topics.sh --create --topic [TOPIC_NAME] --bootstrap-server [SERVER_IP]:[PORT] --partitions [PARTITIONS_SIZE] --replication-factor [REPLICATION_FACTOR]
删除 Topic:
/opt/module/kafka3.3.2/bin/kafka-topics.sh --delete --topic [TOPIC_NAME] --bootstrap-server [SERVER_IP]:[PORT]
查看 Topic 信息:
/opt/module/kafka3.3.2/bin/kafka-topics.sh --describe --topic [TOPIC_NAME] --bootstrap-server [SERVER_IP]:[PORT]
列出所有的 Topic:
/opt/module/kafka3.3.2/bin/kafka-topics.sh --list --bootstrap-server [SERVER_IP]:[PORT]
控制台生产消息:
/opt/module/kafka3.3.2/bin/kafka-console-producer.sh --bootstrap-server [SERVER_IP]:[PORT] --topic [TOPIC_NAME]
控制台消费信息:
/opt/module/kafka3.3.2/bin/kafka-console-consumer.sh --bootstrap-server [SERVER_IP]:[PORT] --topic [TOPIC_NAME] --from-beginning
查看副本:
/opt/module/kafka3.3.2/bin/kafka-topics.sh --describe --bootstrap-server [SERVER_IP]:[PORT] | grep consumer_offsets
请记住替换 [TOPIC_NAME]、[SERVER_IP]:[PORT]、[PARTITIONS_SIZE]、[REPLICATION_FACTOR] 等位中的值为实际的值。

自己的做的总结如上:

运行Java代码生成topic 可以看到分区都是3符合集群要求

运行kafkaui查看详细情况(百度网盘链接里有,自己输入命令太累了 直接用别人封装好现成的看就好~)

结论

通过这个步骤,我们成功地搭建了一个基本的Kafka集群。在实际生产环境中,您可能需要进一步调整和优化配置,以满足特定需求和性能要求。

希望这个教程可以帮助您成功搭建Kafka集群,为您的数据处理和消息传递架构提供强大的基础设施。

最后温馨提示:如果你远程服务器起了别名,而自己电脑的hosts别名对应其他的服务器 也会发生报错 记得别名对应好ip即可

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 要搭建Kafka集群,需要以下步骤: 1. 安装Java环境:Kafka是基于Java开发的,因此需要先安装Java环境。 2. 下载Kafka:从官网下载Kafka的二进制包。 3. 解压Kafka:将下载的Kafka二进制包解压到指定的目录下。 4. 配置Kafka:修改Kafka的配置文件,包括broker.id、zookeeper.connect、listeners等参数。 5. 启动ZookeeperKafka依赖于Zookeeper,因此需要先启动Zookeeper。 6. 启动Kafka:启动Kafka集群,可以使用命令行或者脚本启动。 7. 测试Kafka使用Kafka提供的命令行工具进行测试,包括创建主题、发送消息、消费消息等操作。 8. 部署Kafka集群:将Kafka集群部署到多台服务器上,可以使用Kafka提供的复制机制实现数据的备份和容错。 以上就是搭建Kafka集群的基本步骤。需要注意的是,Kafka的配置和部署需要根据实际情况进行调整和优化,以保证Kafka集群的性能和稳定性。 ### 回答2: Kafka是一款高性能的分布式消息系统,常常用于大规模数据流的处理和分发。Linux作为一个可靠的服务端操作系统,也是Kafka的一个常见的运行环境。本文将介绍在Linux环境下搭建Kafka集群的步骤和注意事项。 1. 安装Java Kafka是基于Java开发的,因此需要先安装Java运行环境。使用以下命令安装Java 8: ``` $ sudo apt-get update $ sudo apt-get install openjdk-8-jdk ``` 2. 下载和解压缩Kafka 下载Kafka最新版本,并解压缩到合适的目录下。比如: ``` $ wget https://downloads.apache.org/kafka/2.6.0/kafka_2.13-2.6.0.tgz $ tar -zxf kafka_2.13-2.6.0.tgz $ cd kafka_2.13-2.6.0 ``` 3. 修改配置文件 Kafka的配置文件位于“config”目录下,常见的有“server.properties”和“zookeeper.properties”。我们需要修改这些配置文件以适配我们的环境。下面是一些要注意的设置: - “server.properties”中的“broker.id”必须是唯一的,每个Kafka节点应该有一个唯一的值。 - “server.properties”中需要设置“listeners”为“PLAINTEXT://:9092”或“PLAINTEXT://[[hostname]]:9092”,这样才能通过网络接口访问到Kafka。 - “zookeeper.properties”中需要设置“dataDir”为Zookeeper数据存储的目录。 4. 启动Zookeeper Kafka依赖Zookeeper来管理集群配置,因此需要先启动Zookeeper使用以下命令启动Zookeeper: ``` $ bin/zookeeper-server-start.sh config/zookeeper.properties ``` 5. 启动Kafka节点 我们可以使用以下命令启动一个Kafka节点,注意使用不同的配置文件: ``` $ bin/kafka-server-start.sh config/server.properties ``` 如果我们需要启动多个节点,可以使用不同的配置文件,并在启动时设置不同的“broker.id”。启动一组Kafka节点后,它们将自动组成一个集群。 6. 测试 使用以下命令创建一个主题和消费者: ``` $ bin/kafka-topics.sh --create --bootstrap-server localhost:9092 --replication-factor 1 --partitions 1 --topic test $ bin/kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic test --from-beginning ``` 然后在生产者端发送一些消息: ``` $ bin/kafka-console-producer.sh --broker-list localhost:9092 --topic test >test message 1 >test message 2 ``` 我们应该可以在消费者端看到这些消息。 7. 总结 在Linux环境下搭建Kafka集群需要一定的基础知识和技能,但只要按照上述步骤操作,应该能够很容易地搭建一个稳定的、高性能的Kafka环境。当然,在运维过程中也需要注意Kafka的一些常见问题,如副本同步延迟、消息丢失等。不过这些问题已经超出了本文的范围。 ### 回答3: Kafka是一个高性能、可扩展、分布式的消息队列,由于它的高可靠性和高吞吐量,越来越多的企业选择使用Kafka作为消息中间件。为满足大规模数据处理和高并发请求的需求,必须通过搭建Kafka集群来保证其性能和可靠性。 一、环境准备 1.安装Java环境:Kafka运行需要Java环境,安装JDK。 2.下载和安装KafkaKafka官方网站下载.tar.gz格式的压缩包,解压缩至指定路径即可。 3.配置Kafka:修改config文件夹下server.properties配置文件,设置Kafka的基本参数。 4.准备Zookeeper环境:Kafka集群依赖于Zookeeper环境,需要先安装Zookeeper。 5.配置Zookeeper:修改Zookeeper的配置文件config/zookeeper.properties,设置Zookeeper的基本参数。 二、搭建Kafka集群 1.编辑Kafka配置文件:修改Kafka的配置文件config/server.properties,设置Kafka节点通信机制,以及数据保存路径等参数。 2.启动Zookeeper:启动Zookeeper,确保Zookeeper正常工作。 3.启动Kafka服务器:执行bin/kafka-server-start.sh config/server.properties命令启动Kafka服务器,启动成功后就可以在本机访问Kafka。 4.配置Kafka集群: 在每个Kafka节点上修改配置文件,设置broker.id、zookeeper.connect、port等参数,然后依次启动所有节点。 5.测试Kafka集群: 在集群中的任何一个节点上创建一个主题,向主题中发送消息并消费消息,以确保Kafka集群的正常工作。 三、集群管理 管理Kafka集群需要使用kafka-manager或kafka-web-console等工具,可以通过Web界面来管理Kafka集群的主题、分区、消费者以及监控Kafka的各项指标,方便用户进行集群管理。 总之,通过上述步骤,可以快速搭建一个高可靠、高吞吐量的Kafka集群,为企业提供无缝的数据传输、消息中间件服务。同时,对于管理者而言,还需要做好监控和维护工作,保证 kafka 集群持续稳定的工作,最终满足各种复杂业务的数据流转和处理需求。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值