azure - 在带有分区和多个“事件处理器”客户端的 Azure 事件中心中按顺序处理
问题描述
我计划利用 Azure 事件中心中的所有 32 个分区。要求:每个分区的“有序”处理至关重要。问题:如果我将 TU(吞吐量单位)增加到所有32 个分区的最大可用 20,我得到 40 MB 的出口。假设我计算出我需要 500 个并行客户端线程并行处理 (EventProcessorClient) 来满足我的吞吐量需求。如何在满足我的“订购”要求的同时使用 EventProcessorClient 实现这种级别的并行性?顺便说一句,在 Kafka 中,我可以在一个主题中创建 500 个分区,而 Kafka 每个分区只允许 1 个线程来保证事件顺序。
解决方案
简而言之,你真的不能按照你描述的方式做你想做的事情。
绑定到给定的EventProcessorClient
事件中心和消费者组组合,并将与使用相同事件中心/消费者组的其他处理器协作以均匀分配负载。添加比分区数量更多的处理器将导致它们处于空闲状态。您可以通过使用其他消费者组来解决此问题,但EventProcessorClient
实例只会与同一消费者组中的其他人协调;每个消费者组的处理器将独立运行,您最终会多次处理相同的事件。
您可能没有考虑到服务端的配额。假设您使用的是标准层,则对于一个事件中心,您可以在所有分区中拥有标准层的最大并发读取数为 100。对于给定的事件中心,您最多可以创建 20 个使用者团体。每个消费者组一次最多可以有 5 个活跃的读者。事件中心配额页面讨论了这些限制。也就是说,专用实例允许更高的限制,但您仍然与您希望实现的严格排序存在差距。
在不了解您的具体应用场景、处理事件需要多长时间、事件主体的相对大小以及您的吞吐量目标是什么的情况下,很难提供更适合您需求的替代建议。
推荐阅读
- php - Symfony2.7:警告:count():参数必须是数组或实现可计数的对象
- javascript - 为什么 Chrome 会发送这么多 HTTP 请求?
- reactjs - 由于缺少模块“eslint/lib/formatters/stylish”,我无法在部署到 GCP 后启动 React 应用程序
- javascript - 打开页面时,图表图形不显示所有数据
- tensorflow - 使用随机分布初始化自组织图和使用网络的第一个输入进行初始化有什么区别吗?
- html - 具有“溢出:隐藏”溢出祖父母边距的 Flexbox 子项
- javascript - 为什么 js 脚本在 django 网站上不起作用?
- php - 无法在 Laravel 5.8 中发送 HTML 电子邮件
- javascript - 对具有多个值的字符串使用 Includes 方法
- powershell - 在 Powershell Substring(0, IndexOf) 中不匹配时返回整个字符串