Kafka/Zookeeper集群搭建

若采用docker容器化的部署方案可直接跳过前提准备哦~

前提准备

本文使用的是kafka_2.13-2.8.1.tgz

❀ 温馨提示: 该文件集成了zookeeper,因此不需要再特意下载哦~

前提

❀ 确保有jdk8环境

1、查看版本

java -version

2、安装jdk8(有网环境)

#Ubuntu
apt install -y openjdk-8-jdk-headless
#CentOS
yum install openjdk-8-jdk-headless

3、安装jdk8(无网环境)

jdk-8u221
链接:https://pan.baidu.com/s/1uhrtDj-pG3BsTq8tMiZAlg
提取码:26k2

#解压jdk到当前目录
tar -zxvf jdk-8u221-linux-x64.tar.gz

#编辑配置文件,配置环境变量
vi /etc/profile

#用vim编辑器来编辑profile文件,在文件末尾添加一下内容(按“i”进入编辑):
export JAVA_HOME=/usr/local/jdk1.8.0_221
export JRE_HOME=${JAVA_HOME}/jre
export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib:$CLASSPATH
export JAVA_PATH=${JAVA_HOME}/bin:${JRE_HOME}/bin
export PATH=$PATH:${JAVA_PATH}

#执行命令
source /etc/profile

#查看安装情况
java -version

kafka之服务器部署

单机

1、修改zookeeper配置

❀ 修改数据存储路径

温馨提示:修改成自个路径之前,记得先创建目录哦!

vim config/zookeeper.properties

image-20220805101216565

dataDir=/data/kafka/zookeeper
# the port at which the clients will connect
clientPort=2181
# disable the per-ip limit on the number of connections since this is a non-production config
maxClientCnxns=0
# Disable the adminserver by default to avoid port conflicts.
# Set the port to something non-conflicting if choosing to enable this
admin.enableServer=false
# admin.serverPort=8080

2、启动zookeeper

./bin/zookeeper-server-start.sh config/zookeeper.properties
#后台启动
nohup ./bin/zookeeper-server-start.sh config/zookeeper.properties > zookeeper_nohup.log 2>&1 &

3、修改kafka配置文件server.properties

#修改IP地址为当前的主机IP:
advertised.listeners=PLAINTEXT://192.168.88.89:9092
#修改kafka日志保存路径:
log.dirs=/data/kafka/kafka-logs
#所有kafka znode的根目录,zk的IP+端口/node
zookeeper.connect=192.168.88.89:2181

4、启动kafka

./bin/kafka-server-start.sh config/server.properties
#后台启动
nohup bin/kafka-server-start.sh config/server.properties > kafka_server_nohup.log 2>&1 &

集群

1、绑定hosts

vim /etc/hosts

#绑定ip
192.168.5.11 kafka1 zoo1
192.168.5.12 kafka2 zoo2
192.168.5.13 kafka3 zoo3

2、修改zookeeper配置

vim config/zookeeper.properties

dataDir=/data/kafka/zkdata
# the port at which the clients will connect
clientPort=2181
# disable the per-ip limit on the number of connections since this is a non-production config
maxClientCnxns=0
# Disable the adminserver by default to avoid port conflicts.
# Set the port to something non-conflicting if choosing to enable this
admin.enableServer=false
# admin.serverPort=8080

tickTime=2000
initLimit=5
syncLimit=2
server.1=zoo1:2888:3888
server.2=zoo2:2888:3888
server.3=zoo3:2888:3888

3、创建数据目录和集群ID

myid 集群内不能重复的,每台机器设置成不一样的。

mkdir zkdata echo 1 > zkdata/myid 

4、启动zookeeper

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

5、修改kafka配置

vim config/server.properties

# 每个节点需要不一样
broker.id=1                         
listeners=PLAINTEXT://kafka1:9092
zookeeper.connect=zoo1:2181,zoo2:2181,zoo3:2181

6、启动kafka

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

测试

#创建topic
./bin/kafka-topics.sh --create --zookeeper 192.168.88.89:2181 --partitions 1 --replication-factor 1 --topic cloud-log
# 查看topic list
bin/kafka-topics.sh --zookeeper localhost:2181 --list
#发送消息
./bin/kafka-console-producer.sh --broker-list localhost:9092 --topic cloud-log
#接收消息
./bin/kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic cloud-log --from-beginning

image-20220805103453214

kafka之容器化部署

❀ 温馨提示:

出现/docker-entrypoint.sh: line 43: /conf/zoo.cfg: Permission denied

⼀般都是⽬录没权限,给对应⽬录添加权限即可

chmod 777 xxx

1、启动zookeeper容器

docker run -d -p 2181:2181 -p 2888:2888 -p 3888:3888 --privileged=true \
--restart=always --name=zkNode-1 \
-v /data/elk/zookeeper/conf:/conf \
-v /data/elk/zookeeper/data:/data \
-v /data/elk/zookeeper/datalog:/datalog wurstmeister/zookeeper

2、启动kafka容器

docker run -d --restart=always --name kafka \
-p 9092:9092 \
-v /data/elk/kafka/logs:/opt/kafka/logs \
-v /data/elk/kafka/data:/kafka/kafka-logs \
-v /data/elk/kafka/conf:/opt/kafka/config \
-e KAFKA_BROKER_ID=1 \
-e KAFKA_LOG_DIRS="/kafka/kafka-logs" \
-e KAFKA_ZOOKEEPER_CONNECT=10.84.77.10:2181 \
-e KAFKA_DEFAULT_REPLICATION_FACTOR=1 \
-e KAFKA_LOG_RETENTION_HOURS=72 \
-e KAFKA_ADVERTISED_LISTENERS=PLAINTEXT://10.84.77.10:9092 \
-e ALLOW_PLAINTEXT_LISTENER=yes \
-e KAFKA_LISTENERS=PLAINTEXT://0.0.0.0:9092 -t wurstmeister/zookeeper

docker 启动参数说明:

-d:后台启动,

--restart=always:如果挂了总是会重启

--name:设置容器名

-p: 设置宿主机与容器之间的端⼝映射,例如:9902:9092,表示将容器中9092端⼝映射到宿主机的9902端⼝,当有请求访问宿主机的9902端⼝时,会被转发到容器内部的9092端⼝

-v:设置宿主机与容器之间的路径或⽂件映射,例如:/home/kafka/logs:/opt/kafka/logs,表示将容器内部的路径/opt/kafka/logs⽬录映射到宿主机的/home/kafka/logs⽬录,可以⽅便的从宿主机/home/kafka/logs/就能访问到容器内的⽬录,⼀般数据⽂件夹,配置⽂件均可如此配置,便于管理和数据持久化

-e 设置环境变量参数,例如-e KAFKA_BROKER_ID=1,表示将该环境变量设置到容器的环境变量中,容器在启动时会读取该环境变量,并替换掉容器中配置⽂件的对应默认配置(server.properties⽂件中的 broker.id=1)

3、测试kafka

#进⼊kafka容器的命令⾏
docker exec -it kafka /bin/bash
#进⼊kafka所在⽬录
cd /opt/kafka_2.13-2.8.1/
#没有找到就⽤这个命令搜索
find / -name kafka-topics.sh
#创建topic
./bin/kafka-topics.sh --create --zookeeper 192.168.88.89:2181 --partitions 1 --replication-factor 1 --topic cloud-log
#发送消息
./bin/kafka-console-producer.sh --broker-list localhost:9092 --topic cloud-log
#接收消息
./bin/kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic cloud-log --from-beginning

大功告成!!!

常见问题

  • FileSystemException: Device or resource busy
    image-20220729104957340
    image-20220729105230816

❀ 挂载点泄漏是内核3.10的bug,在后续内核版本得到修复,可以通过升级内核。生产环境,因此只能退一步海阔天空了,8版折磨了我很久,换个7版几下搞定~

  • cannot upgrade a node from version [7.7.1] directly to version [8.3.2], upgrade to version [7.17.0] first.
    image-20220729093222251

❀ 顾名思义了,之前安装过7.7.1然后基于原来挂载的文件安装8.3.2,把之前文件删了即可

  • 出现/docker-entrypoint.sh: line 43: /conf/zoo.cfg: Permission denied

❀ ⼀般都是⽬录没权限,给对应⽬录添加权限即可

chmod 777 xxx

  • FileNotFoundException: /opt/kafka 2. 13-2. 8. 1/bin/,./config/ tools-log4j. properties (No such file or directory)
    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-VUEHzTAO-1663039777941)(https://img.slcp.top/QQ%E5%9B%BE%E7%89%8720220730183800.png)]

❀ 顾名思义,在指定位置创建指定文件即可

  • kafka.common.InconsistentClusterIdException: The Cluster ID C4wRULTzSGqNoEAInvubIw doesn’t match stored clusterId Some(eA5rD8rZSUm3EXr2glib2w) in meta.properties. The broker is trying tojoin the wrong cluster. Configured zookeeper.connect may be wrong.

个时候需要删除kafka的log目录,让程序重新生成

  • 创建topic,kafka连zookeeper出现连接超时

❀ 首先查看zk容器是否启动成功docker logs zk,其次查看IP是对应上,再者查看命令是否有问题

./bin/kafka-topics.sh --create --zookeeper 192.168.88.89:2181 --partitions 1 --replication-factor 1 --topic cloud-log

或者

./bin/kafka-topics.sh --create --bootstrap-server 10.84.77.10:2181 --partitions 1 --replication-factor 1 --topic cloud-log

  • 其他未提及的问题,前往留言,小编会及时回复哦~

上一篇: Docker安装ELK详细步骤

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
### 回答1: ZookeeperKafka集群搭建是一种常用的架构设计方法。Zookeeper是一种分布式的协调服务,在Kafka集群搭建中主要用于存储元数据信息和管理集群的状态。而Kafka则是一种高吞吐量的消息队列系统,可实现大规模的数据传输和处理。通过ZookeeperKafka集群搭建,可以提高系统的可靠性和可扩展性。 ### 回答2: ZookeeperKafka是Apache软件基金会下的两个重要的分布式应用程序,它们都是构建可靠、可扩展、具有高性能的分布式应用体系结构的两个重要组件。下面将介绍如何搭建一个Kafka集群,并使用Zookeeper来实现其高可用性。 1. 准备工作 为了搭建Kafka集群,您需要在您的每个服务器上安装Java环境。建议将Java安装在/opt/java/目录下,并将JAVA_HOME变量设置为/opt/java/jdk1.8.0_301。 2. 下载和安装Zookeeper 首先,您需要从Zookeeper的官方网站上下载最新版本的Zookeeper。选择合适版本的二进制文件下载即可。完成后,将Zookeeper解压到/opt/zookeeper/目录下。编辑/opt/zookeeper/conf/zoo.cfg,设置数据目录和Zookeeper服务器列表,例如:dataDir=/opt/zookeeper/data server.1=zk1:2888:3888 server.2=zk2:2888:3888 server.3=zk3:2888:3888 3. 配置Kafka集群 将Kafka的二进制文件下载到您的服务器,解压到/opt/kafka目录下。编辑/opt/kafka/config/server.properties文件,将以下参数设置为适当的值: broker.id=1 listeners=PLAINTEXT://kafka1:9092 advertised.listeners=PLAINTEXT://kafka1:9092 log.dirs=/opt/kafka/logs num.partitions=3 其中broker.id是唯一的标识符,listeners和advertised.listeners指定Kafka服务器的地址,log.dirs指定存储Kafka数据的目录,num.partitions指定在Kafka服务器上创建的分区数。 4. 启动ZookeeperKafkaZookeeper服务器上启动Zookeeper:/opt/zookeeper/bin/zkServer.sh start 在Kafka服务器上启动Kafka:/opt/kafka/bin/kafka-server-start.sh /opt/kafka/config/server.properties 如果Kafka服务器和Zookeeper服务器在同一台服务器上运行,则必须在不同的终端中启动它们。根据需要,将Kafka服务器配置文件中的其他参数设置为适当的值。 5. 测试Kafka集群 通过创建新的主题并发送一些消息进行测试。在另一个终端中,创建一个名为test的新主题:/opt/kafka/bin/kafka-topics.sh --create --zookeeper zk1:2181 --replication-factor 2 --partitions 3 --topic test 在同一终端中,发送一些消息:/opt/kafka/bin/kafka-console-producer.sh --broker-list kafka1:9092 --topic test 在另一个终端中,接收这些消息:/opt/kafka/bin/kafka-console-consumer.sh --bootstrap-server kafka1:9092 --topic test --from-beginning 以上是一个简单的Kafka集群搭建过程,由Zookeeper来管理Kafka集群的状态。当Kafka集群中的任何一个服务器发生故障时,Zookeeper将自动将客户端重定向到另一个可用服务器。通过ZookeeperKafka的结合,您可以构建高可用、高性能的分布式应用程序。 ### 回答3: Kafka是一种高效、可扩展的分布式消息系统,而Zookeeper则是Kafka集群的重要组成部分。通过ZookeeperKafka集群可以实现高可用性和自动化管理。 以下是Zookeeper Kafka集群搭建的步骤: 第一步:安装Zookeeper Zookeeper的安装可以通过下载二进制包进行安装,也可以通过源码进行编译安装。这里我们以二进制包的方式进行安装。 1. 下载Zookeeper二进制包并解压缩。 2. 进入解压后的Zookeeper目录,复制conf文件夹中的zoo_sample.cfg,并修改名称为zoo.cfg。 3. 修改zoo.cfg文件中的数据和日志路径,并设置为本地有效的路径。例如: tickTime=2000 dataDir=/usr/local/zookeeper/data dataLogDir=/usr/local/zookeeper/logs 4. 启动Zookeeper: ./bin/zkServer.sh start 第二步:安装Kafka Kafka的安装可以通过下载二进制包进行安装,也可以通过源码进行编译安装。这里我们以二进制包的方式进行安装。 1. 下载Kafka二进制包并解压缩。 2. 进入解压后的Kafka目录,修改config/server.properties文件,设置broker.id、listeners、log.dirs以及zookeeper.connect等属性。 broker.id=1 listeners=PLAINTEXT://hostname:9092 log.dirs=/usr/local/kafka/logs zookeeper.connect=hostname:2181 3. 启动Kafka: ./bin/kafka-server-start.sh config/server.properties 第三步:创建Kafka主题 在Kafka上,消息以主题的形式进行组织。要创建一个主题,可以使用以下命令: ./bin/kafka-topics.sh --create --zookeeper hostname:2181 --replication-factor 1 --partitions 1 --topic test 其中,replication-factor表示复制因子,partitions表示分区数,topic表示主题名称。 第四步:启动Kafka生产者和消费者 通过Kafka生产者,可以往指定主题发送消息,而通过Kafka消费者,可以从指定主题接收消息。 启动Kafka生产者: ./bin/kafka-console-producer.sh --broker-list hostname:9092 --topic test 启动Kafka消费者: ./bin/kafka-console-consumer.sh --bootstrap-server hostname:9092 --topic test --from-beginning 以上就是Zookeeper Kafka集群搭建的步骤。通过以上步骤,可以快速搭建一个高效、可扩展的Kafka集群,满足您的消息传输需求。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

MY小炜

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值