我有一個在Azure中配置的EventHub,也是一個用於讀取數據的使用者組。它在一些日子裏工作正常。突然間,我看到傳入數據有所延遲(大約3天)。我使用Windows服務來使用服務器中的數據。每分鐘有大約500條傳入消息。任何人都可以幫我解決這個問題嗎?從EventHub獲取數據被延遲
回答
可能是您正在處理它們的項目太慢。因此,要完成的工作會增加,你會落後。
要獲得一些見解,你是在事件流,你可以使用這樣的代碼:
private void LogProgressRecord(PartitionContext context)
{
if (namespaceManager == null)
return;
var currentSeqNo = context.Lease.SequenceNumber;
var lastSeqNo = namespaceManager.GetEventHubPartition(context.EventHubPath, context.ConsumerGroupName, context.Lease.PartitionId).EndSequenceNumber;
var delta = lastSeqNo - currentSeqNo;
logWriter.Write(
$"Last processed seqnr for partition {context.Lease.PartitionId}: {currentSeqNo} of {lastSeqNo} in consumergroup '{context.ConsumerGroupName}' (lag: {delta})",
EventLevel.Informational);
}
的namespaceManager是建立這樣的:
namespaceManager = NamespaceManager.CreateFromConnectionString("Endpoint=sb://xxx.servicebus.windows.net/;SharedAccessKeyName=yyy;SharedAccessKey=zzz");
我把這種記錄方法該CloseAsync
方法:
public Task CloseAsync(PartitionContext context, CloseReason reason)
{
LogProgressRecord(context);
return Task.CompletedTask;
}
logWriter
只是一些loggi ng類我曾經寫信息到blob存儲。
現在輸出像
最後處理seqnr消息分區3:32780931的在consumergroup '遙測' 32823804(滯後:42873)
所以當滯後是你可以非常高正在處理很久以前發生的事件。在這種情況下,您需要擴大/縮小處理器。
如果您發現滯後,您應該測量處理給定數量的物品需要多長時間。然後,您可以嘗試優化性能並查看是否有所改進。我們這樣做了:
public async Task ProcessEventsAsync(PartitionContext context, IEnumerable<EventData> events)
{
try
{
stopwatch.Restart();
// process items here
stopwatch.Stop();
await CheckPointAsync(context);
logWriter.Write(
$"Processed {events.Count()} events in {stopwatch.ElapsedMilliseconds}ms using partition {context.Lease.PartitionId} in consumergroup {context.ConsumerGroupName}.",
EventLevel.Informational);
}
}
謝謝Peter寶貴的時間..我沒有任何昂貴的數據處理器操作。我只需使用EF將傳入記錄插入到平坦表格中。我剛剛檢查了滯後現象,每個分區超過100000(有4個分區)。是否有可能運行我的Windows服務的多個實例並彌補滯後? – vishnu
是的,但請注意,根據數據庫的不同,EF /數據庫可能無法處理負載。每秒500條消息並不多。你應該測量你的操作時間。查看更新的答案。 –
是的。但是我有一個25的批量更新。可能25是一個小數字,我會檢查。在這兩者之間,消費者羣體的活躍聽衆數是否有限制?因爲我還計劃製作更多的實例。在VS中,如果我嘗試運行已經運行的用戶組一段時間,它會引發致命錯誤。 – vishnu
- 1. 獲取數據包的延遲(TCP \ UDP)
- 2. 延遲從特定數據庫讀取
- 3. 從指定時間讀取EventHub數據
- 4. 從gPhone獲取傳感器數據時是否存在延遲?
- 5. 延遲從服務獲取數據以避免空指針
- 6. 延遲mchanize從網站獲取響應
- 7. 從ajax延遲響應中獲取jsonObject
- 8. 從Kurento獲取rtsp流的延遲
- 9. 獲取更新無延遲
- 10. 倒是被延遲
- 11. jQuery:.text()被延遲
- 12. 從TCPClient讀取時延遲
- 13. 延遲讀取TCP套接字數據
- 14. UDP數據讀取不正確(延遲)
- 15. 從Plist延遲加載數據
- 16. 從html數據設置jquery延遲
- 17. 延遲獲取映射爲非延遲的關聯
- 18. Primefaces數據表多選模式 - 延遲加載獲取
- 19. 如何獲取數據幀中的延遲列值?
- 20. 在jQuery中獲取來自延遲調用的JSON數據
- 21. 延遲數據庫查找?
- 22. AsyncSocket延遲發送數據
- 23. 延遲填充session.upload_progress數據
- 24. 缺少數據的延遲
- 25. 如何從csv文件讀取數據時減少延遲?
- 26. 使用PHP延遲時間後從網站提取數據
- 27. SOA複合不從查詢中提取數據,處理延遲
- 28. Ajax問題:延遲從使用innerHTML的web服務獲取數據,請指導
- 29. 從dbpool.runQuery獲取延遲,而不是使用Twisted和Oracle的數據
- 30. NSCombox的comboBoxSelectionDidChange值被延遲
你是如何從eventhub讀取數據的?你使用IEventProcessor實例嗎? –
@PeterBons是Peter,我正在使用IEventProcessor實例。 – vishnu