部署一个3节点的Kafka集群

本文详细描述了在已安装Java环境下,如何部署Kafka集群,包括Java环境配置、ZooKeeper设置、Kafka配置、Topic管理以及生产者和消费者消息测试。重点介绍了三台服务器的主机名解析和Kafka集群的启动、监控与问题排查过程。
摘要由CSDN通过智能技术生成

前提条件:

  • 已经安装了 Java 环境(Kafka 是基于 Java 开发的)。
  • 已经有三台独立的服务器(节点),每台服务器相互做地址解析。

一 Java环境部署:

  1.1 官网下载jdk

Java下载官网icon-default.png?t=N7T8https://www.oracle.com/cn/java/technologies/javase/javase8u211-later-archive-downloads.html

  1.12 解压jdk到/usr/local/下
tar -xzvf jdk-8u381-linux-x64.tar.gz -C /usr/local
  1.13 配置环境变量
vim /etc/profile进入编辑模式后,在末尾加入这段(JAVA_HOME为安装路径,:为分隔作用)

export JAVA_HOME=/usr/local/jdk1.8.0_381
export PATH=$PATH:$JAVA_HOME/bin           #将java中bin目录追加到原PATH变量中
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar  #配置类文件路径
export JRE_HOME=$JAVA_HOME/jre     #某些程序需要使用JAVA运行环境
  1.14 重新加载配置并测试
  • source /etc/profile
  • java -version  #出现版本即为成功
  1.2 三台节点相互做主机名解析
vim /etc/hosts
192.168.10.110 kafka-110        ##这里映射的主机名可与/etc/hostname中的不同
192.168.10.119 kafka-119
192.168.10.120 kafka-120
###这个文件的作用是进行本地解析:将ip映射到域名或者主机名
当系统需要解析主机名时先访问该文件,主要在局域网且没有可用DNS服务器时使用

二 部署kafka集群步骤:每台节点都进行以下操作

  2.1 下载 Kafka:

kafka下载官网icon-default.png?t=N7T8https://kafka.apache.org/downloads

  下载需要的 Kafka 版本,命名规则:kafka_Scala版本-kafka版本

  2.2 解压 Kafka:
  • 将下载的 Kafka 压缩包解压到每一台服务器上,得到 Kafka 的安装目录。
tar -xvf kafka_2.11-0.10.0.1.tgz -C /opt/
  2.3 配置 ZooKeeper:Kafka 集群依赖 ZooKeeper,因此需要配置 ZooKeeper。
   2.31 下载 zookeeper-3.5.4-beta.tar.gz,并解压到/opt/

   0.1.1前版本必带参数--zookeeper,之后的新版本必带参数--bootstrp-server

zookeeper下载icon-default.png?t=N7T8https://archive.apache.org/dist/zookeeper/

 tar -zxvf zookeeper-3.5.4-beta.tar.gz -C /opt/

 tips:工作环境中一般解压到/usr/local(/usl/local为标准安装目录,是全局目录所有用户都可访问)

   2.32 编辑配置文件
cd /opt/zookeeper-3.5.4-beta/conf/
cp zoo_sample.cfg zoo.cfg
vim zoo.cfg
tickTime=2000                #定义zk使用基本时间单位(以毫秒为单位)
initLimit=10                 #定义leader和follower启动过程中时间限制
syncLimit=5                  #定义leader和follower之间的通信时限,规定响应时间
dataDir=/opt/zoo/data        #定义zk的数据存储目录
clientPort=2181              #定义zk用于接收客户端连接的端口
maxClientCnxns=500           #定义每个客户端 IP 地址允许建立的最大连接数

server.0=192.168.10.110:2888:3888
server.1=192.168.10.119:2888:3888
server.2=192.168.10.120:2888:3888   

#格式:server.<ID>=<hostname>:<peerPort>:<leaderPort>
#hostname:可为/etc/hosts中的ip或主机名 peerPort:服务器之间通信端口 leaderPort:选举leader端口

mkdir -p /opt/zoo/{data,logs}
vim /opt/zoo/data/myid                   #定义zk节点唯一标识(ID),和配置文件对应
三台机器的myid分别写入0,1,2
    2.33 启动zookeeper
 cd /opt/zookeeper-3.5.4-beta/bin/
 ./zkServer.sh start
# 查看启动状态
sh zkServer.sh status
#关闭
 ./zkServer.sh stop

  2.4 配置 Kafka:

   2.41修改配置文件
vim /opt/kafka_2.11-0.10.0.1/config/zookeeper.properties 

dataDir=/opt/zoo/data
#该目录是zookeeper配置的数据存放目录
vim /opt/kafka_2.11-0.10.0.1/config/server.properties

broker.id=0
#分别为0,1,2
#本机IP(kafka的监听地址和外界连接地址,)
listeners=PLAINTEXT://192.168.10.110:9092
advertised.listeners=PLAINTEXT://192.168.10.110:9092
#listeners提供Broker监听地址和端口,PLAINTEXT:明文协议(无加密)
#端口:这里主要是用于接收来自生产者和消费者的连接请求,和与客户端能建立连接
#zookeeper配置:定义了Kafka Broker用于连接到ZK集群的地址,2181为zk的连接端口
zookeeper.connect=192.168.10.110:2181,192.168.10.119:2181,192.168.10.120:2181

  2.5 启动 Kafka: 
cd  /opt/kafka_2.11-0.10.0.1/bin/

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

#关闭
./kafka-server-stop.sh

  2.6  创建 Topic:

使用 Kafka 提供的 kafka-topics.sh 脚本创建一个 Topic。例如:

/kafka-topics.sh --create --zookeeper localhost:2181 --replication-factor 2 --partitions 6 --topic test

--topic:在消息传递系统中,主题是用于组织和发布消息的逻辑通道,类似微信聊天的窗口

--replication-factor :定义每个分区的副本数(副本可理解为实时数据备份),大于broker一半

--partitions :分区,数据被划分为多个片段,一个片段为一个分区,设置为broker的倍数6.9..

如果显示下面指令,代表创建topic成功

Created topic "test".
  2.7 删除 Topic:
#kafka删除
./kafka-topics.sh --delete --topic student --zookeeper 192.168.10.119,192.168.10.110,192.168.10.120
#zk删除
进入zk后:deleteall /brokers/topics/想要删除的主题

  2.8 验证集群状态:

使用 Kafka 提供的 kafka-topics.shkafka-consumer-groups.sh 等脚本查看 Topic 和 Consumer Group 的状态,确保集群正常运行。

#kafka列出创建主题
./kafka-topics.sh --list --zookeeper localhost:2181
#zk列出创建主题
登录到zk:./zkCli.sh -server
ls /brokers/topics   ls /brokers/ids
#查分区
./kafka-topics.sh --describe --zookeeper localhost:2181 --topic example_topic

  2.9  发送和消费消息:    使用 Kafka 提供的 kafka-console-producer.shkafka-console-consumer.sh 等脚本测试消息的发送和消费,确保消息在集群中正常流通。

#生产者:命令行要在一行可使用“\”
./kafka-console-producer.sh --broker-list 192.168.10.119:9092,192.168.10.110:9092,192.168.10.120:9092  --topic test
#消费者:
./kafka-console-consumer.sh --bootstrap-server 192.168.10.119:9092,192.168.10.110:9092,192.168.10.120:9092 --topic test --from-beginning
  • 请注意,以上步骤和理解仅供参考,实际部署可能需要根据具体环境和需求进行调整。在生产环境中,还需要考虑安全性、性能调优等方面的配置。在部署前建议仔细阅读 kafka官网文档,并根据需要进行适当的修改和优化。

三 kafka可视化

参考优秀文档kafka可视化

这里注意要在windows上做本地解析:C:\Windows\System32\drivers\etc\hosts

四 遇到问题

  • 其中一台zk起不来:发现是防火墙没关
  • 19
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
首先,你需要一个 Kubernetes 集群,如果没有的话,可以使用 Minikube 或者其他 Kubernetes 集群搭建方案来搭建一个本地的 Kubernetes 集群。 接下来,你需要创建一个 ZooKeeper 的 Deployment 和 Service: ```yaml apiVersion: apps/v1 kind: Deployment metadata: name: zookeeper spec: replicas: 1 selector: matchLabels: app: zookeeper template: metadata: labels: app: zookeeper spec: containers: - name: zookeeper image: zookeeper:3.6.2 ports: - containerPort: 2181 - containerPort: 2888 - containerPort: 3888 volumeMounts: - name: data mountPath: /data volumes: - name: data emptyDir: {} --- apiVersion: v1 kind: Service metadata: name: zookeeper spec: selector: app: zookeeper ports: - name: client port: 2181 protocol: TCP - name: follower port: 2888 protocol: TCP - name: leader port: 3888 protocol: TCP ``` 这个 YAML 文件定义了一个名为 zookeeper 的 Deployment 和一个名为 zookeeper 的 Service。Deployment 使用了 zookeeper:3.6.2 镜像,它会启动一个节点的 ZooKeeper 实例。Service 会将端口 2181、2888 和 3888 暴露出来,以便于 Kafka 集群连接 ZooKeeper。 然后,你需要创建三个 Kafka 的 Deployment 和 Service,每个 Kafka 集群都需要一个 Deployment 和一个 Service: ```yaml apiVersion: apps/v1 kind: Deployment metadata: name: kafka-cluster-1 spec: replicas: 3 selector: matchLabels: app: kafka-cluster-1 template: metadata: labels: app: kafka-cluster-1 spec: containers: - name: kafka image: wurstmeister/kafka:2.13-2.7.0 env: - name: KAFKA_BROKER_ID valueFrom: fieldRef: fieldPath: metadata.uid - name: KAFKA_ADVERTISED_HOST_NAME valueFrom: fieldRef: fieldPath: status.podIP - name: KAFKA_ZOOKEEPER_CONNECT value: zookeeper:2181 - name: KAFKA_LOG_DIRS value: /kafka/kafka-cluster-1 ports: - containerPort: 9092 volumeMounts: - name: data mountPath: /kafka volumes: - name: data emptyDir: {} --- apiVersion: v1 kind: Service metadata: name: kafka-cluster-1 spec: selector: app: kafka-cluster-1 ports: - name: kafka port: 9092 protocol: TCP ``` 你需要将上面的 YAML 文件中的相应字段替换成你自己的配置。这个 YAML 文件定义了一个名为 kafka-cluster-1 的 Deployment 和一个名为 kafka-cluster-1 的 Service。Deployment 使用了 wurstmeister/kafka:2.13-2.7.0 镜像,它会启动三个 Kafka 节点。每个节点会注册到 ZooKeeper 上,Kafka 集群会使用 ZooKeeper 来管理节点、分区和副本。Service 会将端口 9092 暴露出来,以便于外部应用程序连接 Kafka 集群。 同样的方法,你可以创建另外两个 Kafka 集群的 Deployment 和 Service。完成后,你就可以使用 Kafka 集群了。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值