您的位置:首页 > 运维架构 > Linux

Centos_7.2 下 Kafka_2.13 分布式消息系统的集群模式配置图文详解

2018-02-28 16:48 846 查看
《 Centos_7.2 下 Kafka_2.13 分布式消息系统的集群模式配置 》

一、前言

在上一篇博客中完成了
《 kafka 分布式消息系统的单例模式配置 》 的工作,但是在实际生产环境中,

二、环境介绍
Linux 版本: Centos-7

JDK 版本: JDK_1.8_Linux64bit

zookeeper 版本: zookeeper-3.5.3-beta

kafka 版本: kafka_2.12-1.0.0

三、集群模式搭建

1、kafka 基本环境准备

万事从入门开始,如果还没有 kafka 分布式消息系统的相关概念,建议从这儿开始
《 kafka 分布式消息系统的单例模式配置 》

在本篇博客中包括的内容:Linux 下 JDK 环境配置、zookeeper 的单例/集群模式环境、kafka 镜像包的准备、kafka 的单例模式配置。

2、Kafka 集群

1)、准备 Kafka

首先将 Kafka 放到便于管理的目录,输入命令 “ cp kafka_2.12-1.0.0 /usr/local/kk_cluster -r ”,

然后进入到 Kafka 的配置文件目录,输入命令 “ cd /usr/local/kk_cluster/config ” ,如下图:



2)、这儿应为条件有限,只实现 Kafka 的伪集群方式,但是和实际生产环境的搭建是相同的操作,在实际的生产环境中更容易些,应为不用考虑端口等因素。

首先需要复制出三个 参数配置文件,输入命令 “ cp server.properties server_001.properties ” ,如下图:



3)、修改参数配置,关于参数的详细介绍,在《单例》中已经明确,在这儿就不再作过多的阐述,Kafka 集群主要修改内容项如下:

# 当前机器在集群中的唯一标识,和zookeeper的myid性质一样
broker.id=1
# 当前kafka对外提供服务的端口默认是9092
port=9001
# kafka数据的存放地址,多个地址的话用逗号分割,多个目录分布在不同磁盘上可以提高读写性能
# 消息存放的目录,这个目录可以配置为“,”逗号分割的表达式,上面的 num.io.threads 要大于这个目录的个数这个目录
# 如果配置多个目录,新创建的 topic 把消息持久化到当前以逗号分割的目录中,那个 partition 中数最少就放到哪个 partition 中
log.dirs=/home/temp/kk_cluster_logs/kk_001_logs
# 设置zookeeper的连接端口,连接多个 zookeeper 时,用逗号隔开
zookeeper.connect=192.168.78.141:2001,192.168.78.141:2002,192.168.78.141:2003


kafka 标识 id : 1~3

kafka 端口号范围:9001~9003

zookeeper 端口范围:2001~2003

第一个 Kafka 服务:
唯一标识,监听 IP 和端口,如下图:



日志目录,如下图:



zookeeper 链接,如下图:



第二个 Kafka 服务:

唯一标识,监听 IP 和端口,如下图:



日志目录,如下图:



zookeeper 链接,如下图:



第三个 Kafka 服务:

唯一标识,监听 IP 和端口,如下图:



日志目录,如下图:



zookeeper 链接,如下图:



4)、启动 Kafka 集群

为了快捷的启动 kafka 集群,这儿编写个 启动脚本儿,内容如下:

#!/bin/bash
# 启动1号服务
bin/kafka-server-start.sh config/server_001.properties &
# 休眠 6 秒
sleep 6
# 启动2号服务
bin/kafka-server-start.sh config/server_002.properties &
# 休眠 6 秒
sleep 6
# 启动3号服务
bin/kafka-server-start.sh config/server_003.properties &
# 休眠 6 秒
sleep 6


5)、测试

创建一个 3 个副本 1 个分区和3个副本2个分区 的 topic,进入到 Kafka 的 bin 目录中,
输入命令 “ ./kafka-topics.sh --create --topic msg --replication-factor 3 --partitions 1 --zookeeper 192.168.78.141:2001 ” 

 “ ./kafka-topics.sh --create --topic msgs --replication-factor 3 --partitions 2 --zookeeper 192.168.78.141:2001 ” 

如下图:



查看 Kafka 集群的详细节点信息,

查看一个分区的主题,输入命令 “ ./kafka-topics.sh --describe --topic msg --zookeeper 192.168.78.141:2001 ”

如下图:



注意,在这个分区中,节点 3 被选举为领导者。

如上图是输出的关于 topic msg 的详细信息。第一行给出了所有分区的摘要,其它行都描述了关于一个分区的信息。因为这个主题只有一个分区,所以只有一行。

如果创建了两个分区,如下图所示:



leader :是负责给定分区所有读/写的节点。每个节点都可能被分区随机选择所有节点的领导者。

replicas :是为这个分区复制日志的节点列表,不管它们是领导者还是最随者,只要它们当前还存活着。

isr :是一组 “ in-sync ” 副本。这是副本列表的子集,该副本列表当前是活的,并被领导者捕获。

注意,第一分区中,节点 3 被选举为该分区的领导者;第二分区中,节点 1 被选举为领导者。

现在发表一些信息给新创建的主题,

输入命令 “ ./kafka-console-producer.sh --broker-list 192.168.78.141:9001 --topic msg ”

如下图:



现在让我们消费这些消息,

输入命令 “ ./kafka-console-consumer.sh --from-beginning --topic msg --zookeeper 192.168.78.141:2001  ”

如下图:



现在我们来测试一下容错。在 topic 为 msg 中 broker 3 是作为 leader,所以让我们杀了它,

输入命令 “  ps aux|grep config/server_003.properties ” 查看该 broker 的 pid ,输入命令 “ kill -9 39897 ” 程序的强制终止指令,暴力砍掉这个 broker,

如下图:

好了,关于 kafka 分布式消息系统的集群环境的搭建就到此结束了,如果还有什么疑问或遇到什么问题,可以给我留言。
歇后语:“共同学习,共同进步”,也希望大家多多关注CSND的IT社区。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息