环境基于docker搭建,3个zookeeper节点,3个kafka节点
step1, 创建docker网络
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 |
step1. 创建配置文件zoo.cfg
不同的node只需要修改clientPort和myid
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集群
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
#docker exec -it zookeeper1 bash
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
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
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
step1. 制作kafka镜像
首先下载jdk-8u191-linux-x64.tar.gz,kafka_2.11-2.0.0.tgz,这两个直接去官网下载就好了
然后编写Dockerfile
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镜像
docker build -t kafka:2.0.0-11 .
step2. 配置文件server.properties,只有broker.id不同
# 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集群
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
创建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