本实验参照官网http://kafka.apache.org/documentation/ 构建,为后续了解kafka应用做环境准备。
搭建环境:
- MAC10.15
- docker 19.03.4
- docker-compose version 1.24.1
- jdk1.8以上(对于kafka2.x以上版本已遗弃对jdk1.7的支持)
- zookeeper-3.4.14(这里没使用kafka自带zk,而使用外置zk,这里zk依旧是部署在docker中,关于这块可通过其它板块了解)
- kafka2.x以上版本(我是通过下载tar包部署安装下载地址:http://kafka.apache.org/downloads选择指定版本)
如果对docker没什么大体概念,可百度,google一下,后续会提供对docker一些基本常规认知。
整体步骤:
1:先构建kafka镜像文件,这里我通过Dockerfile文件自身构建(也可采用docker官方标准镜像包),Dockerfile文件如下所示
##使用jdk1.8
FROM java1.8/v1
MAINTAINE xxx xxx@163.com
##当前kafka版本
ARG kafka_version="kafka_2.12-2.3.0"
##新建kafka用户
RUN groupadd -r kafka && useradd -r -g kafka kafka
##暴露9200端口
EXPOSE 9092
WORKDIR /usr/local/software/kafka
###将当前目录下kafka tar包copy到docker容器中
COPY $kafka_version.tgz /usr/local/software/kafka/$kafka_version.tgz
RUN mkdir data logs
RUN tar -vxf $kafka_version.tgz && rm -rf $kafka_version.tgz
##删除配置文件 将配置文件
RUN rm -rf $kafka_version/config/*
##将software目录赋予到es用户
RUN chown -R kafka:kafka /usr/local/software
USER kafka
ENV PATH /usr/local/software/kafka/$kafka_version/bin:$PATH
##启动kafka
CMD ["kafka-server-start.sh","/usr/local/software/kafka/kafka_2.12-2.3.0/config/server.properties"]
通过执行构建docker build命令,构建kafka image。
在当前目录中执行docker build -t kafka/v1 .
通过docker images 验证是否存在名为kafka/v1 版本为latest的image
2:在同目录下构建 docker-compose.yml 文件
version: '3'
services:
kafka_node1:
##构建镜像名 kafka/v1 latest版本号
image: kafka/v1:latest
##启动容器名称
container_name: kafka_node1
restart: always
dns_search: .
cap_drop:
- ALL
cap_add:
- CHOWN
- DAC_OVERRIDE
- SETGID
- SETUID
##容器内目录外挂到本地磁盘中
volumes:
- /Users/haizhi/Desktop/software/df/kafka/data/node1:/usr/local/software/kafka/data
- /Users/haizhi/Desktop/software/df/kafka/config/node1:/usr/local/software/kafka/kafka_2.12-2.3.0/config
##容器端口映射到主机端口
ports:
- 127.0.0.1:9092:9092
##使用网络
networks:
- kafka
kafka_node2:
image: kafka/v1:latest
container_name: kafka_node2
restart: always
dns_search: .
cap_drop:
- ALL
cap_add:
- CHOWN
- DAC_OVERRIDE
- SETGID
- SETUID
volumes:
- /Users/haizhi/Desktop/software/df/kafka/data/node2:/usr/local/software/kafka/data
- /Users/haizhi/Desktop/software/df/kafka/config/node2:/usr/local/software/kafka/kafka_2.12-2.3.0/config
ports:
- 127.0.0.1:9093:9092
networks:
- kafka
kafka_node3:
image: kafka/v1:latest
container_name: kafka_node3
restart: always
dns_search: .
cap_drop:
- ALL
cap_add:
- CHOWN
- DAC_OVERRIDE
- SETGID
- SETUID
volumes:
- /Users/haizhi/Desktop/software/df/kafka/data/node3:/usr/local/software/kafka/data
- /Users/haizhi/Desktop/software/df/kafka/config/node3:/usr/local/software/kafka/kafka_2.12-2.3.0/config
ports:
- 127.0.0.1:9094:9092
networks:
- kafka
networks:
kafka:
##自动构建名为kafka_kafka网络
external: false
虽是伪分布式环境,但是通过docker容器化部署,可以最大程度模拟为分布式部署。
为了将kafka各节点配置文件及数据外置化,如docker-compose.yml中描述,我在指定目录中构建data,config目录,总体目录结构如下
--kafka
--data
--node1
--node2
--node3
--config
--node1
--对应各config文件
--node2
--对应各config文件
--node3
--对应各config文件
3:解压kafka安装包将config下各配置文件copy到依照上述目录结构中各config下node中,如下图所示:

4:修改各node节点中server.properties
##设置当前broker唯一id 不同node broker不同
broker.id=0
##设置侦听器列表uri和端口号,多个以逗号隔开
listeners=127.0.0.1://:9092
##kafka broker用于接收消费者生产者的请求并返回数据的线程数 默认为3 可根据生产环境进行调配
num.network.threads=3
##服务器用于接受io请求线程数据 包含写入磁盘io请求
num.io.threads=8
##socket发送最大内容数
socket.send.buffer.bytes=102400
##socket接收最大内容数
socket.receive.buffer.bytes=102400
##设置ISR 最小同步副本数 必须保证ISR列表中节点存活数大于此值否则集群不可用
min.insync.replicas=1
##消息落地磁盘目录
log.dirs=/usr/local/software/kafka/data
##默认分区数 topic构建不指定分区数据的化默认为1
num.partitions=1
##
num.recovery.threads.per.data.dir=1
offsets.topic.replication.factor=1
transaction.state.log.replication.factor=1
transaction.state.log.min.isr=1
##消息数据从内存缓存中刷新到磁盘数量的阀值 可依照生产环境或实际应用需求调整
log.flush.interval.messages=100
##消息数据从内存缓存中刷新到磁盘时间的阀值 默认为1s 可依照生产环境或实际应用需求调整
##如果设置过大,可能存在丢失数据 如果设置过小 导致性能问题
log.flush.interval.ms=1000
##默认数据存在7天 也可指定消息磁盘大小(可不配置)
log.retention.hours=168
log.retention.bytes=-1
##每个topic中每个partition中segment自动切割大小
##超过此值文件自动切割
log.segment.bytes=1073741824
##设置zk连接 多个host以逗号隔开
## host.docker.internal 是mac系统 docker容器访问主机要通过host.docker.internal方式
##非mac系统不需要
zookeeper.connect=host.docker.internal:2181
##kafka连接zk超时时间
zookeeper.connection.timeout.ms=6000
group.initial.rebalance.delay.ms=0
5:目前目录完整结构

在当前目录执行 docker-compose up -d 设置为后台启动
使用docker ps 查看启动完成

完整资料在github中
527



被折叠的 条评论
为什么被折叠?



