首页 > 解决方案 > 使用 python eventthub sdk 从 eventthub 消费事件时 prefetch 和 max_batch_size 有什么区别

问题描述

我正在使用 Microsoft 提供的 azure-eventhub python 库连接到 eventthub 并异步捕获事件。

下面是我用来连接的一段代码

client = EventHubClientAsync(ADDRESS, debug=False, username=USER, password=KEY, http_proxy=self.proxy_settings)
receiver = client.add_async_receiver(CONSUMER_GROUP, str(i), OFFSET,                                               prefetch=self.azuremonitor_config.PREFETCH_SIZE)


batch = await receiver.receive(max_batch_size=azuremonitor.azuremonitor_config.MAX_BATCH_SIZE,timeout=azuremonitor.azuremonitor_config.TIMEOUT)

我不确定 add_async_receiver 函数中 prfetch 参数的用途以及它与接收函数中的 max_batch_size 参数有何不同。

标签: pythonazure-eventhub

解决方案


prefetch并且max_batch_size用于不同的目的。

  • prefetch是为了性能调优。客户端将尝试获取与预取计数一样多的消息,并在单个请求中将它们缓存在本地。
  • max_batch_size用于控制接收方法将返回的消息的最大数量。

让我给你一个简单的例子:

  • 假设预取为 300,max_batch_size 为 10。
  • receive被调用时,客户端告诉服务在一次调用中给客户端多达 300 条消息。并且假设 Event Hub 中有超过 300 条消息,那么客户端收到 300 条消息
  • receive仅请求 10 条消息,该方法将返回 10 条消息,其余 290 条消息在本地缓存。
  • 在下一次receive调用中,SDK 会先检查本地缓存,如果缓存中的消息足够多,则不会通过返回缓存的消息来发起服务请求。

值得注意的是,azure-eventhub v5 已于 2020 年 1 月 GAed,最新版本为 v5.2.0

它在 pypi 上可用:https ://pypi.org/project/azure-eventhub/

请按照从 v1 到 v5 的迁移指南迁移您的程序。

我们还提供样品供您开始使用。


推荐阅读