Docker搭建kafka和StarRocks的问题

需求背景:类似Excel的文件进行解析,将数据全部存储到StarRocks当中。StarRocks是一个用于大数据分析的高性能仓库,兼容mysql协议,具体的大家可以去官网了解。官网上面有中文文档,这个让我觉得十分友好。这边选择的是文件解析成json格式,将数据投递kafka,StarRocks支持任务(导入作业),可以开起一个任务时刻去消费kafka里面的数据。环境是在docker中搭建的,我十分喜欢docker这个工具,虽然每次搭建环境都会遇到问题,但是这个工具是真的很好用。

首先先贴出一个错误,这个是StarRocks创建导入作业的提示,导入作业已经创建好了的,但是在运行的时候,出现的错误

ErrorReason{errCode = 2, msg='Failed to send get kafka partition info request to BE TNetworkAddress(hostname:127.0.0.1, port:8060), err: Ocurrs time out with specfied time 12 SECONDS'}

 这个问题就是StarRocks所在的容器访问不到kafka所在的容器,容器之间网络不互通,我在本地搭建环境都是使用的docker-compose,没有直接在命令行使用过,出现这个问题大概率就是docker中桥接网络模式出现的网络隔离问题,可以先看一下容器内的网络ip是不是在同一网段,如果不是的话可以先解决这个问题,而且docker的容器是可以在多个docker内部网络的,这个之前的文档有说过这个问题。

第二个错误

org.apache.kafka.clients.NetworkClient -- [Producer clientId=producer-1] Error connecting to node 2f7fa93142a9:9092 (id: 0 rack: null)
java.net.UnknownHostException: 不知道这样的主机。 (2f7fa93142a9)

创建的容器的时候,一起创建了一个可视化工具,也是用docker创建的,这里出现的问题是,在连接docker内的kafka的时候,topic是可以正常创建的,但是当生产者在投递消息的时候会出现这个问题。当时觉得很离谱的就是明明和kafka可以进行通信,但是不能投递消息。这个和kafka的投递的流程有关系。也是和配置有关系

在docker的内部会这样解析网络,所以当第一次请求kafka的时候,kafka会根据自身的策略,返回一个节点(broker),一个kafka就是一个broker,这里可以当成内部的负载均衡策略,因为生产环境大多数应该都是集群,不是单机模式。所以在投递消息的时候,宿主机根本就不知道(容器名+端口)这个服务应该去找谁,所以会显示不知道这样的主机这样的错误,大家可以在容器内部去看网络ip,容器的缩写名字和容器ip是一样的,解决这个问题的办法很简单,就是在宿主机的host文件当中加上127 和容器的名字,这样宿主机就知道找谁了。(可能是直接访问宿主机端口,然后进入docker,但我这只是猜测,菜鸡,研究的并不深入)。

最后我这贴一下docker文件,这就是docker-compose的魅力所在,一个人创建好了,其他人拿来就用

version: "2"
services:
  kafdrop:
    image: obsidiandynamics/kafdrop
    container_name: kafdrop
    ports:
      - "9000:9000"
    environment:
      KAFKA_BROKERCONNECT: "kafka:29092"
      JVM_OPTS: "-Xms16M -Xmx48M -Xss180K -XX:-TieredCompilation -XX:+UseStringDeduplication -noverify"
    depends_on:
      - "kafka"
  kafka:
    image: obsidiandynamics/kafka
    container_name: kafka
    ports:
      - "2181:2181"
      - "9092:9092"
    environment:
      KAFKA_LISTENERS: "INTERNAL://:29092,EXTERNAL://:9092"
      KAFKA_ADVERTISED_LISTENERS: "INTERNAL://:29092,EXTERNAL://:9092"
      KAFKA_LISTENER_SECURITY_PROTOCOL_MAP: "INTERNAL:PLAINTEXT,EXTERNAL:PLAINTEXT"
      KAFKA_INTER_BROKER_LISTENER_NAME: "INTERNAL"
      KAFKA_ZOOKEEPER_SESSION_TIMEOUT: "6000"
      KAFKA_RESTART_ATTEMPTS: "10"
      KAFKA_RESTART_DELAY: "5"
      ZOOKEEPER_AUTOPURGE_PURGE_INTERVAL: "0"
  startrocks:
    image: 945c0e7562cb98f00f79fa1a35919e33946de027a27f454932df02f56d9b513d
    container_name: startrocks
    ports:
     - "9030:9030"
     - "8030:8030"
     - "8040:8040"
  

根据自己的需要去增加端口或者删除,kafdrop这个是可视化工具,有一篇腾讯云的文档是介绍如何搭建的,也是docker-compose,下面的StarRocks,不需要的话直接删了吧。这里的kafka运行的模式使用zookepper的,这个zookepper是在容器kafka容器内部自带的,现在的新版本支持KRaft模式,这个模式是不需要zookepper的,但是需要增加配置contoller,具体的没有看。

kafka容器在opt目录下可以找到

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值