kafka 外部机器连接不上由于防火墙问题

本文探讨了Kafka在实际应用中常见的四个问题:版本选择、防火墙设置、服务器配置及消息发送失败,并提供了详细的解决方案,包括如何选择合适的版本、调整防火墙规则、正确配置服务器参数等。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、版本问题:

在apache官网上,有两个kafka0.10的版本一个是scala2.11的一个是2.10的,据scala官网描述,scala2.11主要在jdk6以上使用,scala2.10在主要在java5上使用,所以我们可以根据自己机器的java环境来选择正确的kafka安装使用,在客户端方面,版本最好和服务器保持一直,以免出现不必要的麻烦。

2、防火墙问题:

首先确保kafak服务器的端口在开着,默认端口是9092,可以直接使用service iptables stop关闭防火墙,觉得太暴力的可以只打开对应的端口即可:

打开方式1:vi /etc/sysconfig/iptables   在结尾添加:-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 9092-j ACCEPT

打开方式2:kafka的网络协议是基于TCP的二进制网络协议,所以执行下列命令即可

iptables -I INPUT -p tcp --dport 9092 -j ACCEPT  && service iptables save &&service iptables restart

3、kafka服务器配置问题,咱们先看一段kafka的配置描述

# Hostname and port the broker will advertise to producers and consumers. If not set, 
# it uses the value for "listeners" if configured.  Otherwise, it will use the value
# returned from java.net.InetAddress.getCanonicalHostName().

在我们使用默认配置时hostname和advertise.host.name是被注释掉的,所以系统会调用InetAddress.getCanonicalHostName()方法获取,这个值一般是localhost,如果kafka的消费者或者生产者那到这个localhost只能去本机kafka服务器消费或生产消息,所以当我们在本机使用时没问题,而一旦连的是远程的kafka服务器,使用localhost去消费本机的消息,这肯定是不可以的,感觉kafka这样设计又一点不太方便。所以我们在使用远程kafka服务器时应该把../kafka/config/service.properties 中的advertised.host.name=<远程kafka服务器的ip地址>。

4、Failed to send messages after 3 tries

http://blog.youkuaiyun.com/uniquechao/article/details/20073953
原文:https://blog.youkuaiyun.com/cysdxy/article/details/52337364 
 

### Kafka 3.2.1 远程客户端连接配置方法 要在 Apache Kafka 3.2.1 中启用远程客户端连接,需要调整 Kafka Broker 的配置文件 `server.properties` 或通过命令行参数传递相关设置。以下是实现这一目标的关键步骤及相关参数说明。 #### 修改监听器配置 Kafka 使用 Listener 来指定其绑定的 IP 地址和端口号。为了支持远程访问,需确保以下两个主要属性被正确定义: - **listeners**: 此属性用于定义 Kafka Broker 所使用的协议及其对应的主机名或 IP 和端口组合。如果希望允许外部机器访问,则应将其设为实际服务器可公开访问的地址而非仅限本地回环接口 (localhost)。 ```properties listeners=PLAINTEXT://<your_server_ip>:9092 ``` - **advertised.listeners**: 当客户端尝试建立到某个 broker 上时,它依赖此字段返回给生产者或者消费者作为他们应该用来联系该broker的信息;因此当部署跨越多个数据中心或者其他复杂网络环境中尤其重要的是让这个值反映真实对外可见的位置而是内部私网IP. 如果您的环境中有防火墙规则阻止直接暴露真实的物理机地址给公网用户的话,那么这里就需要填写DNS解析后的域名形式或者其他能够穿越这些障碍到达目的地方案下的虚拟映射地址. ```properties advertised.listeners=PLAINTEXT://<external_accessible_hostname_or_IP>:9092 ``` 上述两项都需要明确指出具体的网络位置以便其他节点找到并发起通讯请求[^1]. #### 跨域安全考量 除了基本连通性的设定之外,还应当考虑安全性方面的要求: - 启用SASL/SSL认证机制保护数据传输过程中的隐私性和完整性; - 设置ACLs(访问控制列表),精细化管理哪些主体拥有何种权限去操作特定主题的消息队列资源等等措施都是推荐实施的最佳实践之一.[^1] 最后记得重启所有的kafka服务实例使更改生效前先备份原始配置以防万一出现问题时候快速恢复原状! ```bash sudo systemctl restart kafka ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值