Windows下利用Docker搭建Kafka服务

几点说明

  • 小白的学习笔记,如有错误或不妥,请大佬指点
  • 默认已在Windows系统下正确安装Docker
  • 默认了解基本的Docker操作
  • 默认正确安装并配置了Java
  • 默认会Windows的基本操作

与网络教程的两点区别

  1. 服务在Docker,生产者和消费者在主机
  2. 引入Python代码

安装与运行zookeeper和kafka

拉取镜像

# 拉取zookeeper镜像
docker pull wurstmeister/zookeeper

# 拉取kafka镜像
docker pull wurstmeister/kafka

启动服务

# 启动zookeeper服务,容器名zookeeper,端口2181
docker run -d --name zookeeper -p 2181:2181 wurstmeister/zookeeper:latest

# 启动kafka服务,容器名kafka,端口9092,local-ip修改为本机IP
docker run -d --name kafka -p 9092:9092 -e KAFKA_BROKER_ID=0 -e KAFKA_ZOOKEEPER_CONNECT=[local-ip]:2181/kafka -e KAFKA_ADVERTISED_LISTENERS=PLAINTEXT://[local-ip]:9092 -e KAFKA_LISTENERS=PLAINTEXT://0.0.0.0:9092 wurstmeister/kafka:latest

如上操作即完成了Windows系统的在Docker上搭建Kafka服务

主机运行生产者和消费者

在Apache官网下载最新的kafka可执行包
网址:https://kafka.apache.org/downloads

基础操作

说明

  • 其实这步操作没有什么实际意义,可以跳过
  • 前文已说明过默认正确安装并配置Java环境
  • 这里的文件包可以不依赖Docker在主机上直接运行

Setp1
解压下载的 kafka_2.13-3.4.0.tgz 文件包
Step2
修改kafka配置文件,好像也可以不改,但是我每次都会修改
文件1:config/zookeeper.properties
直接修改dataDir值,为某一个绝对路径即可
文件2:config/server.properties
修改listeners值,为你主机的IP和端口
修改advertised.listeners值,为你主机的IP和端口
修改log.dirs值,为某一个绝对路径即可

创建kafka主题
# 默认当前路径为 kafka_2.13-3.4.0
# 且该路径深度较浅,路径太深会导致无法运行报错
cd bin/windows

# 检查当前所有主题
.\kafka-topics.bat --list --bootstrap-server [local-ip]:9092

# 创建新主题demo-request
.\kafka-topics.bat --create --bootstrap-server [local-ip]:9092 --replication-factor 1 --partitions 1 --topic demo-request

# 可以再次检测所有主题
.\kafka-topics.bat --list --bootstrap-server [local-ip]:9092
启动kafka消费者
# 从当前位置消费【建议,更容易调试】
.\kafka-console-consumer.bat --bootstrap-server [local-ip]:9092 --topic demo-request

# 从头部开始消费
.\kafka-console-consumer.bat --bootstrap-server [local-ip]:9092 --topic demo-request --from-beginning
启动kafka生产者
启动生产者
.\kafka-console-producer.bat --broker-list [local-ip]:9092 --topic demo-request

如上操作即可实现生产者发送消息,消费者接收消息了

Python代码实现消息的生产与消费

安装两个python包
pip install kafka
pip install kafka-python
消费者代码
from kafka import KafkaProducer, KafkaConsumer
from kafka.errors import kafka_errors
import traceback
import json

def consumer_demo():
    consumer = KafkaConsumer(
        'demo-request',
        bootstrap_servers='local-ip:9092'
    )
    for message in consumer:
        print("receive, key: {}, value: {}".format(
            json.loads(message.key.decode()),
            json.loads(message.value.decode())
            )
        )

consumer_demo()
生产者代码
from kafka import KafkaProducer, KafkaConsumer
from kafka.errors import kafka_errors
import traceback
import json

def producer_demo():
    # 假设生产的消息为键值对(不是一定要键值对),且序列化方式为json
    producer = KafkaProducer(
        bootstrap_servers=['local-ip:9092'],
        key_serializer=lambda k: json.dumps(k).encode(),
        value_serializer=lambda v: json.dumps(v).encode())
    # 发送十条消息
    for i in range(0, 10):
        future = producer.send(
            'demo-request',
            key='count_num',  # 同一个key值,会被送至同一个分区
            value=str(i),
            partition=0)  # 向分区1发送消息
        print("send {}".format(str(i)))
        try:
            future.get(timeout=10) # 监控是否发送成功
        except kafka_errors:  # 发送失败抛出kafka_errors
            traceback.format_exc()

producer_demo()

总结

  • 介绍了如何使用Docker启动kafka服务
  • 介绍了如何在主机上使用Docker中的kafka服务
  • 介绍了如何使用python代码使用Docker中的kafka服务

其他未考虑到的,或考虑的不周全的,请大佬指出,共同学些!

参考链接:

  1. https://blog.csdn.net/lmchhh/article/details/120147229
  2. https://cloud.tencent.com/developer/article/1892086
  3. https://zhuanlan.zhihu.com/p/279784873

如果侵权,请联系删除!

你可能感兴趣的:(kafka,windows,docker)