【问题标题】:How to process messages outside GCP in a Kafka server running on GCP如何在 GCP 上运行的 Kafka 服务器中处理 GCP 外部的消息
【发布时间】:2020-10-09 00:13:41
【问题描述】:

我一直试图在我的本地机器上运行一个消费者,连接到在 GCP 中运行的 Kafka 服务器。

Kafka 和 Zookeeper 在同一个 GCP 虚拟机实例上运行

第 1 步:启动 Zookeeper

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

第 2 步:启动 Kafka

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

如果我在 GCP VM 实例中运行消费者,它可以正常工作:

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

我验证了防火墙规则,并且我可以从本地计算机访问,我可以访问公共 IP 和运行 Kafka 服务器的端口。

我测试了很多选项,改变了kafka的server.properties,例如:

advertised.host.name=public-ip

advertised.listeners=public-ip

按照connecting-kafka-running-on-ec2-machine-from-my-local-machine 的回答没有成功。

【问题讨论】:

    标签: google-cloud-platform apache-kafka google-compute-engine kafka-consumer-api


    【解决方案1】:

    来自官方documentation

    advertised.listeners

    监听器发布到 ZooKeeper 供客户端使用。在 IaaS 环境中,这可能 需要不同于代理绑定的接口。如果 未设置,将使用侦听器的值。不像 监听器发布 0.0.0.0 元地址是无效的。

    在测试了许多不同的选项后,这个解决方案对我有用:

    设置两个监听器,一个 EXTERNAL 使用公共 IP,一个 INTERNAL 使用私有 IP:

    # Configure protocol map
    listener.security.protocol.map=INTERNAL:PLAINTEXT,EXTERNAL:PLAINTEXT
    
    # Use plaintext for inter-broker communication
    inter.broker.listener.name=INTERNAL
    
    # Specify that Kafka listeners should bind to all local interfaces
    listeners=INTERNAL://0.0.0.0:9027,EXTERNAL://0.0.0.0:9037
    
    # Separately, specify externally visible address
    advertised.listeners=INTERNAL://localhost:9027,EXTERNAL://kafkabroker-n.mydomain.com:9093
    

    解释:

    在许多场景中,例如在 AWS 上部署时,外部 集群中 Kafka 代理的广告地址不同于 Kafka 使用的内部网络接口。

    还记得设置您的防火墙规则以公开 EXTERNAL 侦听器上的端口以从外部计算机连接到它。

    注意:仅限授权客户访问非常重要。 您可以使用网络防火墙规则来限制访问。本指南 适用于同时涉及 RFC 1918 和公共 IP 的场景; 但是,当使用公共 IP 地址时,更重要的是 保护您的 Kafka 端点,因为任何人都可以访问它。

    取自google solutions

    【讨论】:

    • 这个博客也解释了这个概念:confluent.io/blog/…
    • 当您说 listeners=INTERNAL://0.0.0.0:9027,EXTERNAL://0.0.0.0:9037 时,我应该用我的内部 IP 替换单词 INTERNAL,用我的外部 IP 替换 External IP,例如听众 = 10.153.0.3://0.0.0.0:9027, 31.83.170.127://0.0.0.0:9037 ?
    • 不,只是 INTERNAL 和 EXTERNAL 词之后的 IP 地址。 Advertisingd.listeners=INTERNAL://localhost:9027,EXTERNAL://kafkabroker-n.mydomain.com:9093 localhost:9027 -> 您可能会将其保留为 localhost,除非您使用某些 DNS 解析器,否则可能需要更改港口。 kafkabroker-n.mydomain.com:9093 -> 这很可能会随着您自己的外部 IP 或 DNS 而改变。
    猜你喜欢
    • 2020-08-13
    • 2019-11-19
    • 2021-10-02
    • 1970-01-01
    • 1970-01-01
    • 2021-10-09
    • 1970-01-01
    • 2019-03-08
    • 1970-01-01
    相关资源
    最近更新 更多