【问题标题】:How can I control request/message send by a Kafka cluster?如何控制 Kafka 集群发送的请求/消息?
【发布时间】:2019-11-23 09:29:03
【问题描述】:

假设,我有 3 个 Kafka 代理、一个 Zookeeper、50 个生产者、50 个消费者和 1 个主题 (testTopic1)。 并且所有消费者都订阅了testTopic1。现在我将与 50 个生产者同时向同一主题 (testTopic1) 发送 50 条消息。现在我希望 Kafka 集群不要同时向消费者发送超过 40 条消息。剩下的 10 个将继续排队或丢弃它。

可能是Kafka中的负载均衡。 我不明白我将如何完成这项工作。我是 Kafka 的新手,请帮忙。

【问题讨论】:

    标签: apache-kafka load-balancing kafka-cluster


    【解决方案1】:

    Kafka 经纪人很愚蠢。他们无法限制/删除发布到 kafka 的消息。

    如果所有 kafka 消费者都属于同一个消费者组,并且有 50 个消费者,那么所有消费者可能会或可能不会同时收到所有这 50 条消息,具体取决于密钥。如果多条消息具有相同的键,则所有相同键的消息将被单个消费者一一监听。如果所有 50 条消息都有不同的键,那么它们可能会或可能不会(取决于键的哈希)被相同或不同的消费者监听。

    您能否更详细地解释您的用例以便更好地理解。

    【讨论】:

    • 当然...我在微服务上使用它。我的每个服务都与外部节点通信。那些外部节点有一些限制,我一次不能发送 50 个请求。这就是为什么我要控制我的请求。
    • “一次 50 个请求”是什么意思?每秒 50 次调用还是什么?
    • 并发 50 个调用。 50 个电话只是一个例子。它可以或多或少。
    • 没有什么比并发。它可以是 50 次调用/秒或 50 次调用/纳秒,或者其他,但与 50 次并发不同。它需要可衡量。
    • 每秒 50 次调用。
    【解决方案2】:

    Kafka 代理不能随机丢弃消息。但是您可以在消费者内部实现逻辑以在处理时删除消息。

    如果您有一个主题和该主题的单个分区;您的消费者中的一个属于同一消费者组将处理您的所有消息,因为分区保证了消费者端处理中的顺序。

    如果您有 10 个消费者组,每个消费者组属于 5 个消费者,并且主题只有一个分区,则至少有 10 个消费者处理来自主题的消息。如果consumer-group-1 中的一个consumer 无法处理该消息,则来自同一consumer group 的另一个consumer 将处理该消息。

    如果你需要在处理时随机丢弃 10 条消息中的 1 条,你可以通过调整消费者端的逻辑来实现。但是,如果系统配置为在代理端维护偏移量管理,则根据代理的消费者组偏移量,所有数据都会在其端进行处理。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-06-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-01-09
      • 2020-09-16
      • 2023-02-01
      • 1970-01-01
      相关资源
      最近更新 更多