Kafka 允许外网访问
摘要
-
本文介绍 Kafka 的 通信协议,以及如何开启外网访问。
-
本文使用的 Kafka 版本为 3.9.1。Kafka 团队宣布 3.9 会是 最后一个还带有被弃用的 ZooKeeper 模式 的主要版本。以后版本(如 4.0)将完全弃用 ZooKeeper。
Kafka 的 通信协议
-
Kafka 主要支持四种安全协议
协议名称 | 加密 | 认证 | 说明 | 推荐场景 | 理由 |
---|---|---|---|---|---|
PLAINTEXT | ❌ 否 | ❌ 否 | 无加密、无认证(默认最简单) | 开发 / 测试环境、内网集群通信 | 简单、易调试;网络可信,性能优先 |
SSL | ✅ 是 | ✅ 可选 | 使用 TLS/SSL 加密通信,可配置客户端证书认证 | 外网客户端访问 | 支持数据加密,可选认证,保证安全 |
SASL_PLAINTEXT | ❌ 否 | ✅ 是 | 使用 SASL(用户名密码)认证,但不加密数据 | 需要用户认证但局域网环境 | 有认证,但不加密,性能开销低 |
SASL_SSL | ✅ 是 | ✅ 是 | 同时支持 SASL 认证和 SSL 加密(最安全) | 外网客户端访问 | 既有认证又加密,安全性最高 |
-
在
config/server.properties
文件中 可以看到如下配置
1 | # 套接字服务器监听的地址。 |
配置项 | 作用 | 说明值 |
---|---|---|
listeners |
Kafka 实际监听的地址(Broker 对外开放的端口) | PLAINTEXT://:9092 这里 PLAINTEXT 是监听器名称,并不是协议名称,实际上可以配置为任何值,具体协议是通过 listener.security.protocol.map 配置的映射关系来确定。 |
advertised.listeners |
Kafka 告诉客户端应该用哪个地址连接(客户端最终连的) | 默认使用 listeners 的值 |
listener.security.protocol.map |
映射监听器名称到通信安全协议(如明文、SSL、SASL 等) | PLAINTEXT:PLAINTEXT ,前面是监听器名称,后面是协议名称 |
仅需内网访问
1 | listeners=PLAINTEXT://0.0.0.0:9092 |
允许外网访问
1 | listeners=PLAINTEXT://0.0.0.0:9092 |
内外网都要访问(推荐双通道方式)
1 | # 这里 INTERNAL 和 EXTERNAL 分别是自定义的监听器名称,此时内网端口为 9092,外网端口为 9093 |