kafka主机名解析hostname

同事在他们的服务器上读取kafka的信息,使用ip的情况下,端口是通的情况下始终读不到消息。使用zk的ip能list出topic。想到有可能是读取broker的时候读到的主机名了。配置/etc/hosts后,能顺利读到消息。

回去kafka对应的zk中查看 /kafka/broker/ids/xxx值,存的果然是主机名。在CDH集群中配置每个broker的kafka.properties高级值:

使用 get /brokers/ids/xxx值

host.name=192.168.0.1

listeners=PLAINTEXT://192.168.0.1:9092

advertised.listeners=PLAINTEXT://192.168.0.1:9092

增加此值后zk中存的也是正常的值了。

2018-10-12 17:07:11,967 WARN org.apache.kafka.common.network.Selector: [SocketServer brokerId=375] Unexpected error from /192.168.0.2; closing connection

org.apache.kafka.common.network.InvalidReceiveException: Invalid receive (size = 1903520116 larger than 104857600)

        at org.apache.kafka.common.network.NetworkReceive.readFromReadableChannel(NetworkReceive.

        at org.apache.kafka.common.network.NetworkReceive.readFrom(NetworkReceive.

        at org.apache.kafka.common.network.KafkaChannel.receive(KafkaChannel.

        at org.apache.kafka.common.network.KafkaChannel.read(KafkaChannel.

        at org.apache.kafka.common.network.Selector.attemptRead(Selector.

        at org.apache.kafka.common.network.Selector.pollSelectionKeys(Selector.

        at org.apache.kafka.common.network.Selector.poll(Selector.

        at kafka.network.Processor.poll(SocketServer.scala:551)

        at kafka.network.Processor.run(SocketServer.scala:468)

        at

[zk: localhost:2181(CONNECTED) 8] help
ZooKeeper -server host:port cmd args
        stat path [watch]
        set path data [version]
        ls path [watch]
        delquota [-n|-b] path
        ls2 path [watch]
        setAcl path acl
        setquota -n|-b val path
        history 
        redo cmdno
        printwatches on|off
        delete path [version]
        sync path
        listquota path
        rmr path
        get path [watch]
        create [-s] [-e] path data acl
        addauth scheme auth
        quit 
        getAcl path
        close 
        connect host:port

 参考:http://blog.sina.com.cn/s/blog_6dd718930102y7wg.html

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
如果使用 Docker Compose 搭建并运行 Kafka 服务,而在 Java 应用程序中访问 Docker 所在主机上映射出来的 Kafka 端口时,hostname 会变成 Kafka 在 Docker 中的 ID,可能是因为 Java 应用程序无法正确解析 Docker Compose 中配置的 hostname 导致的。要解决这个问题,可以尝试以下两种方法: 1. 将 `KAFKA_ADVERTISED_HOST_NAME` 的值设置为 Docker 主机的 IP 地址 在 Docker Compose 配置文件中,将 `KAFKA_ADVERTISED_HOST_NAME` 的值设置为 Docker 主机的 IP 地址,而不是 Kafka 在 Docker 中的 ID。这样做可以确保 Java 应用程序能够正确解析 Kafka 主机名并连接到 Kafka Broker。 ``` ... environment: KAFKA_ADVERTISED_HOST_NAME: <DOCKER_HOST_IP> KAFKA_ADVERTISED_PORT: 9092 KAFKA_ZOOKEEPER_CONNECT: zookeeper:2181 ... ``` 2. 在 Java 应用程序中配置 Docker Compose 网络 另一种方法是在 Java 应用程序中配置 Docker Compose 网络,以便应用程序可以正确解析 Docker Compose 中配置的 hostname。在 Java 应用程序中,可以使用 `docker-compose.yml` 中定义的服务名称作为 hostname,例如 `kafka`。 ``` Properties props = new Properties(); props.put("bootstrap.servers", "kafka:9092"); ... KafkaProducer<String, String> producer = new KafkaProducer<>(props); ``` 在这个例子中,Java 应用程序使用 `kafka` 作为 Kafka Broker 的 hostname,而不是 Docker 中的 ID。在启动 Java 应用程序之前,需要确保 Docker Compose 网络已经创建,并且 Java 应用程序能够正确连接到网络。 无论使用哪种方法,都需要确保 Java 应用程序能够正确解析 Kafka 主机名并连接到 Kafka Broker。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值