连接kafka时报错:Caused by: java.lang.IllegalStateException: No entry found for connection 2147483647

在尝试连接虚拟机上的Kafka时遇到问题,错误信息为'Caused by: java.lang.IllegalStateException: No entry found for connection 2147483647'。尽管主机能ping通虚拟机,但连接始终失败。通过检查发现是由于主机无法解析Kafka的地址。解决方案是修改Kafka配置文件producer.properties,取消advertised.listeners的注释并设置为正确IP。重新启动所有相关进程后,成功连接到Kafka。

想要收集流式数据,但是主机一直连不上虚拟机里的kafka。主机可以ping通虚拟机,但就是不停地报错

Caused by: java.lang.IllegalStateException: No entry found for connection 2147483647
	at org.apache.kafka.clients.ClusterConnectionStates.nodeState(ClusterConnectionStates.java:339)
	at org.apache.kafka.clients.ClusterConnectionStates.disconnected(ClusterConnectionStates.java:143)
	at org.apache.kafka.clients.NetworkClient.initiateConnect(NetworkClient.java:926)
	at org.apache.kafka.clients.NetworkClient.ready(NetworkClient.java:287)
	at org.apache.kafka.clients.consumer.internals.ConsumerNetworkClient.tryConnect(ConsumerNetworkClient.java:548)
	at org.apache.kafka.clients.consumer.internals.AbstractCoordinator$FindCoordinatorResponseHandler.onSuccess(AbstractCoordinator.java:676)
	at org.apache.kafka.clients.consumer.internals.AbstractCoordinator$FindCoordinatorResponseHandler.onSuccess(AbstractCoordinator.java:656)
	at org.apache.kafka.clients.consumer.internals.RequestFuture$1.onSuccess(RequestFuture.java:204)
	at org.apache.kafka.clients.consumer.internals.RequestFuture.fireSuccess(RequestFuture.java:167)
	at org.apache.kafka.clients.consumer.internals.RequestFuture.complete(RequestFuture.java:127)
	at org.apache.kafka.clients.consumer.internals.ConsumerNetworkClient$RequestFutureCompletionHandler.fireCompletion(ConsumerNetworkClient.java:575)
	at org.apache.kafka.clients.consumer.internals.ConsumerNetworkClient.firePendingCompletedRequests(ConsumerNetworkClient.java:389)
	at org.apache.kafka.clients.consumer.internals.ConsumerNetworkClient.poll(ConsumerNetworkClient.java:297)
	at org.apache.kafka.clients.consumer.internals.ConsumerNetworkClient.poll(ConsumerNetworkClient.java:236)
	at org.apache.kafka.clients.consumer.internals.ConsumerNetworkClient.poll(ConsumerNetworkClient.java:215)
	at org.apache.kafka.clients.consumer.internals.AbstractCoordinator.ensureCoordinatorReady(AbstractCoordinator.java:235)
	at org.apache.kafka.clients.consumer.internals.ConsumerCoordinator.fetchCommittedOffsets(ConsumerCoordinator.java:527)
	at org.apache.kafka.clients.consumer.internals.ConsumerCoordinator.refreshCommittedOffsetsIfNeeded(ConsumerCoordinator.java:497)
	at org.apache.kafka.clients.consumer.KafkaConsumer.updateFetchPositions(KafkaConsumer.java:2209)
	at org.apache.kafka.clients.consumer.KafkaConsumer.position(KafkaConsumer.java:1667)
	at org.apache.kafka.clients.consumer.KafkaConsumer.position(KafkaConsumer.java:1626)
	at org.apache.flink.streaming.connectors.kafka.internal.KafkaConsumerThread.reassignPartitions(KafkaConsumerThread.java:426)
	at org.apache.flink.streaming.connectors.kafka.internal.KafkaConsumerThread.run(KafkaConsumerThread.java:239)

尝试重启进程、关闭防火墙都不行,后来发现是主机无法解析地址,于是在kafka的config路径下修改producer.properties文件,将下图最底下蓝色那行advertised.listeners的注释去掉,再改成自己的ip

在这里插入图片描述
最后杀掉生产者、消费者和kafka进程,再次运行,成功

### Redis 连接池未打开导致的 `IllegalStateException` 解决方案 当遇到 Java 中 Redis 的连接池未打开而导致的 `IllegalStateException` 问题,通常是因为应用程序尝试访问尚未初始化或已关闭的 Redis 连接池资源。以下是可能的原因分析以及解决方案。 #### 原因分析 1. **依赖版本不匹配** 如果使用的 Spring Boot 和 Redis 驱动程序之间的版本存在冲突,则可能导致连接池无法正常启动。例如,在 pom 文件中定义了 `<version>2.0.0</version>` 版本的 `spring-boot-starter-data-redis`[^1],而其他组件(如 Lettuce 或 Jedis 客户端)可能是较新的版本,这可能会引发兼容性问题。 2. **配置错误** 如果在应用配置文件(如 `application.properties` 或 `application.yml`)中缺少必要的 Redis 参数设置,或者参数值有误,也可能导致连接池未能成功创建。例如: ```properties spring.redis.host=localhost spring.redis.port=6379 ``` 3. **数据库连接管理工具的影响** 当使用 PostgreSQL 数据库并结合 Flyway 工具进行迁移,如果数据库连接池(如 PgBouncer)运行于事务模式下,Flyway 可能会因为连接释放机制的问题丢失锁控制权[^2]。这种情况下,Redis 的连接池也可能会受到影响,尤其是在分布式环境中。 4. **安全认证失败** 若启用了 JAAS 登录模块或其他身份验证方式,但未正确提供凭证或令牌(参见 Spark Kafka 集群中的委托令牌说明[^3]),则可能导致连接被拒绝,从而抛出异常。 #### 解决方法 针对上述原因,可以采取以下措施来解决问题: 1. **确认依赖项一致性** 确保项目所引入的所有相关 jar 包均来自同一稳定版次系列。对于 Maven 构建环境来说,建议锁定所有子模块至特定版本号范围之内。比如调整 POM 如下所示: ```xml <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-dependencies</artifactId> <version>2.5.6</version> <type>pom</type> <scope>import</scope> </dependency> ``` 2. **完善配置选项** 添加更多细节到你的 Spring Boot 应用配置里去支持更复杂的场景需求。下面是一个完整的例子展示如何指定最大活跃数、最小闲置量等属性给 Redis Connection Pool 使用: ```yaml spring: redis: host: localhost port: 6379 timeout: 5s lettuce: pool: max-active: 8 max-idle: 8 min-idle: 0 ``` 3. **优化数据库交互策略** 考虑切换到池化模式下的 PgBouncer 设置以减少频繁断连带来的干扰;另外也可以通过编程手段捕获潜在风险点提前处理好可能出现的竞争条件状况。具体做法可参考官方文档关于 Session Lock Management 的部分描述。 4. **加强安全性校验流程** 对于涉及外部服务调用的情况务必遵循最佳实践完成相应授权操作后再发起请求动作。如果是基于 Kerberos 协议实现的身份鉴别过程的话,请参照给出的例子仔细核对自己这边是否有遗漏任何必要字段填写完整无误。 ```java // Example Code Snippet Showing How To Configure And Use A Customized RedisTemplate With Proper Exception Handling Mechanism In Place. @Bean public RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory factory){ final RedisTemplate<String, Object> template = new RedisTemplate<>(); try { template.setConnectionFactory(factory); // Set key serializer... StringRedisSerializer stringKeySeriaizer = new StringRedisSerializer(); template.setKeySerializer(stringKeySeriaizer); // Set value serialzer... etc return template; } catch(IllegalStateException e){ log.error("Failed to initialize Redis Template due to illegal state.",e); throw e; // Re-throw after logging so caller knows something went wrong. } } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值