花开堪折|

lmyyyy

园龄:2年8个月粉丝:7关注:10

1月28日总结

在很多时候我们需要使用到消息队列, 其中 kafka 是一个非常优秀的消息队列, 在我们平时开发中也经常会用到, 但是在开发环境中部署 kafka 是一个非常麻烦的事情

在 kafka 官网上, 有一个详细的部署文档, 需要的小伙伴可以参考这个文档 https://kafka.apache.org/quickstart, 但是随之带来的问题是, 我们需要 java 环境, 并且需要安装 zookerper,

那么如果我仅仅是想本地开发环境中使用 kafka, 有没有更简单的方法呢? 为了解决这个问题, 我们可以使用 docker 来部署 kafka

使用 docker 来部署 kafka 的测试节点, 我们需要先安装 docker 和 docker-compose, 这里就不再赘述了, 请自行安装

首先我们在已经安装好 docker 和 docker-compose 的机器上, 创建一个目录, 并且在这个目录下创建一个 docker-compose.yml 文件, 文件内容如下

version: "2"

services:
kafka:
image: docker.io/bitnami/kafka:3.6
ports:
- '9094:9094'
volumes:
- "kafka_data:/bitnami"
environment:
# KRaft settings
- KAFKA_CFG_NODE_ID=0
- KAFKA_CFG_PROCESS_ROLES=controller,broker
- KAFKA_CFG_CONTROLLER_QUORUM_VOTERS=0@kafka:9093
# Listeners
- KAFKA_CFG_LISTENERS=PLAINTEXT://:9092,CONTROLLER://:9093,EXTERNAL://:9094
- KAFKA_CFG_ADVERTISED_LISTENERS=PLAINTEXT://kafka:9092,EXTERNAL://localhost:9094
- KAFKA_CFG_LISTENER_SECURITY_PROTOCOL_MAP=CONTROLLER:PLAINTEXT,EXTERNAL:PLAINTEXT,PLAINTEXT:PLAINTEXT
- KAFKA_CFG_CONTROLLER_LISTENER_NAMES=CONTROLLER
- KAFKA_CFG_INTER_BROKER_LISTENER_NAME=PLAINTEXT
volumes:
kafka_data:
driver: local

然后我们就可以在这个目录下执行 docker-compose up -d 来启动 kafka 了, 启动完成后, 我们可以使用 docker ps 命令来查看 kafka 是否启动成功

➜ ~ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
f346c045196d bitnami/kafka:3.6 "/opt/bitnami/script…" 2 days ago Up 2 days 0.0.0.0:9092-9094->9092-9094/tcp, :::9092-9094->9092-9094/tcp

此时需要注意打开防火墙限制, 例如我的防火墙使用的是 ufw , 我们需要执行以下命令

ufw allow 9094

然后我们就可以使用 kafka 了, 例如我现在使用 python 来连接 kafka, 首先我们需要安装 kafka-python

import time

from kafka import KafkaConsumer

consumer = KafkaConsumer('test',
group_id='test',
bootstrap_servers=['x.x.x.x:9094'])
for message in consumer:
print(time.time(), "%s:%d:%d: key=%s value=%s" % (message.topic, message.partition,
message.offset, message.key,
message.value))

from kafka import KafkaProducer

producer = KafkaProducer(bootstrap_servers=['x.x.x.x:9094'])

Asynchronous by default

future = producer.send('test', b'raw_bytes')
producer.flush()

本文作者:lmyyyy

本文链接:https://www.cnblogs.com/lmyy/p/17995327

版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。

posted @   lmyyyy  阅读(3)  评论(0编辑  收藏  举报
评论
收藏
关注
推荐
深色
回顶
收起
点击右上角即可分享
微信分享提示