Azure 事件中心 - 无法理解 Java 流

Azure Event Hub - Can't understand Java flow

来自 Microsoft EventHub Java SDK 示例 (https://docs.microsoft.com/en-us/azure/event-hubs/event-hubs-java-get-started-send),这些是需要采取的步骤才能通过 java 使用来自 Even-Hub 的消息开发工具包:

1.Create 一个存储帐户

2.Create 一个名为 EventProcessorSample 的新 class。将占位符替换为创建事件中心和存储帐户时使用的值:

3.

  String consumerGroupName = "$Default";
   String namespaceName = "----NamespaceName----";
   String eventHubName = "----EventHubName----";
   String sasKeyName = "----SharedAccessSignatureKeyName----";
   String sasKey = "----SharedAccessSignatureKey----";
   String storageConnectionString = "----AzureStorageConnectionString----";
   String storageContainerName = "----StorageContainerName----";
   String hostNamePrefix = "----HostNamePrefix----";

   ConnectionStringBuilder eventHubConnectionString = new ConnectionStringBuilder()
        .setNamespaceName(namespaceName)
        .setEventHubName(eventHubName)
        .setSasKeyName(sasKeyName)
        .setSasKey(sasKey);

关于此流程,我有几处不明白 -

一个。为什么需要存储帐户?为什么只需要在创建消费者时创建,而不是在创建事件中心本身时创建?

乙。 'hostNamePrefix' 是什么,为什么需要它?

C。更多的是 A 的概括,但我不明白为什么这个流程如此复杂并且需要如此多的配置。事件中心是从 Azure 导出 metrics/monitoring 数据的默认且唯一方式,这是一个非常简单的流程 - Azure -> 事件中心 -> Java 应用程序。我是否缺少更简单的方法或更简单的客户端选项?

您所有的问题都与使用事件中心的事件有关。

Why is a storage account required?

  1. 只读取事件一次:每当您的应用程序从事件中心读取事件时,您需要将偏移量(已读取事件量的标识符)值存储在某处。此信息的存储称为“CheckPointing”,此信息将存储在 Storage Account.
  2. 每次你的应用程序连接到它时从开始读取事件:在这种情况下,你的应用程序将在它开始时从头开始读取事件。

因此,如果您只想读取一次事件,则需要存储帐户在使用事件中心的事件时存储偏移值。

Why does it needs to be created only when creating a consumer and not when creating the event hub itself?

因为这取决于场景,您是想只读取一次还是每次您的应用启动,这就是为什么创建事件中心时不需要存储帐户。

What is 'hostNamePrefix' and why is it required?

如名称所示“hostNamePrefix”,这是您的主机的名称。主机是指正在使用事件的应用程序。使用 GUID 作为 hostNamePrefix 是一种很好的做法。事件中心需要 HostNamePrefix 来管理与主机的连接。如果您有 32 个分区,并且您已经部署了同一应用程序的 4 个实例,那么每个 8 个分区将分配给您的 4 个不同的实例,这就是主机名帮助事件中心管理有关连接信息的地方各自的分区到他们的主机。

我建议您阅读 this article on event hub 以获得事件处理器主机的清晰图片。