【问题标题】:In-order processing in Azure event hubs with Partitions and multiple "event processor" clients在带有分区和多个“事件处理器”客户端的 Azure 事件中心中按顺序处理
【发布时间】:2020-12-07 19:20:37
【问题描述】:

我计划利用 Azure 事件中心中的所有 32 个分区。 要求:每个分区的“有序”处理至关重要。 问题:如果我将 TU(吞吐量单位)增加到 所有 32 个分区的最大可用 20,我将获得 40 MB 的出口。假设我计算出我需要 500 个并行客户端线程并行处理 (EventProcessorClient) 来满足我的吞吐量需求。如何在满足我的“订购”要求的同时使用 EventProcessorClient 实现这种级别的并行性? 顺便说一句,在 Kafka 中,我可以在一个主题中创建 500 个分区,而 Kafka 每个分区只允许 1 个线程来保证事件顺序。

【问题讨论】:

    标签: azure apache-kafka azure-eventhub event-stream-processing


    【解决方案1】:

    简而言之,您确实无法按照您所描述的方式做您想做的事情。

    EventProcessorClient 绑定到给定的事件中心和消费者组组合,并将与使用同一事件中心/消费者组的其他处理器协作以平均分配负载。添加比分区数量更多的处理器将导致它们处于空闲状态。您可以通过使用额外的消费者组来解决这个问题,但EventProcessorClient 实例只会与同一消费者组中的其他人协调;每个消费者组的处理器将独立运行,您最终会多次处理相同的事件。

    您可能没有考虑到服务端的配额。 假设您使用的是标准层,则对于一个事件中心,您可以在所有分区中拥有标准层的最大并发读取数为 100。对于给定的事件中心,您最多可以创建 20 个使用者团体。每个消费者组一次最多可以有 5 个活跃的读者。 Event Hubs Quotas 页面讨论了这些限制。也就是说,dedicated instance 允许更高的限制,但您仍然与您希望实现的严格排序存在差距。

    如果不了解您的具体应用场景、处理事件需要多长时间、事件主体的相对大小以及您的吞吐量目标是什么,则很难提供更适合您需求的替代建议.

    【讨论】:

    • 谢谢! 5个问题。 1) 如果我有 20 个消费者组和 5 个并发阅读器,我可以在标准层中拥有最多 100 个并行阅读器吗? 2)“EventProcessorClient”是否会在每个消费者组内自动协调“偏移量”,以保证仅在每个“偏移量”内进行排序? 3) 我猜如果我每个分区只有一个读卡器,可以保证订购吗? 4) 超过 100 个并发读者的唯一方法是转到专用层? 5)如果建议每个分区和消费者组之间进行1对1的映射,那么在“标准”层中拥有超过20个分区没有意义吗?
    • 我将把它分解成几个 cmets 来解决格式限制。 1) 是的
    • 2) 处理器将保证单个分区中的事件排序,以实现一个事件中心+消费者组配对。 2a) 事件中心具有“至少一次”交付保证;您的处理需要考虑可能会破坏您的严格排序的潜在重复。这在扩展处理器时最常见。
    • 4) 您应该与支持人员或您的客户代表联系。在某些情况下,可以根据支持请求扩展超过 32 个分区。
    • 5) 我相信是这样,但我在这里只有大约 80% 的把握。我可能弄错了,分区可能会被考虑到配额中。如果是这样,您将能够为事件中心实例的每个分区、每个使用者组拥有 5 个读取器。我会仔细检查以确保我没有在这里误导您。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多