【Kafka】 Kafka 外网无法消费的问题
前言
最近在学习Kafka
,于是在阿里云搭建了Kafka
服务。在阿里云服务器上使用命令行手动生产、消费都没什么问题,但是在使用代码消费时,却一直卡着
,无法消费。
环境信息
Kafka
2.7- 服务使用内网ip
问题描述
使用 idea
调试,控制台没有任何输出,仿佛卡住了一样。
解决方案
- 配置
advertised.listeners
这里需要配置为外网的地址和端口,是暴露给外部的listeners
,如果没有设置,会用listeners
如:advertised.listeners=PLAINTEXT://59.110.32.152:9092
- 重启服务
相关代码
这里贴下相关的代码
1. pom 文件
<dependency>
<groupId>org.apache.kafka</groupId>
<artifactId>kafka-clients</artifactId>
<version>2.7.2</version>
</dependency>
2. 代码
import org.apache.kafka.clients.consumer.ConsumerRecord;
import org.apache.kafka.clients.consumer.ConsumerRecords;
import org.apache.kafka.clients.consumer.KafkaConsumer;
import java.time.Duration;
import java.util.Arrays;
import java.util.Properties;
public class KafkaSourceDemo {
public static void main(String[] args) throws Exception{
Properties props = new Properties();
props.setProperty("bootstrap.servers", "59.110.32.152:9092");
props.setProperty("group.id", "test");
props.setProperty("enable.auto.commit", "true");
props.setProperty("auto.commit.interval.ms", "1000");
props.setProperty("key.deserializer", "org.apache.kafka.common.serialization.StringDeserializer");
props.setProperty("value.deserializer", "org.apache.kafka.common.serialization.StringDeserializer");
KafkaConsumer<String, String> consumer = new KafkaConsumer<>(props);
consumer.subscribe(Arrays.asList("test"));
while (true) {
ConsumerRecords<String, String> records = consumer.poll(Duration.ofMillis(100));
for (ConsumerRecord<String, String> record : records)
System.out.printf("offset = %d, key = %s, value = %s%n", record.offset(), record.key(), record.value());
}
}
}
问题解决!