了解 Azure 事件中心分区使用者模式

2024-03-21

Azure 事件中心使用分区使用者模式中描述的docs https://learn.microsoft.com/en-us/azure/event-hubs/event-hubs-features。 当涉及到现实世界场景时,我在理解该模型的消费者方面存在一些问题。

假设我有 1000 条消息发送到带有 4 个分区的事件中心,但未定义任何分区 ID。这意味着消息将使用循环方法发送到所有分区。

现在我想让两个应用程序将消息分发到两个不同的数据库。我的问题有:

  1. 假设对于第一个应用程序,我想将所有消息存储在数据库 1 中。这意味着,为了获得最大速度,在我的消费者应用程序中,我需要有 4 个线程(消费者),每个线程监听事件中心的一个分区,对吗?他们每个人还必须存储自己正在读取的分区的偏移量(检查点)。
  2. 假设我的第二个应用程序想要过滤消息并只将其中的一部分存储在数据库 2 中。我还需要 4 个使用者,因为我不知道哪条消息发送到哪个分区,对吧?
  3. 另外,对于这两个应用程序,我需要有两个消费者组,但为什么呢?消息的过滤是在消费者组中定义的吗?我不明白为什么我需要这个,因为应用程序使用者自己存储分区检查点,并且我可以在应用程序本身内进行过滤。

我知道有事件处理器主机 https://learn.microsoft.com/en-us/dotnet/api/microsoft.azure.eventhubs.processor.eventprocessorhost?view=azure-dotnet类,但我想在较低级别上了解 EventHub 的概念。


  1. 假设对于第一个应用程序,我想将所有消息存储在数据库 1 中。这意味着,为了获得最大速度,在我的消费者应用程序中,我需要有 4 个线程(消费者),每个线程监听事件中心的一个分区,对吗?他们每个人还必须存储自己正在读取的分区的偏移量(检查点)。

正确的,每个配置的分区都应该有一个进程。因此,如果您有 4 个处理器,则应该有 4 个进程,每个进程处理特定分区的消息。如果您使用EventProcessorHost它会为您处理流程的启动。

  1. 假设我的第二个应用程序想要过滤消息并仅将其中的子集存储在数据库 2 中。我还需要4位消费者因为我不知道哪条消息发送到哪个分区,对吧?

您对消费者意味着什么?您还需要 4 个进程来处理消息but它们应该配置为使用不同的消费者组进行读取。否则它们将与 1 的进程竞争

  1. 另外,对于这两个应用程序,我需要有两个消费者组,但为什么呢?消息的过滤是在消费者组中定义的吗?我不明白为什么我需要这个,因为应用程序使用者自己存储分区检查点,并且我可以在应用程序本身内进行过滤。

让我们定义一个消费者组:

消费者组使多个消费应用程序能够各自拥有传入消息流的单独视图,并以自己的速度和自己的偏移量独立读取流

所以是的,你需要两个不同的消费者群体。 每个消费者组将获取发送到事件中心分区的所有消息。每个消费者组在消息流中跟踪自己的进度。这就是为什么您的场景需要两个。

假设您定义了一个名为“App2-Consumer-Group”的附加消费者组,读取器进程将接收所有消息,但不应对他们不感兴趣的消息采取任何操作。

如果您不创建额外的使用者组,则默认使用者组的读取器进程将处理第一个应用程序的消息,并使用检查点机制将它们标记为已处理。第二个应用程序的读取器进程不会收到任何消息,因为它们已被标记为已处理。 (在现实生活中,当使用一个消费者组时,某些消息可能会被第一个应用程序的读取器进程拾取,而某些消息可能会被第二个应用程序的读取器进程拾取,因为这些进程将尝试获取某个消息的锁定。特定分区)

我认为这张图清楚地显示了消费者群体如何跟踪自己在消息流中的进度,因此如果您对两个不同的应用程序有两种不同的处理逻辑,那么为什么您需要两个它们:

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

了解 Azure 事件中心分区使用者模式 的相关文章

随机推荐

  • 如何管理应用程序工厂模式中的额外模块?

    我正在使用带有应用程序工厂模式的烧瓶 我确实知道应用程序工厂模式仅在工厂函数中管理配置对象 如下面的代码所示 def create app config app config from object config sentry init a
  • 无法在 Desktop 中为 Compose 设计 UI 布局

    我正在为基于的应用程序开发 UI 布局为桌面撰写 https www jetbrains com lp compose mpp 它由几个复选框组成 但里面没有任何功能为桌面撰写 https github com JetBrains comp
  • JavaScript:使用递归检查数字是否为素数

    我对如何解决这个问题有点困惑 我需要所有素数才能返回 true 如果不返回 false 我看到我的逻辑包括 2 并且返回 0 所以它自动返回 false 因为 2 余数为 0 function isPrime num div 2 BASE
  • 如何在 Azure DevOps 中创建面板?

    我遇到了这个问题并解决了它 所以这里有这个问答 以防万一其他人花时间筛选 Microsoft 文档试图找到这个答案 如何在 Azure DevOps 中创建新板 当我转到 板 gt 板 并查看现有板时 没有像板列表下拉列表中的存储库那样可以
  • MS Access 对具有多个联接的链接表的查询非常慢

    我有一个 MySQL 数据库和一个 MS Access 前端 MySQL 数据库表通过 ODBC 连接链接到 MS Access 如果 WHERE 或 HAVING 子句中有任何内容 任何具有多个连接表的查询都会运行得非常慢 例如 SELE
  • Apple Watch 设置背景图片

    如何以编程方式设置 WatchKit 应用程序背景图像 我需要在代码中设置它 因为它会根据变量大小而变化 并且我们需要在图像上放置标签 这是不可能的以编程方式将背景图像设置在整个手表应用页面在 WatchKit 中 整个页面的背景图像当前只
  • 在 Markdown 中更改美人鱼主题

    除了代码之外 我在 Markdown 文档中使用 mermaid 进行基本图表渲染 我发现这个在线编辑器 https mermaidjs github io mermaid live editor 在预览时对其进行编辑很有用 这建议更改主题
  • 计算java中两个日期之间的月份[重复]

    这个问题在这里已经有答案了 我需要计算两个日期之间的月份 如果 startDate 2013 01 01 endDate 2013 01 31 答案应该是 1 startDate 2013 01 01 endDate 2013 02 01
  • Rails:虚拟属性和表单值

    我有一本带有虚拟属性的模型书 用于从书籍表单创建编辑器 代码如下 class Book lt ActiveRecord Base has many book under tags has many tags through gt book
  • 如何使用 JDBC 连接 XAMPP MySQL 本地数据库?

    我有一个用Java编写的俄罗斯方块游戏 它使用DB来记录高分 只要我使用远程 MySQL DB 它就可以正常工作 但现在我尝试使用 XAMPP MySQL 设置本地主机 DB 并且在命令中它一直像 SQLException 通信链接失败 一
  • 我可以使用 JavaScript/JQuery 将上传的文件添加到 ASP.NET 中的 Request.Files 中吗?

    我不完全确定如何使用 JavaScript 将文件添加到 Request Files 中 这就是我要去的 var x input type file eq 0 Add the data to the hidden field hiddenF
  • 指定 nodeSize 时 d3 树的居中发生变化

    我为此使用 d3 v4 当我有 var treemap d3 tree size height width 这棵树很好地居中 但是 因为我想指定节点之间的垂直间距 当我将其更改为 var treemap d3 tree size heigh
  • 适合程序员的 TCP/IP 网络书籍? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • React useEffect 钩子有条件地加载 onsnapshot

    我正在尝试执行以下操作 但似乎无法获得最合适的解决方案 在我的 React 应用程序 应用程序组件 的顶层 我正在加载 firebase 和 firestore 我有一个反应上下文 其中存储了我的身份验证信息 身份验证上下文不会立即加载 而
  • 在 Flexbox 中从纵向布局切换到横向布局

    我想实现以下Layout https i stack imgur com tOpuX png与弹性盒 您可以在图片中看到两个方向 左侧为纵向视图 右侧为横向视图 前提是我想让我的html尽可能短 如果可能的话 有没有办法用 Flex 来做到
  • 将 Outlook 邮件正文另存为 PDF

    我正在使用 Outlook 和 C 我的学校练习是在不使用额外软件的情况下将电子邮件正文转换为 pdf 就我而言 我想保留电子邮件文本格式 以便解决我的问题 我考虑将电子邮件正文转换为 RTF 文件 然后使用 C 使用 Word 应用程序打
  • Carbon createFromFormat 意外结果

    createFromFormat 结果提前一个月 var dump GET archive var dump Carbon createFromFormat m Y GET archive Result string 11 2015 len
  • 无法导入 gsutil

    我觉得我把一切都设置正确了 我遵循了这些指示 https developers google com storage docs gsutil install install 并从 tar 文件安装 我的主目录现在有一个文件夹 gsutil
  • cvxpy:“sum_entries”未定义

    我正在尝试使用 CVXPY 解决 Python 中的投资组合优化问题 但收到错误 sum entries is not Defined 我正在使用 Anaconda 2 7 和 Jupyter 笔记本 我已经使用 conda pip ins
  • 了解 Azure 事件中心分区使用者模式

    Azure 事件中心使用分区使用者模式中描述的docs https learn microsoft com en us azure event hubs event hubs features 当涉及到现实世界场景时 我在理解该模型的消费者