Docker玩转kafka/zookeeper

197 阅读1分钟

「这是我参与11月更文挑战的24天,活动详情查看:2021最后一次更文挑战

  • 这一片是最近在docker上安装kafka及zookeeper
    • 配合spring项目去使用的过程
  • 首先我们如果用到消息队列的时候,无非就是最火的几个**mq或者kafka
    • terminal中使用如下命令
docker pull wurstmeister/zookeeper  拉取zookeeper
docker pull wurstmeister/kafka
  • 我们项目中需要创建消费者和生产者 生产者
@Component
public class StudentProducer {
    @Autowired
    private KafkaTemplate kafkaTemplate;

    /**
     * 发送数据
     * @param stuid
     */
    public void sendLog(String stuid){
        Student stu = new Student();
        stu.setName("xiaoHong").setUserid(stuid).setState("111");
        System.err.println("发送学生数据:"+stu);
        kafkaTemplate.send("test", JSON.toJSONString(stu));
    }
}
  • 发送数据主要是kafkaTemplate.send 消费者
@Component
@Slf4j
public class UserLogConsumer {
    @KafkaListener(topics = {"test"},groupId = "testGroup")
    public void consumer(ConsumerRecord<?,?> consumerRecord){
        //判断是否为null
        Optional<?> kafkaMessage = Optional.ofNullable(consumerRecord.value());
        log.info("======== data =" + kafkaMessage);
        if(kafkaMessage.isPresent()){
            //获取Optional实例中的值
            Object message = kafkaMessage.get();
            System.err.println("data:"+message);
        }

    }
}

隐患

  • Mac中遇到的最大的坑是

image.png

image.png

  • 如果我们使用上面两个命令去启动kafka/zookeeper在本机是完全没有问题的
    • 而且在本机测试一下 如下图,消费者和生产者这个也是完全没有问题的

image.png image.png

  • 但是当我们启动程序的时候,会一直循环报警# No route to host
    • 顺藤摸瓜,我们可以发现,最开始启动两个镜像的时候,是配置的host.docker.internal
    • 所以是我们的程序去读取了我们的macOS系统与docker建立连接
  • 所以在这里处理的时候,我直接在启动两个镜像的时候传入的是自己的纯ip地址
  • 在项目中配置文件也要最开始成本机的ip地址而不是127.0.0.1