Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/apache-kafka/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 我是卡夫卡的新手。我创建的消费者没有收到制作人发布的消息_Java_Apache Kafka_Apache Zookeeper_Kafka Consumer Api_Kafka Producer Api - Fatal编程技术网

Java 我是卡夫卡的新手。我创建的消费者没有收到制作人发布的消息

Java 我是卡夫卡的新手。我创建的消费者没有收到制作人发布的消息,java,apache-kafka,apache-zookeeper,kafka-consumer-api,kafka-producer-api,Java,Apache Kafka,Apache Zookeeper,Kafka Consumer Api,Kafka Producer Api,我正在创建消费者(一个只有一个消费者的消费者群体): Properties属性=新属性(); properties.put(“zookeeper.connect”,“localhost:2181”); properties.put(“auto.offset.reset”,“最大”); properties.put(“group.id”,groupId); properties.put(“auto.commit.enable”、“true”); ConsumerConfig ConsumerCon

我正在创建消费者(一个只有一个消费者的消费者群体):

Properties属性=新属性();
properties.put(“zookeeper.connect”,“localhost:2181”);
properties.put(“auto.offset.reset”,“最大”);
properties.put(“group.id”,groupId);
properties.put(“auto.commit.enable”、“true”);
ConsumerConfig ConsumerConfig=新的ConsumerConfig(属性);
ConsumerConnector ConsumerConnector=Consumer.createJavaConsumerConnector(consumerConfig);
Map consumerMap=consumerConnector.createMessageStreams(topicCountMap);
consumerMap.entrySet().stream().forEach(
流->{
streams.getValue().stream().forEach(
流->{
KafkaBasicConsumer customConsumer=新的KafkaBasicConsumer();
试一试{
未来消费者未来=kafkaConsumerExecutor.submit(customConsumer);
kafkaconsumersfourture.put(groupId,consumerFuture);
}捕获(例外e){
logger.error(“----Got error:+e.getMessage());
错误(“异常:”,e);
}
}
);
}
);
我为同一主题订阅了两个用户。 我通过存储消费者的未来对象,然后调用 consumerFuture.cancel(Boolean.TRUE)

现在,我用上面的代码再次订阅同一个消费者,它成功注册。 但是,当发布者现在发布时,新订阅的消费者没有收到消息,而另一个注册的消费者收到消息

我也在检查消费者的补偿,他们在制作人发布时得到更新,但消费者没有收到消息。 制作前:

组主题Pid偏移量日志大小滞后

A T1 0 94 94 1

组主题Pid偏移量日志大小滞后

B T1 0 94 94 1

制作后:

组主题Pid偏移量日志大小滞后

A T1 0 95 97 2

组主题Pid偏移量日志大小滞后

B T1 094972

我不知道这是生产者方面的问题(分区不够)还是我以错误的方式创建了消费者 此外,我无法理解log和lag列在这里的含义


如果有人能提供帮助或需要更多详细信息,请告诉我。

我找到了解决问题的方法,感谢@nautilus提醒更新

我的主要意图是提供端点来订阅和取消订阅卡夫卡中的消费者。 由于kafka只提供订阅而不提供取消订阅(只能手动进行),所以我必须在kafka实现上编写层

我将consumer对象存储在一个静态映射中,键作为组id(因为我的consumer组只能有一个consumer)

问题是,我并没有关闭一次创建的消费者,因为取消订阅和具有相同组id的旧消费者阻止新用户收到消息

私有静态地图kafkaConsumersFuture

根据某些参数,找出组id

    kafkaConsumersFuture.put(groupId, consumerConnector);
而当我取消订阅时,我做到了

    ConsumerConnector consumerConnector = kafkaConsumersFuture.get(groupId);
    if(consumerConnector!=null) {

        consumerConnector.shutdown();
        kafkaConsumersFuture.remove(groupId);
    }

你每个主题有多少个分区?我每个主题有3个分区。你还在和同样的问题斗争吗?差不多两个月了
    ConsumerConnector consumerConnector = kafkaConsumersFuture.get(groupId);
    if(consumerConnector!=null) {

        consumerConnector.shutdown();
        kafkaConsumersFuture.remove(groupId);
    }