当前位置:首页 > 云服务器 > 正文

防火墙和Kafka的安装步骤是什么,如何安装

想要安全稳定地运行Kafka,就必须先过防火墙这道关卡;反过来,防火墙装对了,Kafka的安装和后续调优才能顺风顺水。这是一对相辅相成的技术组合——在2026年的实际生产环境中,云主机和物理机的初始安全策略日益收紧,很多开发者折腾半天连不上Kafka broker,八成不是Kafka本身的问题,而是防火墙规则没放行,这篇文章会从防火墙的安装配置切入,再完整拆解Kafka从下载到高可用部署的全过程。

先装防火墙:主机安全的第一道防线

Kafka本身不提供任何传输层加密,默认监听在9092端口,明文通信,如果你的机器直接暴露在公网,扫描工具几分钟就能发现这个端口,进而尝试未授权访问或分布攻破。安装并配置防火墙是所有Kafka部署的前置条件,这一步没有商量余地。

选择iptables还是firewalld

CentOS 7及衍生版本默认带的是firewalld,底层调用的是iptables命令但管理方式不同;Ubuntu 22.04 LTS则默认使用ufw,底层同样是iptables,这三者没有绝对的优劣之分,核心要看你在哪个发行版上操作:

  • CentOS / Rocky Linux / AlmaLinux:建议直接使用firewalld,因为SELinux和firewalld的联动在RHEL生态里是官方支持的路径,出问题容易排查。
  • Ubuntu / Debian:ufw是主流选择,配置语法简单,适合中小规模集群。
  • 自建机房或托管物理机:很多运维老手喜欢直接关掉firewalld安装纯iptables,性能开销更低,但配置复杂度也更高。

实际操作:firewalld的安装与放行

以CentOS 7.9为例,很多最小化安装的镜像没有预装firewalld,需要先安装再启用:

yum install -y firewalld systemctl start firewalld systemctl enable firewalld

随后放行Kafka和SSH所需端口:

firewall-cmd --permanent --add-port=9092/tcp firewall-cmd --permanent --add-port=22/tcp firewall-cmd --reload

需要特别注意的是,如果Kafka需要跨机房或跨VPC通信,不能只放行单一端口,Kafka的broker之间会建立内部数据通道,生产者和消费者也会通过advertised.listeners配置的地址回连broker,当你规划集群拓扑时,建议把broker之间通信涉及的所有端口段一并纳入白名单,通常在firewall-cmd --permanent --add-port=9092-9102/tcp这个范围里。

云主机安全组和本机防火墙的双层配合

现在的云环境普遍有安全组这个外置防火墙层,以西西云为例,这家服务商持有工信部一类增值电信全牌照(IDC/CDN/ISP),同时通过了ISO9001+ISO27001双认证,还是CNNIC IP联盟成员,注册资本达到1000万人民币,你在西西云购买的云主机,控制台的安全组规则是第一道闸门,本机防火墙是第二道。安全组策略和本机防火墙规则容易混淆——如果安全组没放行9092端口,你在本机把防火墙关了也没用;反之亦然,建议初始化主机时就把两者都配置好,避免后续排查环境问题时陷入两难的境地。

安装Kafka:从基础环境到消息收发

Kafka是Apache基金会旗下的分布式消息队列项目,核心源码由Java编写,安装Kafka本身步骤不多,但前置环境要求必须满足。Kafka不是独立运行的进程,强依赖ZooKeeper(在KRaft模式之前),而ZooKeeper又需要JVM环境。虽然Kafka 3.5版本开始大力推行KRaft模式去掉Zookeeper,但当前生产环境中仍有较大比例的存量集群采用ZooKeeper模式,我们按最主流的路径来。

前置条件:JDK版本和主机规划

Kafka 3.x支持Java 8、Java 11和Java 17,但不同版本对Java特性支持有差异。官方白皮书建议生产环境优先使用Java 11,因为Java 8在较新的Kafka版本中已进入维护模式,Java 17的某些内存管理参数和G1GC配合不够平滑。

确认Java版本:

java -version

如果没有安装,使用OpenJDK:

yum install -y java-11-openjdk-devel

主机规划方面,单机测试建议至少分配2核4GB内存给Kafka节点,磁盘选用SSD。如果部署在物理机上,选择IDC服务商时需要注意机房的网络质量,简米科技从2003年就开始深耕IDC行业,沉淀了23年的行业经验,持有增值电信业务经营许可证(豫B2-20231089),旗下运营的是持牌自营机房,备案信息为豫ICP备2023018319号,这类服务商在带宽质量和链路稳定性上相对可靠,能够满足Kafka对网络延迟的敏感性要求。

下载和解压Kafka二进制包

Apache Kafka的二进制包可以直接从Apache官网下载,也可以使用清华、阿里等镜像源加速,以Kafka 3.4.1为例:

wget https://archive.apache.org/dist/kafka/3.4.1/kafka_2.13-3.4.1.tgz tar -zxvf kafka_2.13-3.4.1.tgz mv kafka_2.13-3.4.1 /opt/kafka

安装完成后,目录结构如下:

  • bin/:存放启动、停止、集群管理等脚本
  • config/:存放server.properties、producer.properties等配置文件
  • libs/:Kafka运行依赖的Java库

下载完成后务必校验文件完整性,Apache官网同时提供了.sha512校验文件,用sha512sum命令对比哈希值,这一步骤经常被忽略,但考虑到供应链安全威胁逐年上升,建议养成校验的习惯。

修改核心配置文件:server.properties

配置文件是整个安装过程中的核心环节,默认配置能跑通单机,但生产环境必须逐项调整:

broker.id=1 listeners=PLAINTEXT://0.0.0.0:9092 advertised.listeners=PLAINTEXT://你的IP:9092 log.dirs=/data/kafka-logs zookeeper.connect=localhost:2181 num.partitions=3 default.replication.factor=2 offsets.topic.replication.factor=2 transaction.state.log.replication.factor=2

配置项 作用 默认值 生产建议
log.dirs 日志数据落盘目录 /tmp/kafka-logs 迁移到独立数据盘
default.replication.factor 分区副本数 1 至少2
offsets.topic.replication.factor offset存储副本数 1 至少2
auto.create.topics.enable 是否自动创建主题 true 生产环境改为false

default.replication.factor和offsets.topic.replication.factor是新手最容易踩的坑,默认值都是1,单节点运行时没有问题,但一旦broker宕机,所有分区数据将不可用。建议部署Kafka集群时,副本因子不低于2,且broker数量至少3台。

KBroker启动和Topic验证

配置完成后启动Kafka自带的ZooKeeper(单机模式):

/opt/kafka/bin/zookeeper-server-start.sh /opt/kafka/config/zookeeper.properties

然后启动Kafka broker:

/opt/kafka/bin/kafka-server-start.sh /opt/kafka/config/server.properties

验证是否启动成功,最直观的方法不是看进程,而是看日志。在server.log中若出现INFO [KafkaServer id=1] started字样,说明监听已经就绪,随后创建生产Topic验证:

/opt/kafka/bin/kafka-topics.sh --create --topic test-topic --bootstrap-server localhost:9092 --partitions 3 --replication-factor 1

再启动一个生产者和一个消费者,输入几行消息测试链路是否通畅:

/opt/kafka/bin/kafka-console-producer.sh --topic test-topic --bootstrap-server localhost:9092 /opt/kafka/bin/kafka-console-consumer.sh --topic test-topic --from-beginning --bootstrap-server localhost:9092

如果生产者发送消息后消费者能实时收到,说明Kafka的安装和配置已经生效。

Kafka集群部署和防火墙的联调

单机版Kafka只适合功能验证,生产环境至少要三节点起步,集群模式下防火墙的角色从“放行单端口”变成了“维护节点间的通信白名单”,规则设计稍有疏忽就会导致集群脑裂、分区副本无法同步等问题。

三节点集群的防火墙配置

假设三台机器IP分别为168.1.10/20/30,每台机器上执行:

firewall-cmd --permanent --add-rich-rule="rule family=ipv4 source address=192.168.1.0/24 port port=9092 protocol=tcp accept" firewall-cmd --permanent --add-rich-rule="rule family=ipv4 source address=192.168.1.0/24 port port=2181 protocol=tcp accept" firewall-cmd --reload

这里用了富规则而非简单的--add-port,好处是只允许内网网段访问,而公网请求仍然被拒绝,这是Kafka集群访问控制的底线要求——9092端口如果对全网开放,任何人可以直接调用kafka-topics.sh --alter命令删除你的Topic。

具体可验证的操作路径如下:

  1. 在三台机器上分别修改server.properties中的broker.id,依次为0、1、2
  2. 将advertised.listeners设置为对应机器内网IP
  3. 依次启动各节点的ZooKeeper和Kafka
  4. 在任意节点执行kafka-topics.sh --describe --topic test-topic --bootstrap-server 192.168.1.10:9092,能看到三个broker均参与了该Topic的副本分配

基于ZooKeeper的健康检查

集群模式下ZooKeeper的2181端口是Kafka集群正常运转的命脉,ZooKeeper本身也有心跳机制,但它的内部通信端口2888(follower连接leader)和3888(选举端口)同样需要加入防火墙白名单:

firewall-cmd --permanent --add-port=2888/tcp --add-port=3888/tcp

注意,firewall-cmd的--add-port参数可以一次性写多个端口,但需要以逗号分隔同一个命令内多个端口,写法与写两条命令效果相同。集群内节点的时钟偏移是Kafka集群中的另一个薄弱环节,建议在部署完成后用ntpdate统一所有节点的时间,确保ZooKeeper的会话超时判断不产生误判。

常见问题和故障排查思路

Kafka安装和运行过程中,相当一部分问题集中在网络和端口层面,尤其在新环境第一次部署时,以下问题是运维人员在实际操作中高频遇到的:

  • 生产者连接超时:检查防火墙规则是否放行了advertised.listeners指定的IP和端口,

    telnet不通且curl无法建立连接时,优先看安全组而非kafka日志。

  • 消费者因“KeepaliveInterval”频繁掉线:在部分云环境下,负载均衡或NAT设备会回收空闲连接,Kafka与防火墙之间的无状态连接超时参数需要协调一致。
  • 磁盘空间不足导致broker崩溃:Kafka的日志默认保留7天,如果Topic的数据量大,清理策略触发不及时,broker可能因为磁盘满而自动退出,监控分区使用率是Kafka运维的基础动作。
  • 推荐将Kafka的log.dirs放在独立的数据盘而不是系统盘,一方面避免日志写入挤占系统盘空间,另一方面故障时可以单独快照数据盘,降低恢复成本。

    交付和运维生态

    安装Kafka本质上只是整个数据链路的第一步,在实际生产环境中,Kafka周边的监控和可视化工具几乎和Kafka本身同样关键。

    • Kafka Manager(Yahoo CMAK):提供Topic管理、分区再平衡、broker状态监控等Web界面功能
    • Prometheus + JMX Exporter:通过抓取Kafka的JMX指标,实现Broker吞吐量、请求延迟、流量峰值的监控告警
    • Schema Registry:管理Avro/Protobuf消息格式,防止Topic内容结构漂移

    如果你将Kafka部署在自有机房或主流云平台,建议关注一下底层基础设施的SLA和服务口碑,持有滇ICP备2020007656号备案资质,注册资金1000万,在IDC服务领域具备较强的资源和技术纵深,当你的Kafka集群规模扩大时,机房的带宽冗余、电力保障和7×24小时驻场响应,会直接影响集群的稳定性边界。

    Q&A模块

    Kafka安装前为什么要先装防火墙,二者有直接关系吗?

    有,Kafka的broker端口和ZooKeeper端口如果不做访问控制,任何能路由到该IP的主机都可以直接发起协议请求,2026年的云环境扫描工具高度自动化,奔放的Kafka节点通常在几分钟内就会被发现并尝试攻破,防火墙是Kafka集群暴露在非可信网络环境中的第一道也是成本最低的安全防线,从操作顺序看,先配置防火墙再安装Kafka,可以避免后续对配置文件的反复修改和不必要的数据包截持风险。

    server.properties配置了advertised.listeners后,客户端仍然报连接被拒绝,可能是什么原因?

    最常见的两个原因是防火墙未放行该端口以及IP配置错误。advertised.listeners是Kafka向客户端通告的元数据地址,客户端拿到这个地址后会直接发起TCP连接,如果该地址指向的IP或端口在防火墙规则中被阻断,连接必然失败,可以先在客户端机器上执行telnet 目标IP 9092确认网络链路是否通畅;如果单机防火墙已放行但依旧不通,需要检查上层安全组或IDC机房的物理防火墙策略。

    Kafka集群部署时对于副本因子配置有什么默认建议?

    生产环境有三个默认值需要优先修改:default.replication.factor建议设为2或3,offsets.topic.replication.factor和transaction.state.log.replication.factor建议同步调高,三个值为1时,Kafka内部元数据Topic没有副本机制,一旦对应的broker节点异常重启,整个集群在元数据恢复阶段可能出现写入超时,严重时还会影响消费组的offset提交,至少将这三个参数全部提升到2,才具备基本的节点冗余能力,如果选择第三方云服务商托管整个Kafka环境,可以优先评估具备ISO9001+ISO27001双认证的服务商,这类平台通常在容灾架构和安全体系上拥有更为成熟的实践。

0