前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >基于Docker的Kafka高可用集群搭建

基于Docker的Kafka高可用集群搭建

作者头像
yingzi_code
发布2019-08-31 12:39:11
8860
发布2019-08-31 12:39:11
举报
文章被收录于专栏:生活不止眼前的代码
Kafka高可用集群搭建

环境基于docker搭建,3个zookeeper节点,3个kafka节点

1 整体环境规划

step1, 创建docker网络

代码语言:javascript
复制
docker network create --subnet=192.168.200.0/24 net_kafka

host

ip

port

remark

zookeeper1

192.168.200.11

12181

zookeeper集群node1

zookeeper2

192.168.200.12

12182

zookeeper集群node2

zookeeper3

192.168.200.13

12183

zookeeper集群node2

kafka1

192.168.200.21

9092

kafka2

192.168.200.22

9092

kafka3

192.168.200.23

9092

2 zookeeper集群搭建

step1. 创建配置文件zoo.cfg

不同的node只需要修改clientPort和myid

代码语言:javascript
复制
clientPort=12181
dataDir=/data
dataLogDir=/datalog
tickTime=2000
initLimit=5
syncLimit=2
autopurge.snapRetainCount=3
autopurge.purgeInterval=0
maxClientCnxns=60
server.1=192.168.200.11:2888:3888
server.2=192.168.200.12:2888:3888
server.3=192.168.200.13:2888:3888
myid=1

step2. 启动zookeeper的docker集群

代码语言:javascript
复制
docker run -p 12181:12181 --name zookeeper1 --hostname=zookeeper1 --net=net_kafka --ip=192.168.200.11 -v /home/mt/zookeeper/zookeeper1/zoo.cfg:/conf/zoo.cfg -v /home/mt/zookeeper/zookeeper1:/home/zookeeper -d zookeeper:3.4.13

docker run -p 12182:12182 --name zookeeper2 --hostname=zookeeper2 --net=net_kafka --ip=192.168.200.12 -v /home/mt/zookeeper/zookeeper2/zoo.cfg:/conf/zoo.cfg -v /home/mt/zookeeper/zookeeper2:/home/zookeeper -d zookeeper:3.4.13

docker run -p 12183:12183 --name zookeeper3 --hostname=zookeeper3 --net=net_kafka --ip=192.168.200.13 -v /home/mt/zookeeper/zookeeper3/zoo.cfg:/conf/zoo.cfg -v /home/mt/zookeeper/zookeeper3:/home/zookeeper -d zookeeper:3.4.13

step3. 进入一个zookeeper节点,查看节点情况,可以看到node2为leader

代码语言:javascript
复制
#docker exec -it zookeeper1 bash
代码语言:javascript
复制
bash-4.4# echo stat | nc 192.168.200.11 12181
Zookeeper version: 3.4.13-2d71af4dbe22557fda74f9a9b4309b15a7487f03, built on 06/29/2018 04:05 GMT
Clients:
 /192.168.200.11:56780[1](queued=0,recved=40266,sent=40266)
 /47.106.9.199:49042[1](queued=0,recved=392,sent=393)
 /192.168.200.11:34834[0](queued=0,recved=1,sent=0)

Latency min/avg/max: 0/0/58
Received: 65943
Sent: 65946
Connections: 3
Outstanding: 0
Zxid: 0x1000001e2
Mode: follower
Node count: 142
代码语言:javascript
复制
bash-4.4# echo stat | nc 192.168.200.12 12182
Zookeeper version: 3.4.13-2d71af4dbe22557fda74f9a9b4309b15a7487f03, built on 06/29/2018 04:05 GMT
Clients:
 /192.168.200.11:39552[0](queued=0,recved=1,sent=0)

Latency min/avg/max: 0/0/22
Received: 90621
Sent: 90639
Connections: 1
Outstanding: 0
Zxid: 0x1000001e2
Mode: leader
Node count: 142
Proposal sizes last/min/max: 36/32/574
代码语言:javascript
复制
bash-4.4# echo stat | nc 192.168.200.13 12183
Zookeeper version: 3.4.13-2d71af4dbe22557fda74f9a9b4309b15a7487f03, built on 06/29/2018 04:05 GMT
Clients:
 /192.168.200.11:33338[0](queued=0,recved=1,sent=0)

Latency min/avg/max: 0/3/39
Received: 55
Sent: 54
Connections: 1
Outstanding: 0
Zxid: 0x1000001e2
Mode: follower
Node count: 142
3 kafka集群搭建

step1. 制作kafka镜像

首先下载jdk-8u191-linux-x64.tar.gz,kafka_2.11-2.0.0.tgz,这两个直接去官网下载就好了

然后编写Dockerfile

代码语言:javascript
复制
FROM centos:7.2.1511
LABEL description="Build Kafka Image"
RUN mkdir /usr/java
COPY jdk-8u191-linux-x64.tar.gz /usr/java/
RUN tar -xzf /usr/java/jdk-8u191-linux-x64.tar.gz  -C /usr/java/ \
    && rm -f /usr/java/jdk-8u191-linux-x64.tar.gz  \
    && ln -s /usr/java/jdk1.8.0_191/ /usr/java/default \
    && ln -s /usr/java/default/bin/java /usr/bin/java   
COPY kafka_2.11-2.0.0.tgz /usr/local/
RUN tar -xzf /usr/local/kafka_2.11-2.0.0.tgz -C /usr/local/ \
    && rm -f /usr/local/kafka_2.11-2.0.0.tgz \
    && ln -s /usr/local/kafka_2.11-2.0.0/ /usr/local/kafka      
#定义Kafaka目录目录
ENV KAFKA_DIR /usr/local/kafka
RUN chmod a+x $KAFKA_DIR/bin/kafka-server-start.sh
WORKDIR /usr/local/kafka/bin
CMD ["pwd"]
CMD ["sh", "kafka-server-start.sh", "../config/server.properties"]

构建docker镜像

代码语言:javascript
复制
docker build -t kafka:2.0.0-11 .

step2. 配置文件server.properties,只有broker.id不同

代码语言:javascript
复制
# broker id,用于标识kafka实例,每个broker应该使用不同的id标识
broker.id=1

# 收发网络请求的线程数量
num.network.threads=3

# 处理请求的线程数量
num.io.threads=8

# 发送数据的buffer大小
socket.send.buffer.bytes=102400

# 接收数据socket的buffer大小
socket.receive.buffer.bytes=102400

# socket请求的最大数值,防止serverOOM,message.max.bytes必然要小于socket.request.max.bytes,会被topic创建时的指定参数覆盖
socket.request.max.bytes=104857600

# 日志文件的地址
log.dirs=/tmp/kafka-logs

# 每个topic的分区个数,若是在topic创建时候没有指定的话会被topic创建时的指定参数覆盖
num.partitions=1

# 每个数据目录用来日志恢复的线程数目
num.recovery.threads.per.data.dir=1

# topic的offset的备份份数。建议设置更高的数字保证更高的可用性
offsets.topic.replication.factor=1
# 事务主题的复制因子(设置更高以确保可用性)。 内部主题创建将失败,直到群集大小满足此复制因素要求。
transaction.state.log.replication.factor=1
#	覆盖事务主题的min.insync.replicas配置。
transaction.state.log.min.isr=1

# 每个日志文件删除之前保存的时间,单位小时。默认数据保存时间对所有topic都一样。log.retention.minutes 和 log.retention.bytes 都是用来设置删除日志文件的,如果达到任意一个条件的限制,都会进行删除。这个属性设置可以在topic基本设置时进行覆盖
log.retention.hours=168

# topic 分区的日志存放在某个目录下诸多文件中,这些文件将partition的日志切分成一段一段的,这就是段文件(segment file);一个topic的一个分区对应的所有segment文件称为log。这个设置控制着一个segment文件的最大的大小,如果超过了此大小,就会生成一个新的segment文件。此配置可以被覆盖。 int
log.segment.bytes=1073741824

# 检查日志段文件的间隔时间,以确定是否文件属性是否到达删除要求
log.retention.check.interval.ms=300000

############################# Zookeeper #############################

# ZooKeeper连接字符串的格式为:hostname1:port1, hostname2:port2, hostname3:port3
zookeeper.connect=47.106.184.109:12181,47.106.184.109:12182,47.106.184.109:12183

# 连接到ZK server的超时时间,没有配置就使用zookeeper.session.timeout.ms
zookeeper.connection.timeout.ms=6000

#在执行第一次再平衡之前,group协调员将等待更多消费者加入group的时间。 延迟时间越长意味着重新平衡的可能性越小,但是等待处理开始的时间增加
group.initial.rebalance.delay.ms=0

step3. 启动kafka集群

代码语言:javascript
复制
docker run -dit -m 512m -p 9092:9092 --net=net_kafka --ip=192.168.200.21 --name kafka1 -v /home/mt/kafka/kafka1/config:/usr/local/kafka_2.11-2.0.0/config -v /home/mt/kafka/kafka1/logs:/usr/local/kafka_2.11-2.0.0/logs kafka:2.0.0-11

docker run -dit -m 512m -p 9092:9092 --net=net_kafka --ip=192.168.200.22 --name kafka2 -v /home/mt/kafka/kafka2/config:/usr/local/kafka_2.11-2.0.0/config -v /home/mt/kafka/kafka2/logs:/usr/local/kafka_2.11-2.0.0/logs kafka:2.0.0-11

docker run -dit -m 512m -p 9092:9092 --net=net_kafka --ip=192.168.200.23 --name kafka3 -v /home/mt/kafka/kafka3/config:/usr/local/kafka_2.11-2.0.0/config -v /home/mt/kafka/kafka3/logs:/usr/local/kafka_2.11-2.0.0/logs kafka:2.0.0-11
4 kafka的使用
代码语言:javascript
复制
创建topic
./kafka-topics.sh --create --zookeeper 47.106.184.109:12181 --replication-factor 1 --partitions 1 --topic test
#replication-factor 表示该topic需要在不同的broker中保存几份, partitions为几个分区

查看已经创建的topic
./kafka-topics.sh --list --zookeeper 47.106.184.109:12181 

查看指定topic详情
./kafka-topics.sh --zookeeper 47.106.184.109:12181 --topic test --describe

创建消费者
./kafka-console-consumer.sh --bootstrap-server 192.168.200.21:9092,192.168.200.22:9092,192.168.200.23:9092 --topic test --from-beginning

创建一个消息生产者
./kafka-console-producer.sh --broker-list 192.168.200.21:9092,192.168.200.22:9092,192.168.200.23:9092 --topic test
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2018年10月30日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Kafka高可用集群搭建
    • 1 整体环境规划
      • 2 zookeeper集群搭建
        • 3 kafka集群搭建
          • 4 kafka的使用
          相关产品与服务
          容器服务
          腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
          领券
          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档