win10 本地通过docker提供kafka服务

问题

  • 项目上一个新功能要用到Kafka, 按照类似功能把代码写完了,提交到dev环境调试(本地没有Kafka服务),死活监听不到消息(有发送消息的日志),也没有看到error日志

  • 对比了半天代码,也没有找到问题,于是决定通过docker提供本地Kafka服务

安装步骤

  • 确保本地已安装docker, docker命令可识别
    在这里插入图片描述

  • 打开PowerShell(win10都有, 左下角直接搜)
    在这里插入图片描述

  • 安装zookeeper(跟Kafka配套的服务)

docker pull wurstmeister/zookeeper

docker run -d --name zookeeper -p 2181:2181 wurstmeister/zookeeper

  • 安装Kafka

docker pull wurstmeister/kafka

docker run -d --name kafka --publish 9092:9092 --link zookeeper --env KAFKA_ZOOKEEPER_CONNECT=zookeeper:2181 --env KAFKA_ADVERTISED_HOST_NAME=localhost --env KAFKA_ADVERTISED_PORT=9092 wurstmeister/kafka

  • 查检服务是否启动

docker ps

注:如果kafka docker 没有起来(再次docker ps发现消失),可以通过命令check 日志

docker logs -f kafka

删除docker服务,重来

  • 原因, kafka消息是会存起来,如果没有成功消费,应用启动后,会重现加载消费
  • 消费时,会反序列化,但我生产的消息反序列化失败,导致每次重新启动都会报错
  • 由于不知道如何清除kafka的数据,于是我直接重新安装服务,命令如下:

docker rm -f zookeeper
docker rm -f kafka
docker run -d --name zookeeper -p 2181:2181 wurstmeister/zookeeper
docker run -d --name kafka --publish 9092:9092 --link zookeeper --env KAFKA_ZOOKEEPER_CONNECT=zookeeper:2181 --env KAFKA_ADVERTISED_HOST_NAME=localhost --env KAFKA_ADVERTISED_PORT=9092 wurstmeister/kafka

数据就干净了

总结

  • 本地提供Kafka后,也终于发现了原因,是消息没有继承serializable接口,反序列化失败,本地看到了日志
  • kafka docker清除消息的命令要找一下,rm docker还是比较花时间的
  • 有一个国产软件Kafka Eagle, 查看消息的UI工具,也可以花时间再安装一下,方便查看消息的实时动态(之前一直没有跑起来)

猜你喜欢

转载自blog.csdn.net/lanxing_huangyao/article/details/126374825