python - 使用 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 参数有何不同。
解决方案
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 的迁移指南迁移您的程序。
我们还提供样品供您开始使用。
推荐阅读
- docker - CentOS 8:问题:包 docker-ce-xxxxxx.x86_64 需要 containerd.io >= 1.4.1
- android - 为什么只有 2 个小部件中的第一个接收我的流?
- reactjs - 反应:等待一个承诺
- python - 如何确定是否选择了列表中的第 2 项或第 1 项?
- javascript - 登录将我带到相同的登录表单,并且在输入正确的用户名和密码时无法登录
- java - Discord JDA onGuildMemberJoin 不起作用
- mysql - MySQL左连接最近的值
- c# - Resharper 结构模式替换添加了额外的空括号
- postgresql - Postgres 系统在 WALSync 中冻结
- javascript - 当 div 内的标签具有内联文本对齐以对齐时,如何从 div 左侧对齐文本