Azure 事件处理器主机 java 库 - ReceiverRuntimeInformation 在分区上没有实际统计信息

标签 azure azure-eventhub event-processor-host

我试图通过在接收到事件时利用 PartitionContext 提供的 ReceiverRuntimeInformation 对象来获取最后一个排队序列号,以跟踪消费者端的消费者和生产者之间的滞后。但是,ReceiverRuntimeInformation 对象没有与事件中心的特定分区相关的更新值,它返回 0。示例代码和日志输出如下:

public class EventProcessor extends IEventProcessorImpl{

    @Override
    public void onEvents(PartitionContext context, Iterable<EventData> messages) throws Exception {
            ReceiverRuntimeInformation rte = context.getRuntimeInformation();
            logger.info(rte.getLastEnqueuedOffset() + " * " + rte.getLastEnqueuedSequenceNumber() + " * " + rte.getPartitionId() + " * " +  rte.getRetrievalTime());
    }

}

输出:

null * 0 * 3 * null

最佳答案

这是一项选择性加入功能。创建 EventProcessorHost 实例时,传入 EventProcessorOptions :

eventProcessorOptions.setReceiverRuntimeMetricEnabled(true);

我们将其设计为Opt-in 功能 - 因为它会向收到的所有 EventHub 消息添加额外的字节(sdk 使用客户端在线路上接收的所有 EventData - 来传输此信息额外信息)。

注意:RecieverRuntimeInformation 中存在的数据是动态,因此可能陈旧!例如 - ReceiverRuntimeInformation.LastEnqueuedSequenceNumber 可能会在服务实际响应时发生变化!因为该分区上可能有新事件。为了使数据相关 - 我们添加了一个名为 - RetrievalTime 的属性 - 这实际上是从服务检索 ReceiverRuntimeInformation 的时间。这可以帮助理解 - ReceiverRuntimeInformation 的值有多陈旧。

关于Azure 事件处理器主机 java 库 - ReceiverRuntimeInformation 在分区上没有实际统计信息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51823399/

相关文章:

azure - 出站 TCP 连接问题导致从 azure 函数将数据发送到事件中心和数据湖

c# - 从 EventProcessorHost 中获取数据

azure - 如果 Azure Function App 在消费计划中缩小到 0,它如何监听来自事件中心的传入事件?

azure - U-SQL脚本性能分析

python - 如何在 Azure Redhat Linux VM 上更新 python?

c# - WP7.1应用程序中的WebClient仅调用一次

Azure:事件中心的定价

azure - 具有 Multi-Tenancy 应用程序的 Windows Azure 缓存

azure - 您能否保证将事件恰好一次发布到事件中心?

azure - 关于事件中心处理器中的检查点策略