【问题标题】:Exception causing close of session 0x0: null - Java + Kafka + Zookeeper + Docker导致会话 0x0 关闭的异常:null - Java + Kafka + Zookeeper + Docker
【发布时间】:2018-03-28 09:49:31
【问题描述】:

我正在尝试使用KafkaProducer 对象,我遵循this guide 来实现这一目标。下面是正在使用的代码:

private final KafkaProducer producer;
private final Serializer serializer;

public KafkaEventPublisher(String zookeeper, Serializer serializer) {
    Properties props = new Properties();
    props.put(ProducerConfig.BOOTSTRAP_SERVERS_CONFIG, zookeeper);
    props.put(ProducerConfig.KEY_SERIALIZER_CLASS_CONFIG, StringSerializer.class);
    props.put(ProducerConfig.VALUE_SERIALIZER_CLASS_CONFIG, StringSerializer.class);
    props.put(ProducerConfig.CLIENT_ID_CONFIG, "KafkaProducerTest");

    this.producer = new KafkaProducer<>(props);
    this.serializer = serializer;
}

@Override
public <T extends Event> void publish(String streamName, T event) {
    try {
        String eventEnvelopeJson = serializer.serialize(event);

        ProducerRecord<String, String> record = new ProducerRecord<>(streamName, event.getId().toString(), eventEnvelopeJson);
        this.producer.send(record);
    } finally {
        this.producer.flush();
        this.producer.close();
    }
}

提供的 zookeeper 字符串的值为localhost:2181。下面是我的 docker-compose 文件:

version: '3'

services:
  rabbitmq:
    image: rabbitmq:management-alpine
    ports:
    - "5672:5672"
    - "15672:15672"

  zookeeper:
    image: zookeeper:3.4
    ports:
      - "2181:2181"

  kafka-manager:
    image: sheepkiller/kafka-manager
    ports:
      - "9000:9000"
    environment:
      - ZK_HOSTS=zookeeper:2181
    depends_on:
      - zookeeper
    links:
      - zookeeper

当我尝试运行测试用例并测试上述代码时,我的 docker-compose 视图会收到此错误消息的垃圾邮件,最终测试用例会超时。

keeper_1      | 2018-03-28 09:05:34,828 [myid:] - INFO  [NIOServerCxn.Factory:0.0.0.0/0.0.0.0:2181:NIOServerCnxnFactory@215] - Accepted socket connection from /172.20.0.1:37638
zookeeper_1      | 2018-03-28 09:05:34,829 [myid:] - WARN  [NIOServerCxn.Factory:0.0.0.0/0.0.0.0:2181:NIOServerCnxn@383] - Exception causing close of session 0x0: null
zookeeper_1      | 2018-03-28 09:05:34,829 [myid:] - INFO  [NIOServerCxn.Factory:0.0.0.0/0.0.0.0:2181:NIOServerCnxn@1040] - Closed socket connection for client /172.20.0.1:37638 (no session established for client)
zookeeper_1      | 2018-03-28 09:05:35,689 [myid:] - INFO  [NIOServerCxn.Factory:0.0.0.0/0.0.0.0:2181:NIOServerCnxnFactory@215] - Accepted socket connection from /172.20.0.1:37640
zookeeper_1      | 2018-03-28 09:05:35,692 [myid:] - WARN  [NIOServerCxn.Factory:0.0.0.0/0.0.0.0:2181:NIOServerCnxn@383] - Exception causing close of session 0x0: null
zookeeper_1      | 2018-03-28 09:05:35,693 [myid:] - INFO  [NIOServerCxn.Factory:0.0.0.0/0.0.0.0:2181:NIOServerCnxn@1040] - Closed socket connection for client /172.20.0.1:37640 (no session established for client)
zookeeper_1      | 2018-03-28 09:05:36,772 [myid:] - INFO  [NIOServerCxn.Factory:0.0.0.0/0.0.0.0:2181:NIOServerCnxnFactory@215] - Accepted socket connection from /172.20.0.1:37642
zookeeper_1      | 2018-03-28 09:05:36,773 [myid:] - WARN  [NIOServerCxn.Factory:0.0.0.0/0.0.0.0:2181:NIOServerCnxn@383] - Exception causing close of session 0x0: null
zookeeper_1      | 2018-03-28 09:05:36,773 [myid:] - INFO  [NIOServerCxn.Factory:0.0.0.0/0.0.0.0:2181:NIOServerCnxn@1040] - Closed socket connection for client /172.20.0.1:37642 (no session established for client)
zookeeper_1      | 2018-03-28 09:05:37,772 [myid:] - INFO  [NIOServerCxn.Factory:0.0.0.0/0.0.0.0:2181:NIOServerCnxnFactory@215] - Accepted socket connection from /172.20.0.1:37644
zookeeper_1      | 2018-03-28 09:05:37,773 [myid:] - WARN  [NIOServerCxn.Factory:0.0.0.0/0.0.0.0:2181:NIOServerCnxn@383] - Exception causing close of session 0x0: null
zookeeper_1      | 2018-03-28 09:05:37,773 [myid:] - INFO  [NIOServerCxn.Factory:0.0.0.0/0.0.0.0:2181:NIOServerCnxn@1040] - Closed socket connection for client /172.20.0.1:37644 (no session established for client)
zookeeper_1      | 2018-03-28 09:05:38,877 [myid:] - INFO  [NIOServerCxn.Factory:0.0.0.0/0.0.0.0:2181:NIOServerCnxnFactory@215] - Accepted socket connection from /172.20.0.1:37646
zookeeper_1      | 2018-03-28 09:05:38,880 [myid:] - WARN  [NIOServerCxn.Factory:0.0.0.0/0.0.0.0:2181:NIOServerCnxn@383] - Exception causing close of session 0x0: null
zookeeper_1      | 2018-03-28 09:05:38,880 [myid:] - INFO  [NIOServerCxn.Factory:0.0.0.0/0.0.0.0:2181:NIOServerCnxn@1040] - Closed socket connection for client /172.20.0.1:37646 (no session established for client)
zookeeper_1      | 2018-03-28 09:05:40,061 [myid:] - INFO  [NIOServerCxn.Factory:0.0.0.0/0.0.0.0:2181:NIOServerCnxnFactory@215] - Accepted socket connection from /172.20.0.1:37648
zookeeper_1      | 2018-03-28 09:05:40,062 [myid:] - WARN  [NIOServerCxn.Factory:0.0.0.0/0.0.0.0:2181:NIOServerCnxn@383] - Exception causing close of session 0x0: null
zookeeper_1      | 2018-03-28 09:05:40,062 [myid:] - INFO  [NIOServerCxn.Factory:0.0.0.0/0.0.0.0:2181:NIOServerCnxn@1040] - Closed socket connection for client /172.20.0.1:37648 (no session established for client)
zookeeper_1      | 2018-03-28 09:05:41,017 [myid:] - INFO  [NIOServerCxn.Factory:0.0.0.0/0.0.0.0:2181:NIOServerCnxnFactory@215] - Accepted socket connection from /172.20.0.1:37650
zookeeper_1      | 2018-03-28 09:05:41,019 [myid:] - WARN  [NIOServerCxn.Factory:0.0.0.0/0.0.0.0:2181:NIOServerCnxn@383] - Exception causing close of session 0x0: null
zookeeper_1      | 2018-03-28 09:05:41,019 [myid:] - INFO  [NIOServerCxn.Factory:0.0.0.0/0.0.0.0:2181:NIOServerCnxn@1040] - Closed socket connection for client /172.20.0.1:37650 (no session established for client)

我无法在网上找到有关此错误的任何答案。我希望有人能帮我解决这个问题。

【问题讨论】:

    标签: java docker apache-kafka docker-compose apache-zookeeper


    【解决方案1】:

    问题来自这个错误的配置:

    props.put(ProducerConfig.BOOTSTRAP_SERVERS_CONFIG, zookeeper);
    

    BOOTSTRAP_SERVERS_CONFIG 指的是经纪人,而不是动物园管理员。

    您可以使用以下方法从 zookeeper 获取BOOTSTRAP_SERVERS_CONFIG

    val zkUtils = ZkUtils(zookeeper, 3000, 3000, JaasUtils.isZkSecurityEnabled)
    val brokers = zkUtils.getAllBrokersInCluster()
     .map(_.getBrokerEndPoint(ListenerName.forSecurityProtocol(SecurityProtocol.PLAINTEXT)).connectionString())
     .mkString(",")
    ...
    props.put(ProducerConfig.BOOTSTRAP_SERVERS_CONFIG, brokers)
    

    【讨论】:

      【解决方案2】:

      检查文件 kafka*\config\consumer.properties 和 producer.properties 中“bootstrap.servers”的值。

      生产者端口和消费者端口的值应该相同。默认情况下,它通常是 9092

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-04-09
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多