kafka+zookeeper 高可用部署

操作流程

基础环境准备

名称版本获取方式
jdkjdk-8u181-linux-x64.rpmhttps://www.oracle.com/java/technologies/downloads/#jdk17-linux
zookeeperzookeeper-3.4.14.tar.gzhttp://archive.apache.org/dist/zookeeper
kafkakafka_2.12-2.5.0.tgzhttps://mirrors.tuna.tsinghua.edu.cn/apache/kafka

zookeeper目录一览

zookeeper目录
zookeeper/app/zookeeper/
数据/app/zookeeper/data
日志/app/zookeeper/logs
配置文件/usr/local/zookeeper/conf/zoo.cfg
节点标识/app/zookeeper/data/myid

ZooKeeper常用配置项说明

header 1header 2说明
tickTimeCS通信心跳间隔服务器之间或客户端与服务器之间维持心跳的时间间隔,也就是每间隔 tickTime 时间就会发送一个心跳。tickTime以毫秒为单位
initLimitLF初始通信时限集群中的follower服务器(F)与leader服务器(L)之间初始连接时能容忍的最多心跳数
syncLimitLF同步通信时限集群中的follower服务器与leader服务器之间请求和应答之间能容忍的最多心跳数
dataDir数据文件目录Zookeeper保存数据的目录,默认情况下,Zookeeper将写数据的日志文件也保存在这个目录里
dataLogDir日志文件目录Zookeeper保存日志文件的目录
clientPort客户端连接端口客户端连接 Zookeeper 服务器的端口,Zookeeper 会监听这个端口,接受客户端的访问请求
server.N服务器名称与地址从N开始依次为:服务编号、服务地址、LF通信端口、选举端口;例如:server.1=10.0.0.162:2888:3888

kafka架构

在kafka集群(cluster)中,一个kafka节点就是一个broker,消息由Topic来承载,可以存储在一个或多个Partition中。发布消息的应用为Producer,消费消息的应用为Consumer,多个Consumer可以促成Consumer Group共同消费一个Topic中的消息

概念/对象简单说明
Brokerkafka节点
Topic主题,用来承载消息
Partition分区,用于主题分片存储
Producer生产者,向主题发布消息的应用
Consumer消费者,从主题订阅消息的应用
Consumer Group消费者组,由多个消费者组成

java部署

rpm -ivh jdk-8u221-linux-x64.rpm
java -version

zookeeper集群部署

!!!!! 三个节点都部署

// 创建zookeeper相关目录
mkdir /app/zookeeper/{data,logs} -p

// 将下载好的zookeeper解压
tar xf zookeeper-3.4.14.tar.gz -C /usr/local/
ln -s /usr/local/zookeeper-3.4.14/ /usr/local/zookeeper

// 配置环境变量
vim /etc/profile
export ZOOKEEPER_HOME=/usr/local/zookeeper
export PATH=$ZOOKEEPER_HOME/bin:$PATH

// 使环境变量生效
source /etc/profile

zookeeper配置

// zookeeper基础配置
cd /usr/local/zookeeper/conf
mv zoo_sample.cfg zoo_sample.cfg_bak

// 新生成配置文件
vim zoo.cfg
tickTime=2000
initLimit=10
syncLimit=5
dataDir=/app/zookeeper/data
dataLogDir=/app/zookeeper/logs
clientPort=2181
server.1=192.168.122.10:2888:3888
server.2=192.168.122.11:2888:3888
server.3=192.168.122.12:2888:3888


// 配置节点标识:
zk01:
echo "1" >/app/zookeeper/data/myid

zk02
echo "2" >/app/zookeeper/data/myid

zk03
echo "3" >/app/zookeeper/data/myid


// 关闭防火墙
systemctl stop firewalld
systemctl disable firewalld

// 防火墙设置 
firewall-cmd --add-port=2181/tcp --permanent
firewall-cmd --add-port=2888/tcp --permanent
firewall-cmd --add-port=3888/tcp --permanent
#重新加载防火墙配置
firewall-cmd --reload

zookeeper启动

// 进入zookeeper的bin目录
cd /usr/local/zookeeper/bin/
sh zkServer.sh start

// 出现以下字样表示启动成功
ZooKeeper JMX enabled by default
Using config: /usr/zookeeper/zookeeper/bin/../conf/zoo.cfg
Starting zookeeper ... STARTED

zookeeper集群查看&连接测试

// 查看节点状态
sh zkServer.sh status

// 状态信息
ZooKeeper JMX enabled by default
Using config: /usr/zookeeper/zookeeper/bin/../conf/zoo.cfg
Mode: follower
// 如果为领导者节点则Mode:leader

//  客户端连接测试
#这里随机选其中一个节点作为客户端连接其他节点即可
sh zkCli.sh -server 192.168.122.11:2181

// 正常连接后会进入ZooKeeper命令行,显示如下:
[zk: 192.168.122.11:2181(CONNECTED) 0] 

// 输入命令测试:
[zk: 192.168.122.11:2181(CONNECTED) 0] ls /
[zookeeper]

kafka集群部署

!!! 所有节点
// 创建kafka数据目录
mkdir -p /app/kafka/logs
chmod 777 -R /app/kafka

// 将下载好的kafka解压
tar xf kafka_2.12-2.5.0.tgz -C /usr/local/
ln -s /usr/local/kafka_2.12-2.5.0/ /usr/local/kafka

kafka配置

!!! 所有节点
cd /usr/local/kafka

vim config/server.properties
// 配置日志目录,指定zookeeper服务器
# A comma separated list of directories under which to store log files
log.dirs=/app/kafka/logs

# root directory for all kafka znodes.
zookeeper.connect=10.0.0.11:2181,10.0.0.12:2181,10.0.0.13:2181

!!! 分节点配置
vim /usr/local/kafka/config/server.properties

// kafka-01 节点
broker.id=0
#listeners=PLAINTEXT://:9092
listeners=PLAINTEXT://192.168.122.10:9092


// kafka-02 节点
broker.id=1
#listeners=PLAINTEXT://:9092
listeners=PLAINTEXT://192.168.122.11:9092

// kafka-03 节点
broker.id=2
#listeners=PLAINTEXT://:9092
listeners=PLAINTEXT://192.168.122.12:9092


// 防火墙 (关闭/策略)
systemctl stop firewalld
systemctl disable firewalld

// 开放端口
firewall-cmd --add-port=9092/tcp --permanent
firewall-cmd --reload

kafka启动

cd /usr/local/kafka/
./bin/kafka-server-start.sh config/server.properties &

// 启动成功后输出示例(最后几行)
[2020-01-02 15:30:36,944] INFO Kafka version: 2.3.0 (org.apache.kafka.common.utils.AppInfoParser)
[2020-01-02 15:30:36,945] INFO Kafka commitId: fc1aaa116b661c8a (org.apache.kafka.common.utils.AppInfoParser)
[2020-01-02 15:30:36,945] INFO Kafka startTimeMs: 1577950236938 (org.apache.kafka.common.utils.AppInfoParser)
[2020-01-02 15:30:36,946] INFO [KafkaServer id=0] started (kafka.server.KafkaServer)

kafka测试

// 创建topic
在kafka-01(Broker)上创建测试Tpoic:test-ken-io,这里我们指定了3个副本、1个分区
/usr/local/kafka/bin/kafka-topics.sh --create --bootstrap-server 192.168.122.10:9092 --replication-factor 3 --partitions 1 --topic test-ken-io

// 查看topic
我们可以通过命令列出指定Broker的
/usr/local/kafka/bin/kafka-topics.sh --list --bootstrap-server 192.168.122.10:9092

// 发送消息
这里我们在broker-01的topic=test-ken-io发送消息
/usr/local/kafka/bin/kafka-console-producer.sh --broker-list   192.168.122.10:9092  --topic test-ken-io
#消息内容
> test by ken.io

// 消费消息
在kafka-02上消费broker-03的消息
bin/kafka-console-consumer.sh --bootstrap-server 192.168.122.12:9092 --topic test-ken-io --from-beginning

// 在kafka-03上消费broker-02的消息
bin/kafka-console-consumer.sh --bootstrap-server 192.168.122.11:9092 --topic test-ken-io --from-beginning

然后均能收到消息
test by ken.io

这是因为两个消费消息的命令是经历了两个不通的Consumer
如果我们启动Consumer指定Consumer Group id就可以作为一个消费组协同工,1个消息同时只能呗一个Consumer消费到
bin/kafka-console-consumer.sh --bootstrap-server 192.168.122.12:9092 --topic test-ken-io --from-beginning --group testgroup_ken
bin/kafka-console-consumer.sh --bootstrap-server 192.168.122.11:9092 --topic test-ken-io --from-beginning --group testgroup_ken

// 删除topic
#./bin/kafka-topics --delete --zookeeper 【zookeeper server:port】 --topic 【topic name】
./bin/kafka-topics.sh --delete --zookeeper 192.168.122.11:2181 --topic test-ken-io

// 删除topic可参考
https://blog.csdn.net/belalds/article/details/80575751
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值