将事件路由到 eventhub EventProcessor

2023-11-24

我有不同类型的活动。例如,有些数据是遥测数据,有些是错误信息等。

我认为创建多个 IEventProcessor 实现是一个好主意,每个实现对应一种事件类型。因此每个实现都会以不同的方式处理事件。就像写入文件或数据库一样。

将事件路由到特定 EventProcessor 的最佳方法是什么?

  • 我应该让 EventProcessor 监视特定的分区键吗?如果是,该怎么做?
  • 我应该使用 EventProcessorHost 的构造函数来指定消费者组名称吗?如果是这样,我如何使用 EventHubClient 发送到特定的消费者组?我在那里没有看到指定消费者组的选项。
  • 我是否应该不执行上述任何操作,只检查传入的事件数据中的特定属性,而忽略我不感兴趣的属性?

我必须说,我发现分区键和消费者组(如果有的话)之间的关系记录得很差。

我使用了选项 2,但到目前为止,每个 EventProcessor 都从所有消费者组名称获取消息,而不仅仅是 EventProcessorHost 构造函数中指定的消息。


好问题!

在回答之前 - 我想重申一下我们在构建 EventHub 时遵循的几个原则。

  • 我们希望事件中心成为高度耐用、高吞吐量的事件摄取管道。虽然我们已经在 Azure 上拥有了现有的 pub-sub 服务,例如队列/主题(类似于 AWS SQS、Google Pub-sub),但提出新服务的主要差异化因素是提供更高吞吐量的变体(当然,具有低延迟)。我们能够实现这个目标 - 代价是 - 我们不执行任何每条消息的计算 - 例如在服务上执行过滤器等。当您需要每条消息的语义时 - 例如每条消息的重复数据删除、每条消息的确认接收,在您的情况下,基于每条消息的属性进行过滤- 并且吞吐量要求较低 - 队列/主题可能是您最好的选择。

  • 我们还预计,发件人(或发布者)的规模要大得多,并且根据场景的不同而有很大差异。所以我们引入了 3 种发送模式(发送、使用 PartitionKey 发送、直接发送到分区)。 因此,在发送时,您会注意到 PartitionKey 的概念 - 它将依次转换为特定分区(将 PartitionKey 视为 EventHub 服务的线索,以计算具有相同 PartitionKey 的所有事件在同一分区上的放置)。但是,在使用事件时,EventHub 不直接公开 PartitionKey 的概念。ConsumerGroups 和 PartitionKey 之间没有关系.

  • 接收者通常只是计算角色,数量有限。因此,我们公开了 1 个通用接收(消费)模式 - 从分区接收。现在,在消费事件时,根据不同的因素可能有不同类型的消费者 - 例如:消费速度(实时与历史),或数据类型 - 因此 - 我们暴露了多个消费者群体。虽然您可以创建 20 个 CG,但我们这里有一个有趣的限制 - 购买的每个吞吐量单位可以产生 1 MBPS 输入和 2 MBPS 输出 - 如果在发送端充分利用,将其限制为 2 个 CG。所以,如果您正在处理完全相同的流,并且有不同的方式来处理每个事件,但每个事件都需要相同的时间来处理 - 那么,使用相同的 ConsumerGroup 更有意义。

回答你的问题:这确实取决于。

以下是一些解决方案:

  • 因为,您的场景中存在多种事件类型 - 您需要预见/决定是否有任何场景需要由单个使用者/处理器读取和处理所有类型的事件。一个例子:我们通常看到的是 - 使用一个 ConsumerGroup 您想要所有错误的计数,而其他消费者组实际上会针对每个错误类型执行特定操作。如果您不需要 - 将每个 EventType 发送到不同的 eventhub,然后使用 1 个消费者组和特定的 IEventProcessor - 是一个选项。

  • 如果您有需要将所有事件发送到同一个 EventHub 的场景,并且如果您知道某些事件类型的处理速度(或需要)非常快 - 您应该考虑使用不同的消费者组,每个消费者组绑定到特定的 IEventProcessor 实现,它将忽略其他 EventType。 例如:如果 ErrorInfo 事件和特殊事件need注意 Real-time,如果由于处理速度慢或峰值负载时间高,遥测数据可以接受 15 分钟 - 我会选择一个 ConsumerGroup 并将其命名为 Real-time 并将其与处理 2 的 IEventProcessor 绑定类型 - 错误和特殊。创建第二个 ConsumerGroup 并将其与处理遥测事件的 IEventProcessor 绑定。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

将事件路由到 eventhub EventProcessor 的相关文章

随机推荐

  • 找出 GCC 包含路径是什么[重复]

    这个问题在这里已经有答案了 我正在尝试以编程方式找到 includeLinux 上的路径 据我了解 实际上意味着找到 GCC 认为它是什么 这是真的吗 Clang 是如何做到的 根据http gcc gnu org onlinedocs c
  • 定位第 n 列(由列数组成)

    假设我有这个 ul li test li li test li li test li li test li li test li li test li ul ul column count 2 我想将第一列向右对齐 第二列向左对齐 有没有办
  • 在 bash 中以半交互方式从用户处读取多个项目

    我试图在 shell 脚本中读取用户的多个项目 但没有成功 目的是首先读取文件列表 从标准输入管道读取 然后再读取两次以交互方式获取两个字符串 我想做的是读取要附加在电子邮件中的文件列表 然后是主题 最后是电子邮件正文 到目前为止我有这个
  • 使用 X86 和任何 CPU 的 C# 项目

    假设我有 2 个 Winform 项目 A B 项目 A 目标 NET 2 0 必须在 x86 它是外部库 上运行 并且由于遗留原因 项目 B 目标 NET 4 0 必须在任何 CPU 上运行 现在我需要从项目 B 调用 A 的方法 但它抛
  • 访问 *ngIf 中的模板变量

    我试图在元素上定义一个模板变量 并使用其隐藏属性来识别该元素是否实际存在于 DOM 中 然后根据该元素显示另一个元素 但如果有结构指令 模板变量似乎不会返回值 hr class divider div a Resend Welcome Em
  • 弹出窗口在 ajax 成功处理程序中被阻止

    我正在尝试打开一个弹出窗口 以允许用户通过 Twitter 进行身份验证 而无需离开他们正在查看的页面 我在网络上看到过这种技术的使用 特别是在 Disqus 评论应用程序中 但是 我只能得到两个结果 要么是 弹出窗口被阻止 消息 要么什么
  • python:是否有作为生成器实现的 XML 解析器?

    我想 即时 解析一个大的 XML 文件 我想使用 python 生成器来执行此操作 我已经尝试过 xml etree cElementTree 的 iterparse 这非常好 但仍然不是生成器 其他建议 xml etree cElemen
  • 如何在 Python 中生成 Azure Blob 存储 SAS 令牌的签名?

    我正在尝试按照 Python 中的说明构建 blob 下载 URL 所需的 SAS 令牌MSDN 我的签名字符串如下所示 r n 2016 12 22T14 3A00 3A00Z n 2016 12 22T15 3A00 3A00Z n 2
  • 将 PLINQ 与异步方法相结合

    我正在尝试将我的 PLINQ 语句组合起来 如下所示 Enumerable Range 0 sortedList Count AsParallel WithDegreeOfParallelism 10 Select i gt GetTran
  • 如何在 AngularJS 中加载内容时添加旋转器?

    我在加载内容时使用按钮微调器 当用户单击 搜索 按钮时 内容将加载 此时buttonLabel将更改为 搜索 并显示微调器 此处按钮将被禁用 加载内容后 Promise已解决 buttonLabel将恢复为 搜索 按钮将在此处启用 我已经尝
  • 如何根据活动配置文件访问 application-{profile}.properties 文件

    我需要访问项目位置之外的 application properties 文件 我可以使用以下方法实现相同的目的 Component PropertySources PropertySource value file user home fi
  • Angular4 - 将表单数据发送到rest api

    如何将表单数据发布到外部 REST API 目前我有一个 html 表单
  • 使用 C# 检测文本文件的编码

    我有一组 Markdown 文件要传递给 jekyll 项目 需要使用程序或 API 找到它们的编码格式 即带 BOM 的 UTF 8 或不带 BOM 的 UTF 8 或 ANSI 如果我传递文件的位置 则必须列出 读取文件 并应生成编码作
  • 本地分支、本地跟踪分支、远程分支和远程跟踪分支有什么区别?

    我刚刚开始使用 Git 我对不同的分支感到非常困惑 谁能帮我弄清楚以下分支类型是什么 当地分支机构 本地跟踪分支 远程分支机构 远程跟踪分支机构 它们之间有什么区别 他们如何相互合作 我想快速的演示代码会非常有帮助 这是长答案 Remote
  • python:比较两个字符串

    我想知道是否有一个库可以告诉我两个字符串的相似程度 我不是在寻找任何具体的东西 但在这种情况下 a alex is a buff dude b a exx is a buff dud 我们可以说b and a大约有 90 相似 有没有一个图
  • 如何使用 RX 限制事件流?

    我想有效地限制事件流 以便在收到第一个事件时调用我的委托 但如果收到后续事件则不会调用 1 秒 超时 1 秒 到期后 如果收到后续事件 我希望调用我的委托 有没有一种简单的方法可以使用反应式扩展来做到这一点 示例代码 static void
  • 给定起始位置和结束位置列表构造 Numpy 索引

    我有两个大小相同的 numpy array 对象 都是一维 其中一个包含起始索引位置列表 另一个包含结束索引位置列表 或者你可以说我有一个列表起始位置和窗口长度 如果重要的话 由起始位置和结束位置形成的切片保证不重叠 我试图弄清楚如何使用这
  • 防止 Maven 子 pom 中覆盖依赖版本

    我在父 pom 中有一个 dependencyManagement 部分 例如
  • R 绘制独立的函数图例

    我想通过 R 绘制具有独立图例的图 同时尊重色阶 这就是我所拥有的 library plotly X lt data frame xcoord 1 6 ycoord 1 6 score 1 6 gender c M M M F F F ag
  • 将事件路由到 eventhub EventProcessor

    我有不同类型的活动 例如 有些数据是遥测数据 有些是错误信息等 我认为创建多个 IEventProcessor 实现是一个好主意 每个实现对应一种事件类型 因此每个实现都会以不同的方式处理事件 就像写入文件或数据库一样 将事件路由到特定 E