背景:
笔者在本地的Flink项目从云服务器kafka上获取数据方式如下:
StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment();
Properties properties = new Properties();
properties.setProperty("bootstrap.servers", "139.196.235.10:9092");
properties.setProperty("group.id", "test");
DataStream<String> stream = env
.addSource(new FlinkKafkaConsumer<>("pk1", new SimpleStringSchema(), properties));
由于笔者的云服务器是计时类型的,每次启动IP地址都会变化,所以就没有在本地配置主机名与IP地址的映射关系,通过公网IP:端口号的方式访问云服务器。但是在获取数据时显示由于找不到正确的分片位置导致连接超时:
Caused by: org.apache.kafka.common.errors.TimeoutException: Timeout of 60000ms expired before the position for partition pk1-0 could be determin
但是笔者在云服务器上自测kafka的生产者消费者案例没有问题,本地通过 公网IP:端口号 也能连接上云服务器上的端口。进一步排错显示未知的主机异常:
java.net.UnknownHostException: hadoop000
笔者的云服务器hostname为hadoop000,但是在kafka的server.properties中配置的是localhost,找完整个kafka都没发现需要使用hostname的地方。
最终不得已在本地的hosts中配置了IP地址 hostname,才得以解决问题。