Azure eventhub 多个分区键指向同一分区

2024-03-02

我们正在开发一个多租户应用程序,其中 eventhub 将在不同租户之间共享。我们将在租户之间分配分区。每个租户将在不同的分区上发送消息。我们希望在分区级别对租户进行身份验证。正如 Microsoft 网站上所述,我们根据租户 ID 定义分区键。但问题是不止一个分区键在同一分区上发送消息。事实不应该是这样。理想情况下,每个分区键都应该映射到不同的分区。

        var serviceNamespace = "namespace name here";
        var hubName = "hub name here";
        var deviceName = "device name here";
        var sasToken = "SAS TOKEN HERE";

        Mymessage subGroup1 = CreateMessage();

        var factory = MessagingFactory.Create(ServiceBusEnvironment.CreateServiceUri("sb", serviceNamespace, ""), new MessagingFactorySettings
        {
            TokenProvider = TokenProvider.CreateSharedAccessSignatureTokenProvider(sasToken),
            TransportType = TransportType.Amqp
        });
        var client = factory.CreateEventHubClient(String.Format("{0}/publishers/{1}", hubName, deviceName));

        var data = new EventData(Encoding.UTF8.GetBytes(JsonConvert.SerializeObject(subGroup1)));
        data.PartitionKey = "jeep";

        client.Send(data);

请帮助我了解我的方法有什么问题。


很简单,可能的字符串分区键的无限空间被映射到事件中心内非常有限的分区空间。除非您向 Microsoft 请求更多,否则您的 EventHub 中最多有 32 个分区。分区键被散列,然后散列空间被划分到分区空间中。这提供了保证文档 https://msdn.microsoft.com/en-us/library/azure/dn836025.aspx

事件中心确保共享相同分区键值的所有事件均按顺序传递到同一分区。重要的是,如果分区键与发布者策略一起使用(如下一节所述),则发布者的身份和分区键的值必须匹配。

在这种具有良好性能的系统中,无法保证也无法保证每个分区键都位于不同的分区。其中一些讨论见这个问题 https://stackoverflow.com/questions/25876671/how-does-azures-eventdata-partitionkey-decide-which-partition-to-write-to。通过发布商政策,您还知道

使用发布者策略时,PartitionKey 值设置为发布者名称。为了正常工作,这些值必须匹配。

这意味着来自单个发布者的所有事件都会发送到单个分区。就我个人而言,我认为这并不总是一件好事,因为最终每个发布者都会有一个吞吐量单位的硬性上限(如果你在哈希方面不走运,则更少)。

如果您需要将每个客户的数据分离在不同的分区中,并通过向客户提供直接与 EventHub 对话的凭据来强制执行此操作,我认为您唯一的选择可能是使用多个 EventHub。我believe(从某种意义上说,我还没有检查我们的账单)同一服务总线内的 EventHub 共享吞吐量单位。

但是,如果您只需要您的消费者能够知道它来自哪个发布者/客户,那么我相信您可以使用事件数据.PartitionKey https://msdn.microsoft.com/en-us/library/azure/microsoft.servicebus.messaging.eventdata.partitionkey.aspx保证是上面记录的发布者名称。

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

Azure eventhub 多个分区键指向同一分区 的相关文章

随机推荐

  • 负载测试时如何测量CPU和内存

    我们在异构环境中使用 JMeter 并且希望在运行服务或 Web 应用程序的服务器上产生重负载时测量 CPU 和内存 您建议使用什么 是否有任何软件解决方案 开源或商业 可以将 CPU 和内存使用情况记录在文件或数据库中 谢谢你 您可以使用
  • 将其他实体添加到实体框架支持的域服务

    我们正在研究使用 RIA 服务 7 月 9 日预览版 来公开现有 EF 模型的部分内容 我们已向 Web 应用程序添加了一个域服务类 并指定了要使用的 EF 模型 并选择了一些我们希望通过域服务提供的实体 有些已启用编辑 大多数没有 我们构
  • 为散点图中的每个点绘制词云

    我创建了一个根据以下数据定义的散点图 请注意 当前仅使用前两个字段进行绘图 var data 5 3 text word1 size 4 text word2 size 1 3 5 text word3 size 5 text word4
  • 解码 NSString 中的 Base-64 编码 PNG

    我有一些NSData它是 Base 64 编码的 我想解码它 我看到了一个如下所示的示例 NSData myPNGData xmlString dataUsingEncoding NSUTF8StringEncoding Base64 in
  • 如何使用 django 重定向功能传递上下文数据?

    我有重定向到 URL 的函数 return redirect orders The URL orders有一些正在传递给它的上下文数据 我想传递一些额外的数据以及来自 URL 函数的数据 如下所示 return redirect order
  • 如何按基数方向自由遍历二维数组中的元素? (下、上、左、右)

    这个问题 https stackoverflow com q 22239871 2736496是关于计算穿过迷宫的路径 由二维数组表示 例如 穿过这个迷宫的路径 0 1 2 3 4 0 1 0 1 1 1 1 1 0 0 0 1 2 1 0
  • Postgres用户创建数据库

    我无法使用我的 postgres 客户端和我登录的用户创建数据库 我无法弄清楚如何增加用户的权限 我可以访问运行 postgres 的 Linux 服务器 并且能够使用 psql 以我的用户和 postgres 用户身份登录 有人可以告诉我
  • 为什么我使用 =(单个等于)的相等比较在 Java 中不能正常工作?

    我在以下行中遇到语法错误 但是我不明白这个错误的原因是什么 if address1 compareTo address2 1 System out println address1 is greater than address2 我想要实
  • iOS 7.1 问题 - 当触摸并拖动该选项卡按钮时,选项卡栏图标图像会自动调整大小

    我有这个代码 tabBarItem1 setFinishedSelectedImage UIImage imageNamed tab pressed home icon withFinishedUnselectedImage UIImage
  • 为什么 Android Studio 不会在发布模式下创建我的 AAR 文件

    使用 Android Studio 我有一个 Android 库项目 它在调试模式下生成 library build outputs aar MyLIB aar 但在发布模式下则不然 我没有看到任何错误 只是 构建成功 在 Gradle C
  • 在 Swift 中显示 GoogleMaps?

    我的代码 var camera GMSCameraPosition cameraWithLatitude currentLocation latitude longitude currentLocation longitude zoom 1
  • dir() 非常慢

    当文件较多时 4000个左右 dir 功能非常慢 我的猜测是它创建了一个结构并以低效的方式填充值 是否有任何快速而优雅的替代方法可以使用dir 更新 使用 MATLAB R2011a 在 64 位 Windows 7 中进行测试 更新 2
  • 如何将天蓝色磁盘恢复到以前的快照?

    我在天蓝色中有一个虚拟机 并通过门户选择了它的磁盘 并创建了它的快照 我现在如何恢复到磁盘快照 通过门户或 CLI 我不想从快照创建新磁盘或虚拟机 只是恢复回来 我现在如何恢复到磁盘的快照 通过门户或 命令行界面 您的意思是您想使用此快照来
  • 如何在 VScode 笔记本中激活跨单元格的单词突出显示?

    我在 Visual Studio Code 1 67 0 中使用 Jupyter ipynb 笔记本 当我双击某个单词 区域时 会突出显示该单词 区域的所有出现位置仅在同一个单元格中 对此的设置在settings json file is
  • Javadoc 在 Eclipse 中不可用

    我正在使用面向 Java 开发人员的 Eclipse IDE 版本 Helios 服务版本 2 内部版本号 20110218 0911 我有一个类似的问题堆栈溢出问题 https stackoverflow com questions 69
  • .data 在 pytorch 中还有用吗?

    我是 pytorch 的新手 我读了很多大量使用张量的 pytorch 代码 data成员 但我搜索 data在官方文档和Google中 发现很少 我猜 data包含张量中的数据 但我不知道什么时候需要它 什么时候不需要 data是一个属性
  • Java或C#中工厂设计模式的反思

    我偶然发现了一个词 叫做反思 这是工厂设计模式中常用的功能 我很难理解这个概念 因为我仍在学习如何编程 如何在 C 或 Java 的工厂设计模式中使用反射 谁能给我一个简单的例子 并向我展示您使用反射来实现工厂设计模式的代码 微软提供了这个
  • android 在相机上显示矩形

    您好 我想在相机中显示一个矩形 以便当用户拍摄快照时 只能处理矩形内的区域 知道我该怎么做吗 并且可以通过沿角拖动来调整矩形大小 我没有调用相机应用程序 我正在使用相机 API 您好 我使用本教程解决了问题 see here http ad
  • Android/Java:将任何字符串转换为颜色(十六进制)

    有没有办法像加密 哈希函数一样从 Java Android 中的任何字符串生成颜色 例子 字符串 Home 生成类似 FF1234 的颜色 字符串 Sky 生成类似 00CC33 的颜色 没有随机化 因此 系统将始终为该字符串计算相同的颜色
  • Azure eventhub 多个分区键指向同一分区

    我们正在开发一个多租户应用程序 其中 eventhub 将在不同租户之间共享 我们将在租户之间分配分区 每个租户将在不同的分区上发送消息 我们希望在分区级别对租户进行身份验证 正如 Microsoft 网站上所述 我们根据租户 ID 定义分