docker-compose 搭建 kafka 集群

摘要:
KAFKA端口:-9002:9093KAFKA_LOG_DIRS:image:-9004:KAFKA_BROKER_ID:3KAFKA_ZOOKEEPER_CONNECT:9094KAFKA_LISTENERS://0.0.0.0:/data/KAFKA数据重启:

环境准备

kafka依赖zookeeper,所以搭建kafka需要先配置zookeeper。网格信息如下:

zookeeper192.168.56.101:2181
kafka1192.168.56.101:9092
kafka2192.168.56.101:9093
kafka3192.168.56.101:9094

开始搭建

1、安装 docker-compose

curl -L http://mirror.azure.cn/docker-toolbox/linux/compose/1.25.4/docker-compose-Linux-x86_64 -o /usr/local/bin/docker-compose

chmod +x /usr/local/bin/docker-compose

2、创建 docker-compose.yaml 文件 

version: '3.3'
services:
  zookeeper:
    image: wurstmeister/zookeeper
    container_name: zookeeper
    ports:
      - 2181:2181
    volumes:
      - /data/zookeeper/data:/data
      - /data/zookeeper/datalog:/datalog
      - /data/zookeeper/logs:/logs
    restart: always
  kafka1:
    image: wurstmeister/kafka
    depends_on:
      - zookeeper
    container_name: kafka1
    ports:
      - 9092:9092
    environment:
      KAFKA_BROKER_ID: 1
      KAFKA_ZOOKEEPER_CONNECT: 192.168.56.101:2181
      KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://192.168.56.101:9092
      KAFKA_LISTENERS: PLAINTEXT://0.0.0.0:9092
      KAFKA_LOG_DIRS: /data/kafka-data
      KAFKA_LOG_RETENTION_HOURS: 24
    volumes:
      - /data/kafka1/data:/data/kafka-data
    restart: unless-stopped  
  kafka2:
    image: wurstmeister/kafka
    depends_on:
      - zookeeper
    container_name: kafka2
    ports:
      - 9093:9093
    environment:
      KAFKA_BROKER_ID: 2
      KAFKA_ZOOKEEPER_CONNECT: 192.168.56.101:2181
      KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://192.168.56.101:9093
      KAFKA_LISTENERS: PLAINTEXT://0.0.0.0:9093
      KAFKA_LOG_DIRS: /data/kafka-data
      KAFKA_LOG_RETENTION_HOURS: 24
    volumes:
      - /data/kafka2/data:/data/kafka-data
    restart: unless-stopped
  kafka3:
    image: wurstmeister/kafka
    depends_on:
      - zookeeper
    container_name: kafka3
    ports:
      - 9094:9094
    environment:
      KAFKA_BROKER_ID: 3
      KAFKA_ZOOKEEPER_CONNECT: 192.168.56.101:2181
      KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://192.168.56.101:9094
      KAFKA_LISTENERS: PLAINTEXT://0.0.0.0:9094
      KAFKA_LOG_DIRS: /data/kafka-data
      KAFKA_LOG_RETENTION_HOURS: 24
    volumes:
      - /data/kafka3/data:/data/kafka-data
    restart: unless-stopped

参数说明:

  • KAFKA_ZOOKEEPER_CONNECT: zookeeper服务地址
  • KAFKA_ADVERTISED_LISTENERS: kafka服务地址
  • KAFKA_BROKER_ID: kafka节点ID,不可重复
  • KAFKA_LOG_DIRS: kafka数据文件地址(非必选。下面的volumes会将容器内文件挂载到宿主机上)
  • KAFKA_LOG_RETENTION_HOURS: 数据文件保留时间(非必选。缺省168小时)

3、启动

docker-compose up -d

4、查看启动的容器:docker-compose ps

docker-compose 搭建 kafka 集群第1张

出现如上结果表示启动正常~

测试

1、登录到 kafka1 容器内

docker-compose exec kafka1 bash

docker-compose 搭建 kafka 集群第2张

2、在/opt/kafka/config下可以看到配置文件(最主要的是server.properties)

docker-compose 搭建 kafka 集群第3张

3、切到 /opt/kakfa/bin 目录下

cd /opt/kafka/bin/ 

4、创建一个 topic:名称为first,3个分区,2个副本

./kafka-topics.sh --create --topic first --zookeeper 192.168.56.101:2181 --partitions 3 --replication-factor 2

docker-compose 搭建 kafka 集群第4张

注意:副本数不能超过brokers数(分区是可以超过的),否则会创建失败。

5、查看 topic 列表

./kafka-topics.sh --list --zookeeper 192.168.56.101:2181 

docker-compose 搭建 kafka 集群第5张

6、查看 topic 为 first 的详情

./kafka-topics.sh --describe --topic first --zookeeper 192.168.56.101:2181

docker-compose 搭建 kafka 集群第6张

7、在宿主机上,切到 /data/kafka1/data下,可以看到topic的数据

docker-compose 搭建 kafka 集群第7张

 说明:

  • 数据文件名称组成:topic名称_分区号
  • 由于是3个分区+两个副本,所有会生成6个数据文件,不重复的分摊到3台borker上(查看kafka2和kafka3目录下可验证)

8、创建一个生产者,向 topic 中发送消息

./kafka-console-producer.sh --topic first --broker-list 192.168.56.101:9092 

docker-compose 搭建 kafka 集群第8张

9、登录到 kafka2 或者 kafka3 容器内(参考第1步),然后创建一个消费者,接收 topic 中的消息

./kafka-console-consumer.sh --topic first --bootstrap-server 192.168.56.101:9092 --from-beginning

docker-compose 搭建 kafka 集群第9张

注意:--from-beginning表示从最开始读消息,不加该参数则根据最大offset读(从最新消息开始读取)

其它命令

1、删除topic

./kafka-topics.sh --delete --topic first --zookeeper 192.168.56.101:2181

docker-compose 搭建 kafka 集群第10张

删除topic,不会立马删除,而是会先给该topic打一个标记。在/data/kafka1/data下可以看到:

docker-compose 搭建 kafka 集群第11张

 2、查看某个topic对应的消息数量

./kafka-run-class.sh  kafka.tools.GetOffsetShell --topic second --time -1 --broker-list 192.168.56.101:9092

3、查看所有消费者组

./kafka-consumer-groups.sh --bootstrap-server 192.168.56.101:9092 --list

4、查看日志文件内容(消息内容)

./kafka-dump-log.sh --files /data/kafka-data/my-topic-0/00000000000000000000.log --print-data-log

查看topic=my-topic的消息,日志文件为00000.log,--print-data-log表示查看消息内容(不加不会显示消息内容)

docker-compose 搭建 kafka 集群第12张

5、修改kafka对应topic分区数(只能增加,不能减少)

./kafka-topics.sh --alter --topic al-test --partitions 2 --zookeeper 192.168.56.101:2181

docker-compose 搭建 kafka 集群第13张

6、修改kafka对应topic数据的保存时长(可以查看server.properties文件中log.retention.hours配置,默认168小时) 

./kafka-topics.sh --alter --zookeeper 192.168.56.101:2181 --topic al-test --config retention.ms=86400000

这里是改为24小时=24*3600*1000

docker-compose 搭建 kafka 集群第14张 

总结

1、连接信息

producer     -->     broker-list
kafka集群   -->     zookeeper
consumer   -->     bootstrap-server 或 zookeeper

0.9版本以前,consumer是连向zookeeper,0.9版本以后,默认连接bootstrap-server

2、docker-compose.yaml配置文件,kafka.environment下的配置项,是对应server.properties文件下的配置的:

    borker.id   -->   KAFKA_BORKER_ID

    log.dirs     -->   KAFKA_LOG_DIRS

踩坑

1、修改docker-compose.yaml配置文件后,up启动失败,使用docker-compose logs 命令查看日志,包错:

The broker is trying to join the wrong cluster. Configured zookeeper.connect may be wrong.

解决办法:删除宿主机上kafka挂载的数据文件(/data目录下),然后docker-compose down,最后再up

  

免责声明:文章转载自《docker-compose 搭建 kafka 集群》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇Nginx二级域名及多Server反向代理配置js中bind、call、apply函数的用法下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

Kafka 简介梳理

个人在学习Kafka , 这两天在看官方文档。 看完了简介部分,看完做个小总结。看看官方是怎么夸Kafka的。 三大特性 发布-订阅 持久化存储 低延迟的实时处理 特性梳理 Topic : 逻辑概念,承载数据的实体 数据的保存期限可以设置 磁盘是顺序读写,IO不是瓶颈 可以处理大数据量数据,且不损失性能 数据存储, 数据不丢失 可以重复消费 各消费...

Centos 7 配置邮件发送

一、环境   系统:centos 7   sendmail:sendmail.x86_64 0:8.14.7-5.el7   mailx版本:mailx-12.5-19.el7.x86_64 二、软件安装:   1、安装 sendmail     #: yum -y install sendmail   2、安装mailx     # yum -y ins...

go 安装

推荐安装包安装,只需要6步 wget https://storage.googleapis.com/golang/go1.7.4.linux-amd64.tar.gztar zxvf go1.7.4.linux-amd64.tar.gz vim /etc/profile 文件最下面添加两行代码   export GOROOT=/usr/local/go...

Linux命令--查看磁盘空间

今天用“web发布平台”发布测试的服务,两个节点中发现有一个节点没有发布成功,压测TPS始终上不去,排查后发现只有一个节点在打日志,另一个节点的服务进程都没有在运行,由此断定应该是没有发布成功,有点坑的是发布平台上的发布记录是SUCCESS的,打开发布日志后才看到有一个节点是发布失败的。从错误日志中发现报错的关键字“IO”,应该就是磁盘空间满了造成的,查看...

linux下mysql的安装与使用

一、mysql的安装 之前搭建linux下项目的发布,最后遗留的问题时数据库的迁移,如何从windows上迁移到linux上?这里首先进行mysql数据库的安装 1、下载mysql安装包 在这里下载的是如下版本的mysql https://cdn.mysql.com//Downloads/MySQL-5.7/mysql-5.7.26-linux-glibc...

Python 2.75升级3.6.3

https://blog.csdn.net/wwwdaan5com/article/details/78218277 Centos 7 默认yum安装python 是2.7.5, (网上看了很多升级都是错的 导致python混乱,导致yum坏了,本人还重装了yum:http://www.cnblogs.com/eason-d/p/8608180.html)...