AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / server / 问题 / 933791
Accepted
mveroone
mveroone
Asked: 2018-10-04 06:55:06 +0800 CST2018-10-04 06:55:06 +0800 CST 2018-10-04 06:55:06 +0800 CST

NAT/LB 后面的 Apache Kafka 配置

  • 772

为了使我们的 Kafka 集群既可以从 Internet 也可以从我们的专用网络使用,我们认为可以这样配置 Kafka:

Private VIP:9000 => All brokers:9092 (topology query only)
Private VIP:9001 => Broker #1:9092
Private VIP:9002 => Broker #2:9092
...
Public VIP:9000 => All brokers:9092 (topology query only)
Public VIP:9001 => Broker #1:9092
Public VIP:9002 => Broker #2:9092
...

我们以这种方式配置了负载均衡器,然后是我们的代理:

listeners=PLAINTEXT://<server_priv_ip>:9092
advertised.listeners=INTERNAL://<private_VIP>:9001,EXTERNAL://<public_vip>:9001
listener.security.protocol.map=INTERNAL:PLAINTEXT,EXTERNAL:PLAINTEXT
inter.broker.listener.name=INTERNAL

现在,正如您所料,Kafka 代理不会启动:

ERROR Exiting Kafka due to fatal exception (kafka.Kafka$)
java.lang.IllegalArgumentException: requirement failed: Each listener must have a different port, listeners: INTERNAL://<private_VIP>:9001,EXTERNAL://<public_vip>:9001

从我的管理员的角度来看,我的方法是完全合乎逻辑的,尽管我预计生产者/消费者会从他们联系经纪人的任何地方获得两个地址的问题。在 2 个不同的地址上使用相同的端口似乎是合乎逻辑的,并且可以提高清晰度……

第一个问题:为什么这是错误的?
第二个问题:如果不是这样,我怎样才能实现我的目标?(大多数选项都在桌面上)

load-balancing
  • 2 2 个回答
  • 4493 Views

2 个回答

  • Voted
  1. Best Answer
    mveroone
    2018-10-10T08:22:38+08:002018-10-10T08:22:38+08:00

    我们已经与 Kafka 专家进行了交谈,这就是结果。

    简而言之,虽然 kafka 在其知识中具有侦听器名称来区分 2 个侦听器,但他需要知道连接的客户端想要到达哪个侦听器,并且只能使用传入端口这样做。

    如果侦听器和广播的侦听器具有相同的端口,它们也会相互映射,因此您需要它们匹配。

    最后,这就是我们所做的:

    listeners=INTERNAL://hostname:900N,EXTERNAL://hostname:910N,REPLICATION:hostname:9092
    advertised.listeners==INTERNAL://vip:900N,EXTERNAL://vip:910N,REPLICATION:hostname:9092  
    listeners.security.protocol.map=INTERNAL:PLAINTEXT,EXTERNAL:PLAINTEXT,REPLICATION:PLAINTEXT
    inter.listener.protocol=REPLICATION
    

    其中“N”是经纪人 ID(从 1 开始计数)

    在负载均衡器上,我们将 VIP 的每个端口映射到代理的 IP 地址以及端口 9000(内部网络)和 9100(外部网络)上的虚拟 IP,它们映射到每个代理的相关侦听器。

    这有点矫枉过正,但它可以按预期工作(只要__consumer_offset复制 kafka 内部元数据主题)

    • 2
  2. Milan Kothari
    2022-02-25T00:52:03+08:002022-02-25T00:52:03+08:00

    在kafka中有一种情况是无法实现的。

    1. 集群中设置了三个 kafka 服务器。Kafka 服务器具有私有 IP,只能从其自己的 VPN 访问,例如 KAFKA VPN。
    2. 当机器连接到 KAFKA VPN + Office 网络时,可以访问一个公共 IP。此公共 IP 仅用于对私有 IP 进行 NAT,以便人们可以通过 Internet 从 Office 网络访问它。
    3. Office Network 有一位消费者。现在消费者可以在连接到 KAFKA VPN 时使用公共 IP 使用来自 Kafka 的主题。

    现在我想通过断开 KAFKA VPN 来连接公共 IP。那可能吗 ?网络工作正常。我检查了 Trace Route 和 Reversed Trace Route。

    我认为生产者/kafka 服务器/消费者配置存在一些问题

    NAT 配置:: 10.XX.XX.XX:9092 -> AA.XX.XX.XX:9095 10.XX.XX.XY:9092 -> AA.XX.XX.XX:9093 10.XX.XX。 XZ:9092 -> AA.XX.XX.XX:9094

    生产者配置::bootstrap-servers=10.XX.XX.XX:9092,10.XX.XX.XY:9092,10.XX.XX.XZ:9092

    Kafka 配置:: listeners=SASL_SSL://0.0.0.0:9092,EXTERNAL://0.0.0.0:9095 广告.listeners=SASL_SSL://10.XX.XX.XX:9092,EXTERNAL://AA.XX .XX.XX:9095 listener.security.protocol.map=SASL_SSL:SASL_SSL,EXTERNAL:SASL_SSL

    消费者配置:: sh kafka-console-consumer.sh --bootstrap-server AA.XX.XX.XX:9093,AA.XX.XX.XX:9094,AA.XX.XX.XX:9095 --topic test --consumer.config 消费者.properties

    未连接到 KAFKA VPN 时出现的错误:: [2022-03-02 17:35:58,236] WARN [Consumer clientId=consumer-test_group-1, groupId=test_group] 连接到节点 2147483646 (10.XX .XX.XX/10.XX.XX.XX:9092) 无法建立。经纪人可能不可用。(org.apache.kafka.clients.NetworkClient) [2022-03-02 17:36:26,421] WARN [Consumer clientId=consumer-test_group-1, groupId=test_group] 连接到节点 2 (10.XX.XX.XY /10.XX.XX.XY:9092) 无法建立。经纪人可能不可用。(org.apache.kafka.clients.NetworkClient) [2022-03-02 17:36:47,467] WARN [Consumer clientId=consumer-test_group-1, groupId=test_group] 连接到节点 3 (10.XX.XX.XZ /10.XX.XX.XZ:9092) 无法建立。经纪人可能不可用。(org.apache.kafka.clients.NetworkClient

    现在一些问题是::

    1. 即使我使用公共 IP 连接到 Kafka,为什么它在日志中显示私有 IP?
    2. 生产者中的引导服务器和消费者中的引导服务器是否必须完全相同?
    3. 如何检查元数据请求的响应。kafka 有什么程序可以检查吗?就像 kafka-console-consumer 一样。
    4. 我应该如何解决这个问题?
    • 考虑 SASL 和 SSL 属性和证书。

    如果有人在这方面帮助我,那就太好了

    谢谢,米兰K

    • 0

相关问题

  • 网络负载平衡服务器无法相互通信

  • 用于网络监控的路由/代理 SNMP 陷阱(或 Netflow、通用 UDP 等)的解决方案?

  • 防止拒绝服务攻击的最佳技术是什么?

  • 添加备份互联网连接需要哪些硬件?

  • 什么是最有效的 Windows 负载平衡解决方案?

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    新安装后 postgres 的默认超级用户用户名/密码是什么?

    • 5 个回答
  • Marko Smith

    SFTP 使用什么端口?

    • 6 个回答
  • Marko Smith

    命令行列出 Windows Active Directory 组中的用户?

    • 9 个回答
  • Marko Smith

    什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同?

    • 3 个回答
  • Marko Smith

    如何确定bash变量是否为空?

    • 15 个回答
  • Martin Hope
    Tom Feiner 如何按大小对 du -h 输出进行排序 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    Noah Goodrich 什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent 如何确定bash变量是否为空? 2009-05-13 09:54:48 +0800 CST
  • Martin Hope
    cletus 您如何找到在 Windows 中打开文件的进程? 2009-05-01 16:47:16 +0800 CST

热门标签

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve