我试图通过本地Spring Boot API连接kafka aws实例。
我能够连接它,但是在听主题时,它抛出下面的异常,但是新主题是由Spring Boot API成功创建的 我也无法发布任何消息。
java.io.IOException: Can't resolve address: ip-xxx-xx-xx-xx.ec2.internal:9092
at org.apache.kafka.common.network.Selector.doConnect(Selector.java:235) ~[kafka-clients-2.0.1.jar:na]
Caused by: java.nio.channels.UnresolvedAddressException: null
at sun.nio.ch.Net.checkAddress(Net.java:101) ~[na:1.8.0_192]
at sun.nio.ch.SocketChannelImpl.connect(SocketChannelImpl.java:622) ~[na:1.8.0_192]
at org.apache.kafka.common.network.Selector.doConnect(Selector.java:233) ~[kafka-clients-2.0.1.jar:na]
... 30 common frames omitted
2019-07-17 15:36:13.581 WARN 3709 --- [ main] org.apache.kafka.clients.NetworkClient : [Consumer clientId=consumer-1, groupId=group_id] Error connecting to node ip-172-31-80-50.ec2.internal:9092 (id: 0 rack: null)
我也允许该端口 自定义TCP规则 TCP协议 2181 0.0.0.0/0 自定义TCP规则 TCP协议 9092 0.0.0.0/0
server:
port: 8081
spring:
kafka:
consumer:
bootstrap-servers: xx.xx.xx.xx:9092
group-id: group_id
auto-offset-reset: earliest
key-deserializer: org.apache.kafka.common.serialization.StringDeserializer
value-deserializer: org.apache.kafka.common.serialization.StringDeserializer
producer:
bootstrap-servers: xx.xx.xx.xx:9092
key-serializer: org.apache.kafka.common.serialization.StringSerializer
value-serializer: org.apache.kafka.common.serialization.StringSerializer
@KafkaListener(topics = "ConsumerTest", groupId = "group_id")
public void consume(String message) throws IOException {
logger.info(String.format("#### -> Consumed message -> %s", message));
}
答案 0 :(得分:2)
java.io.IOException:无法解析地址:ip-xxx-xx-xx-xx.ec2.internal:9092
连接到节点ip-172-31-80-50.ec2.internal:9092时出错
当使用者连接到代理时,他们将获取他们正在从中读取数据的分区的代理的元数据。您的客户回来的是卡夫卡经纪人的advertised.listener
。因此,当您使用代理的公共地址连接到代理时,代理会将计算机的内部地址返回给您的客户端。
要解决此问题,您需要在代理上正确设置侦听器。有关详情,请参见https://rmoff.net/2018/08/02/kafka-listeners-explained/。