【问题标题】:Is it possible to produce to a kafka topic when only 1 of the brokers is reachable?当只有 1 个代理可以访问时,是否可以生成 kafka 主题?
【发布时间】:2019-05-19 07:59:18
【问题描述】:

当生产者只能访问 1 个代理,生产者无法访问任何 zookeeper 节点,但所有代理都健康且彼此可访问时,是否可以生成 Kafka 主题?

例如,如果我要通过 SSH 隧道生成消息,这将是必需的。如果这是为了临时推送,我可能会创建具有复制因子 1 的主题并将所有分区分配给相关代理,并在事后重新分配分区,但我希望有更灵活的设置。

这都是使用java客户端的。

【问题讨论】:

    标签: apache-kafka kafka-producer-api


    【解决方案1】:

    生产者不与 Zookeeper 交互,所以这不是问题。

    生产者的唯一要求是能够连接到作为他们想要使用的分区的领导者的代理。

    如果您连接到的代理是您要使用的分区的领导者,那么是的,您可以对其进行生产。

    否则它将无法正常工作。此外,创建主题可能无济于事,因为它的分区可以分配给任何代理。此外,为了创建主题,客户端必须连接到控制器,而控制器可能不是您可以访问的代理。

    如果您只能连接到 1 个“事物”,您可能需要考虑使用 REST Proxy 之类的东西。您的“隔离”环境可以将 REST 请求发送到能够连接到集群中所有代理的代理。

    【讨论】:

    • 在我的情况下,我只生产一组预先知道的小型静态主题,因此在独立于生产者的 kafka 环境中创建主题不会有问题。我的想法是使用 kafka-topics 的 --replica-assignment 标志将主题完全确定给一个代理,听起来这种方法可行,但我同意,REST 代理似乎是一种更好的方法.
    • @Mickael Maison 似乎,所有其他代理都可以从通过生产者可访问的代理访问。因此,如果我们通过生产者仅连接到 1 个代理,这将在内部连接到分区的领导者并将其存储在 Kafka 上?这更像是一个场景,其中 1 个代理位于 DM 区域,其他代理、zookeeper 与 LAN 连接。
    • @Sammy 虽然您只需要 1 个代理来引导,但客户端实际上直接连接到所有需要的代理。代理不会在内部将流量转发给其他代理,每个代理只处理自己的流量。
    • @MickaelMaison 谢谢,你是对的。但我假设(只是一个浮动的想法)Partitioner 选择了 3 个分区(托管在 3 个不同的代理上处理几条消息。但只有一个代理可以访问。现在看来这种情况不可能发生因为分区器不会选择从中无法访问的代理。但是由于分区仅托管在不可访问的代理上,因此它必须等待/超时/错误。再次感谢
    • 这取决于您使用的分区器。 DefaultPartitioner 不考虑生产者是否可以连接到所有代理。它只是将消息传播到所有分区。
    猜你喜欢
    • 2022-10-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-12
    • 1970-01-01
    相关资源
    最近更新 更多