【问题标题】:Does Kafka support ELB in front of broker cluster?Kafka在broker集群前是否支持ELB?
【发布时间】:2016-12-04 15:24:22
【问题描述】:

我有一个关于 AWS 上的 Kafka 代理集群的问题。现在集群前面有一个 AWS ELB,但是当我将生产者或消费者的“bootstrap.servers”属性设置为我的 ELB 的“A”记录(和正确的端口号)时,生产者和消费者无法分别生产和消费消息。我已关闭代理上的所有 SSL,并通过 PLAINTEXT 9092 端口进行连接,我的 ELB 使用该端口将端口 1234 转发到 9092。因此,例如,在我的 Producer Configs 属性中,我将拥有...

bootstrap.servers = (ELB 的“A”记录):1234

更多信息:

  • 我的 ELB 的协议是 TCP/TCP
  • 我在代理上的“advertised.listeners”属性是 PLAINTEXT://(ec2-private-ip):9092

有没有人在 ELB 后面运行 Kafka?如果有,请帮帮我!

【问题讨论】:

    标签: apache-kafka


    【解决方案1】:

    您可以将 ELB 用作 bootstrap.servers,但仍需要客户端可以直接访问代理。 ELB 将用于客户端发出的初始元数据请求,以确定哪些主题分区在哪些代理上,但之后它将使用服务器的主机名(或 advertised.listeners 设置,如果您需要自定义它, ,例如在 EC2 实例上可能需要获取服务器的公共 IP)。

    【讨论】:

    • 我还是有点困惑。 ELB 不通过私有 IP 与其实例对话,所以我不希望adverted.listeners 成为私有IP吗?我已经尝试了 ec2s 的公共 IP 和私有 IP,但它们都不起作用。顺便说一句,我正在使用 Java 的 kafka 客户端库。
    • 运行 Kafka 的 EC2 实例可以在单个接口上侦听,但能够接受针对公共和私有 IP 的流量。我试图得到的是ELB用于初始请求以获取有关集群的元数据。之后,客户端需要能够直接与每个主题分区的领导代理交谈。如果您尝试使用 ELB 使 Kafka 集群公开可用,则需要确保每个代理的 advertised.listeners 也可以公开访问。
    • 我觉得自己很笨。所以它实际上是在工作,但 ELB 报告说实例“停止服务”,因为健康检查失败。默认情况下,它在我们的代理上指向端口 80,这是不可“ping”的。因此,ELB 从未将流量路由到任何代理。我们现在有 ELB 在我们的代理上 ping Zookeeper 端口,它工作得很好!知道这一定很愚蠢:p。谢谢您的帮助!它肯定会阐明 Kafka 的工作原理,我相信将来会帮助其他人!
    【解决方案2】:

    恕我直言,不建议向 kafka 集群添加额外的 SLB。

    • Kafka 集群本质上是去中心化的,SLB 会增加单点故障风险,并使集群设置复杂化。
    • 消息收发对网络延迟敏感,SLB肯定会降低消息吞吐量。

    【讨论】:

    • 我期望的不仅仅是意见。这个人问了一个很好的问题——虽然我几乎同意你的观点——但我没有读到任何回答原始问题的内容。
    猜你喜欢
    • 1970-01-01
    • 2018-04-02
    • 2015-08-17
    • 2023-04-05
    • 2018-07-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多