文章都可以转载、引用,标明转载出处即可。

kafka 2.0.0 集群配置

Linux服务 Mr.c 856℃ 0评论

  本次实验将部署三个节点(broker)的kafka集群,同时zookeeper也部署三个节点,kafka和zk部署在同一台服务器,由于这两个组件都是java语言,所以只要服务器有jdk环境就可以直接启动。
  关于kafka的介绍这里就不写了,本文将采用普通账户运行zookeeper及kafka ,同时会添加到 systemctl 服务。
基本环境介绍:
 1. 系统版本:CentOS Linux release 7.3.1611 (Core)
 2. 组件版本:zookeeper-3.4.13 , kafka_2.11-2.0.0
官方下载地址:
 kafka https://www.apache.org/dyn/closer.cgi?path=/kafka/2.0.0/kafka_2.11-2.0.0.tgz
 zookeeper http://mirrors.hust.edu.cn/apache/zookeeper/
  zookeeper 官网下载也会让选择国内镜像仓库下载,可以通过华中科大的镜像下载,kafka在官网直接下载即可,注意不要下载到了源码包,要下载Binary downloads 二进制包。
 3. 服务器:
  kafka_1:192.168.8.8
  kafka_2:192.168.8.9
  kafka_3:192.168.8.10
准备工作:
1.关闭selinux服务,关闭iptables及firewalld;
2.三台服务器安装jdk_1.8 ,kafka 2.0版本需要jdk1.8 以上支持;
3.统一约定
  1). kafka及zookeeper 采用同一个普通用户运行
  2). kafka及zookeeper 程序文件位置为 /usr/local/kafka/ ,日志及数据存放到/data/kafka_data 目录

下面操作都在kafka_1 上配置,其他两台参照kafka-1 进行调整即可。
一:zookeeper 集群配置
1.创建运行用户kafka ,设置为禁止登陆

[root@kafka_1 ~]# useradd -M -s /sbin/nologin kafka

2.创建zookeeper 日志及数据存放目录

[root@kafka_1 ~]# mkdir -p /data/kafka_data/{kafka,zookeeper}
[root@kafka_1 ~]# mkdir -p /data/kafka_data/zookeeper/logs

3.修改zoo.cfg 配置

[root@kafka_1 ~]# tar zxvf /root/zookeeper-3.4.13.tar.gz -C /usr/local/kafka/
[root@kafka_1 ~]# cd /usr/local/kafka/zookeeper-3.4.13/conf/
[root@kafka_1 conf]# cp zoo_sample.cfg   zoo.cfg
[root@kafka_1 conf]# vim zoo.cfg
# The number of milliseconds of each tick
tickTime=2000
# The number of ticks that the initial 
# synchronization phase can take
initLimit=10
# The number of ticks that can pass between 
# sending a request and getting an acknowledgement
syncLimit=5

dataDir=/data/kafka_data/zookeeper
dataLogDir=/data/kafka_data/zookeeper/logs
# the port at which the clients will connect
clientPort=2181
# the maximum number of client connections.
# increase this if you need to handle more clients
#maxClientCnxns=60
#
# Be sure to read the maintenance section of the 
# administrator guide before turning on autopurge.
#
# http://zookeeper.apache.org/doc/current/zookeeperAdmin.html#sc_maintenance
#
# The number of snapshots to retain in dataDir
#autopurge.snapRetainCount=3
# Purge task interval in hours
# Set to "0" to disable auto purge feature
#autopurge.purgeInterval=1
server.1=192.168.8.8:2888:3888
server.2=192.168.8.9:2888:3888
server.3=192.168.8.10:2888:3888

  主要修改的地方其实只有dataDir,dataLogDir 以及对应的集群机器IP和通信端口,dataDir 设置到我们定义的目录下。
【server】的配置含义说明:
server.A=B:C:D
 其中 A 是一个数字,表示这个是第几号服务器;
 B 是这个服务器的 ip 地址;
 C 表示的是这个服务器与集群中的 Leader 服务器交换信息的端口;
 D 表示的是如果集群中的 Leader 服务器故障,需要一个端口来重新进行选举,选出一个新的 Leader,而这个端口就是用来执行选举时服务器相互通信的端口。
4. 在dataDir目录下创建ID 文件,该文件指定这是集群中的几号服务器

[root@kafka_1 conf]# echo 1 > /data/kafka_data/zookeeper/myid
[root@kafka_1 conf]# chown kafka.kafka -R /data/kafka_data
[root@kafka_1 conf]# chown kafka.kafka -R /usr/local/kafka/

5.创建systemd 服务启动文件

[root@kafka_1 conf]# vim /etc/systemd/system/zookeeper.service

[Unit]
Description=ZooKeeper Service
Documentation=http://zookeeper.apache.org
Requires=network.target
After=network.target

[Service]
Type=forking
User=kafka
Group=kafka
Environment=ZOO_LOG_DIR=/data/kafka_data/zookeeper/logs
Environment=JAVA_HOME=/usr/java/jdk1.8.0_121
ExecStart=/usr/local/kafka/zookeeper-3.4.13/bin/zkServer.sh start
ExecStop=/usr/local/kafka/zookeeper-3.4.13/bin/zkServer.sh stop
Restart=always

[Install]
WantedBy=default.target

  Environment=ZOO_LOG_DIR 不加的话,zookeeper 的control 日志会因为权限问题普通账户会因为无法写入日志而无法启动
  开始的时候没有加JAVA_HOME 的参数导致无法启动,查看到/data/kafka_data/zookeeper/logs 目录下zookeeper.out 文件有日志,打开文件只有一句:

nohup: failed to run command ‘java’: No such file or directory

应该是服务器普通账号无法拿到java环境,指定JAVA_HOME路径即可正常启动。

[root@kafka_1 conf]# systemctl daemon-reload
[root@kafka_1 conf]# systemctl start zookeeper

  这样即可通过systemctl status zookeeper 查看当前节点服务启动状态,剩下的两台节点参照当前配置,只需要修改dataDir目录下创建myid 为对应服务器即可,三台节点都启动后可以在任意节点上通过zookeeper 命令查看当前机器在集群中的身份:

[root@kafka_1 ~]# /usr/local/kafka/zookeeper-3.4.13/bin/zkServer.sh status
ZooKeeper JMX enabled by default
Using config: /usr/local/kafka/zookeeper-3.4.13/bin/../conf/zoo.cfg
Mode: leader
[root@kafka_2 ~]# /usr/local/kafka/zookeeper-3.4.13/bin/zkServer.sh status
ZooKeeper JMX enabled by default
Using config: /usr/local/kafka/zookeeper-3.4.13/bin/../conf/zoo.cfg
Mode: follower

由此可以看到kafka_1 被选举为了leader 节点,kafka集群就配置完成了。

二:kafka集群配置
1. kafka集群主要是配置文件的修改

[root@kafka_1 ~]# tar zxvf  kafka_2.11-2.0.0.tgz -C /usr/local/kafka/

下面是需要调整修改的参数

[root@kafka_1 ~]# cd /usr/local/kafka/kafka_2.11-2.0.0/config
[root@kafka_1 config]# vim server.properties

broker.id=0
listeners=PLAINTEXT://:9092
advertised.listeners=PLAINTEXT://192.168.8.8:9092
log.dirs=/data/kafka_data/kafka
zookeeper.connect=192.168.8.8:2181,192.168.8.9:2181,192.168.8.10:2181

 当前服务器是kafka_1 ,对应的broker.id 设置为0 ,kafka_2 则设置为1 ,kafka_2 设置为2 ;
 advertised.listeners 是对外宣告的地址,需设置为本机IP地址;
 log.dirs 是kafka文件存储位置,设置为之前约定的目录;
 zookeeper.connect 是连接zookeeper服务器的地址,这里填写上集群内的全部地址。
2. 创建systemd 服务启动文件

[root@kafka_1 config]# vim /etc/systemd/system/kafka.service

[Unit]
Description=Apache Kafka server (broker)
Documentation=http://kafka.apache.org/documentation.html
Requires=network.target remote-fs.target
After=network.target remote-fs.target kafka-zookeeper.service

[Service]
Type=simple
User=kafka
Group=kafka
Environment=JAVA_HOME=/usr/java/jdk1.8.0_121
ExecStart=/usr/local/kafka/kafka_2.11-2.0.0/bin/kafka-server-start.sh /usr/local/kafka/kafka_2.11-2.0.0/config/server.properties
ExecStop=/usr/local/kafka/kafka_2.11-2.0.0/bin/kafka-server-stop.sh

[Install]
WantedBy=multi-user.target

3. 启动kafka

[root@kafka_1 config]# systemctl daemon-reload
[root@kafka_1 config]# systemctl start kafka

查看端口监听情况

[root@kafka_1 config]# netstat -tunlp | grep java
tcp6       0      0 :::9092                 :::*                    LISTEN      4262/java           
tcp6       0      0 :::2181                 :::*                    LISTEN      3205/java           

同理在其余两台节点上配置kafka参数并启动,需要注意的是broker.id 的值不可设置重复。
4. 验证kafka集群
  在kafka_1 机器上创建一个topic ,在kafka_2 上用生产者身份连接该topic ,然后在kafka_3 上用消费者身份 查看topic中的消息;
kafka_1 上创建一个名为cnyunwei的topic

[root@kafka_1 ~]# /usr/local/kafka/kafka_2.11-2.0.0/bin/kafka-topics.sh --create --zookeeper 127.0.0.1:2181 --replication-factor 1 --partitions 1 --topic cnyunwei
Created topic "cnyunwei".

kafka_2 上用生产者模式连接cnyunwei ,并模拟消息发送

[root@kafka_2 ~]# /usr/local/kafka/kafka_2.11-2.0.0/bin/kafka-console-producer.sh --broker-list 127.0.0.1:9092 --topic cnyunwei
>www.cnyunwei.cc
>www.cnops.xyz
>

kafka_3 上用消费者模式连接cnyunwei 进行消息查看

[root@kafka_3 config]# /usr/local/kafka/kafka_2.11-2.0.0/bin/kafka-console-consumer.sh --bootstrap-server 127.0.0.1:9092 --topic cnyunwei --from-beginning
www.cnyunwei.cc
www.cnops.xyz

到此kafka 2.0 版本集群就搭建完成了。

转载请注明:菜鸟运维 » kafka 2.0.0 集群配置

喜欢 (0)
发表我的评论
取消评论

表情

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址
(2)个小伙伴在吐槽
  1. 友链互换吗? 名称:每日运维 地址:https://linux365.cn/ 描述:Linux运维相关个人博客 已在本站添加贵站友链
    每日运维2018-12-13 17:29 回复
  2. 写的很好,很喜欢 :mrgreen:
    文娱帝国2019-03-30 13:14 回复