微服务和事件驱动架构流行,Apache Kafka是核心。但自行部署Kafka难度大。幸运的是,Docker和容器技术大大简化了这一过程。本文华纳云为大家分享关于如何使用Docker 启动 Kafka 集群。
想要使用Docker 启动 Kafka 集群前提条件是有Docker桌面、Node.js和 yarn、了解Kafka 和 Docker 的基础知识。从Kafka 3.3起,引入了KRaft,不再依赖Zookeeper,简化了部署。Kafka 3.8开始支持kafka-native Docker镜像,启动更快,内存占用更低,便于本地开发。
如启动一个集群,把端口9092公开到主机上,以允许本机运行的应用程序可以连接到它。Kafka启动:
docker run -d --name=kafka -p 9092:9092 apache/kafka
当图像被拉取,可以在一两秒内启动并运行一个Kafka实例。apache/kafka 镜像在目录中附带了几个有用的脚本/opt/kafka/bin。运行以下命令获取集群 ID且验证集群是否已启动并正在运行:
docker exec -ti kafka /opt/kafka/bin/kafka-cluster.sh cluster-id --bootstrap-server :9092
会类似输出:
Cluster ID: 5L6g3nShT-eMCtK--X86sw
创建示例主题并生成信息:
docker exec -ti kafka /opt/kafka/bin/kafka-console-producer.sh --bootstrap-server :9092 --topic demo
运行后,支持每行输入一条消息,如输入几条消息,没行为一条:
First message
和
Second message
按enter发送最后一条消息,按 ctrl+c把消息将发布到 Kafka。确认消息已发到集群中:
docker exec -ti kafka /opt/kafka/bin/kafka-console-consumer.sh --bootstrap-server :9092 --topic demo --from-beginning
输出消息:
First message
Second message
打开另一个终端并发布更多消息并查看它们是否出现。完成后,按 ctrl+c 停止使用消息。有一个本地运行的 Kafka 集群,并且已验证您可以连接到它。
以上就是展示从命令行来连接到Kafka 集群,如果是从应用程序来连接集群,可以使用KafkaJS库中简单Node项目。因为集群在本地运行并且在端口9092中公开,应用程序可以通过localhost:9092\该示例应用连接到本地运行的集群,消费并记录来自"demo"主题的消息。在开发模式下,如果主题不存在,应用会自动创建它。
如果不存在上一步中运行 Kafka 集群,启动 Kafka 实例:
docker run -d --name=kafka -p 9092:9092 apache/kafka
在本地克隆 GitHub 存储库
git clone https://github.com/dockersamples/kafka-development-node.git
导航到项目:
cd kafka-development-node/app
用yarn安装依赖项:
yarn install
运行yarn dev启动应用,这会设置NODE_ENV为development模式,并用nodemon监控文件变动。
yarn dev
应用正在运行并打印接收到的消息。在新终端,使用特定命令发布消息。
docker exec -ti kafka /opt/kafka/bin/kafka-console-producer.sh --bootstrap-server :9092 --topic demo
发送消息给集群:
Test message
ctrl+c请记住,完成后按下以停止生成消息。