Kafka入门实战教程(2)基于Docker搭建Kafka环境
1 准备工作
这里我们使用一台Linux CentOS系统的服务器来模拟三个Kafka Broker的伪集群(即一台server上开三个不同端口)环境用于学习测试,大概的准备工作有两个:
安装Docker
# wget https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo -O
/etc/yum.repos.d/docker-ce.repo
# yum -y install docker
# systemctl enable docker && systemctl start docker
# docker --version
安装Docker Compose
# sudo curl -L "https://github.com/docker/compose/releases/download/1.28.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
# sudo chmod +x /usr/local/bin/docker-compose
# docker-compose --version
2 部署Kafka环境
准备docker-compose.yml文件
这里我的宿主机IP是172.16.16.4,你需要改为你自己的。
具体的 docker-compose.yml 文件内容如下:
version: '3.8'
services:
zookeeper:
image: wurstmeister/zookeeper
container_name: zookeeper
ports:
- "2181:2181"
restart: always
kafka1:
image: wurstmeister/kafka
depends_on: [ zookeeper ]
container_name: kafka1
ports:
- "9091:9091"
environment:
HOSTNAME: kafka1
KAFKA_BROKER_ID: 0
KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://kafka1:9091
KAFKA_LISTENERS: PLAINTEXT://0.0.0.0:9091
KAFKA_ZOOKEEPER_CONNECT: zookeeper:2181/kafka
extra_hosts:
kafka1: 172.16.16.4
kafka2:
image: wurstmeister/kafka
depends_on: [ zookeeper ]
container_name: kafka2
ports:
- "9092:9092"
environment:
HOSTNAME: kafka2
KAFKA_BROKER_ID: 1
KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://kafka2:9092
KAFKA_LISTENERS: PLAINTEXT://0.0.0.0:9092
KAFKA_ZOOKEEPER_CONNECT: zookeeper:2181/kafka
extra_hosts:
kafka2: 172.16.16.4
kafka3:
image: wurstmeister/kafka
depends_on: [ zookeeper ]
container_name: kafka3
ports:
- "9093:9093"
environment:
HOSTNAME: kafka3
KAFKA_BROKER_ID: 2
KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://kafka3:9093
KAFKA_LISTENERS: PLAINTEXT://0.0.0.0:9093
KAFKA_ZOOKEEPER_CONNECT: zookeeper:2181/kafka
extra_hosts:
kafka3: 172.16.16.4
部署Zookeeper和Kafka
将docker-compose.yml文件拷贝到服务器,紧接着在该文件目录下执行:docker-compose up -d 即可快速完成部署。
# docker-compose up -d
Building with native build. Learn about native build in Compose here: https://docs.docker.com/go/compose-native-build/
Creating network "kafka_default" with the default driver
Creating zookeeper ... done
Creating kafka1 ... done
Creating kafka3 ... done
Creating kafka2 ... done
部署完成后,通过执行:docker-compose ps 来验证一下。
# docker-compose ps
Name Command State Ports
-------------------------------------------------------------------------------------------------------------------------
kafka1 start-kafka.sh Up 0.0.0.0:9091->9091/tcp,:::9091->9091/tcp
kafka2 start-kafka.sh Up 0.0.0.0:9092->9092/tcp,:::9092->9092/tcp
kafka3 start-kafka.sh Up 0.0.0.0:9093->9093/tcp,:::9093->9093/tcp
zookeeper /bin/sh -c /usr/sbin/sshd ... Up 0.0.0.0:2181->2181/tcp,:::2181->2181/tcp, 22/tcp, 2888/tcp, 3888/tcp
其中,docker-compose.yml中HOSTNAME和extra_hosts的结合使用,会在容器中的/etc/hosts中增加一条记录,通过执行:docker exec -it kafka1 cat /etc/hosts 来验证一下。
# docker exec -it kafka1 cat /etc/hosts
.....
172.16.16.4 kafka1
.....
3 容器内验证与测试
安装部署完成后,首先,我们进入容器内部,来验证和测试一下。
docker exec -it kafka1 bash
创建测试Topic
创建一个测试用的topic:testtopic,此topic配置了2个分区,无额外的副本。
kafka-topics.sh --create --zookeeper 172.16.16.4:2181/kafka --replication-factor 1 --partitions 2 --topic testtopic
模拟Producer
重新打开一个窗口,进入容器内部,模拟一个producer,在控制台随意发送一些字符串消息。
kafka-console-producer.sh --topic=testtopic --broker-list kafka1:9091,kafka2:9092,kafka3:9093
>tests
>haha
模拟Consumer
重新打开一个窗口,进入容器内部,模拟一个consumer,设置从头开始消费,会收到producer发来的字符串消息。
kafka-console-consumer.sh --bootstrap-server kafka1:9091,kafka2:9092,kafka3:9093 --from-beginning --topic testtopic
tests
haha
可以看到,consumer成功接收到了producer发来的两个string类型的message。
4 使用GUI工具:Kafka Tool
Kafka Tool是一个用于管理和使用Apache Kafka集群的GUI应用程序。Kafka Tool提供了一个较为直观的UI可让用户快速查看Kafka集群中的对象以及存储在topic中的消息,提供了一些专门面向开发人员和管理员的功能。
NOTE:目前Kafka Tool已改名为Offset Explorer,不过我还是倾向于叫它 Kafka Tool。
下载地址:https://www.kafkatool.com/download.html
使用方式比较简单,首先创建一个Connection,需要填写的配置如下:
NOTE:这里bootstrap-servers参数列表填写的是主机名,你可以先在自己电脑上的hosts文件中添加这个映射
然后点击Test测试无误就进入了以下界面,可以看到我们刚刚创建的topic有两个分区已经可以显示出来了。
然后更改一下显示内容的类型:从Byte Array改为String,方便查看。
通过上面的producer.sh再发送一些消息,然后通过kafka tool来查看一下消息:
5 总结
本文总结了Kafka的测试环境搭建过程,本文选择的是基于Docker来搭建非宿主机直接搭建,加之官方并没有推出官方的Docker镜像,因此建议生产环境还是不要通过Docker来搭建,开发/测试环境是可以的,快速且高效。
注意:目前Kafka的Docker镜像最新版是Apache Kafka的2.8版本,而Apache Kafka最新已经3.x版本了。
参考资料
极客时间,胡夕《Kafka核心技术与实战》
B站,尚硅谷《Kafka 3.x入门到精通教程》
作者:周旭龙
出处:https://edisonchou.cnblogs.com
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文链接。
相关文章
- 使用Docker(k8s)安装Kafka并使用宿主机连接
- 清空kafka_kafka的topic
- 日志采集系统flume和kafka有什么区别及联系,它们分别在什么时候使用,什么时候又可以结合?
- kafka学习之Kafka 的简介(一)
- kafka删除topic中的数据_kafka删除数据
- kafka批量删除topic_kafka清空数据
- kafka批量删除topic_查看kafka集群状态命令
- 简单说明什么是宏观社会环境和微观社会环境?_kafka是什么
- 如何用Know Streaming 快速对Kafka Topic 完成扩缩副本操作
- kafka的访问控制
- 谈一谈 Kafka 在 CAP 三大特性之间做的妥协和改进
- KafkaConsumer-Kafka从入门到精通(十)
- 【已解决】Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon runnin
- Docker服务的停止命令(systemctl stop docker)
- Docker服务的拉取镜像命令(docker pull 镜像名称)
- Docker查看容器命令(docker ps)
- Docker关闭容器命令(docker stop)
- 「 [Docker]当你的docker无法解析DNS 」
- 「 【Docker】docker的基础使用介绍(小白如何使用docker) 」
- 【Docker 系列】docker 学习 二,Docker 的常用命令
- 【Docker 系列】docker 学习六,探究一下数据卷容器
- Kafka和Flink双剑合璧,Confluent收购Immerok引起业内广泛讨论
- 使用OGG微服务将Oracle同步到kafka(全量+增量)
- kafka之三 Kafka 高可用详解大数据
- Kafka 存储机制和副本详解大数据
- kafka原理解析-《Learning Apache Kafka, 2nd Edition.pdf》详解编程语言
- Linux下Docker安装指南(linux下docker安装)
- 使用Docker安装Redis,一步到位!(docker安装redis)
- docker从Abp到MySQL,使用Docker快速部署(abpmysql)
- 使用 Docker 轻松安装 MySQL 数据库(docker安装mysql)
- Linux安装Kafka:一步一步操作指南(linux安装kafka)
- Oracle与Kafka的联合应用突破传统数据处理极限(oracle与kafka)