我正在从一台计算机上测试Azure事件中心。
我有一个带有最大允许分区的事件中心(32)。
我发现写入集线器的速度非常快 - 基本上是1000 msgs / sec。但是,当我尝试将数据提取出来时,我的吞吐量几乎没有相同。拉出1000个消息需要一分钟。
我尝试过使用32个并行接收器的Direct方法和EventHost方法。两者在速度方面大致相同。
我已将所有设置保留为默认设置。
是因为我使用一台机器来提取数据吗?请注意,从同一台机器写入不是问题。
更新:以下是我用于从事件中心(直接版本)中提取数据的代码:
let startDirectPump
stream
eventHubConnectionString
storageConnectionString
fPost =
let tag = "startEventHubPump"
let client = EventHubClient.CreateFromConnectionString(eventHubConnectionString,stream)
let cg = client.GetDefaultConsumerGroup()
let runtimeInfo = client.GetRuntimeInformation()
let pCount = runtimeInfo.PartitionCount
let receivers =
[for p in 0..pCount - 1 ->
cg.CreateReceiver(runtimeInfo.PartitionIds.[p],System.DateTime.UtcNow)
]
let tasks =
receivers
|> List.map (fun r ->
async {
try
while not r.IsClosed do
let! e = r.ReceiveAsync() |> Async.AwaitTask
if e <> null then
fPost e
with ex ->
do! Async.Sleep 5000
Logging.logex "eh receive" ex
})
tasks |> Async.Parallel |> Async.Ignore |> Async.Start
client
答案 0 :(得分:3)
如果您的目标是将数据泵入Storm,实际上正在进行集成以提供将EventHub数据导入Storm的适配器。请参阅代码@ https://github.com/hdinsight/hdinsight-storm-examples/tree/master/lib
至于解决延迟问题,您可能需要尝试一些事项:
由于 -Eric Lam(MSFT)
答案 1 :(得分:0)
你用什么来衡量速度?您是否将数据存储在数据库中并检查是否已收到所有数据?此问题可能在其他地方,可能在您的数据库插入。有些时候,它最初尝试租用分区需要时间。一旦预热,您可以尝试发送更多消息。并检查是否仍然需要相同的时间。
答案 2 :(得分:0)
我使用了与您相同的方法,但无法接收任何事件/数据。过了一段时间后,我发现EventProcessorHost有点啰嗦,但效果还不错。
答案 3 :(得分:0)
增加吞吐量单位将为您提供帮助。