我正在将我的项目从RabbitMQ转移到Kafka,并试图了解反应卡夫卡的速度有多快。
我目前能够向Rabbit写入大约12K /秒的简单消息/秒,并且在读取时通过“hello world”流以大约4K /秒的速度从队列中进行一次微不足道的拉动。
我用反应流移动到Kafka我可以写1M或者每秒 - 巨大的胜利! 但是在相同的环境中,我只能使用此处示例中的方法在读取流中以大约2K /秒的速度流动:{{3}}
有没有人知道如何将读取回复到与Rabbit方法相当的水平?
有趣的是:我只是“直接”尝试了它(通过原始Java驱动程序访问Kafka与反应性kafka)并获得大约22K读取,所以这非常好。它关于我如何使用被动反应卡夫卡正在减慢事情的速度。
好的......我正在寻找这个东西。接下来,我尝试了原始的Akka流“hello world”:
now = System.currentTimeMillis()
count = 0
val in2 = Source(1 to num)
val g = RunnableGraph.fromGraph(GraphDSL.create() { implicit b =>
import GraphDSL.Implicits._
val show = Flow[Int].map{ i => count +=1; if(count==num) println(s"time 2 ($count): "+(System.currentTimeMillis() - now)); i }
in2 ~> show ~> Sink.ignore
ClosedShape
})
g.run()
Thread.sleep(2000)
这个速度非常快,为742K /秒!所以Kafka raw非常快,Akka流很快。因此,罪魁祸首就在于如何构建(或更有可能)我试图使用它的反应性kafka。考虑到摩擦,我应该期待看到接近原始卡夫卡22K /秒的东西。 HMM。
答案 0 :(得分:0)
不是完整的答案,但请重试,但最近(2016年9月) Akka Streams Kafka 0.11
有显着的性能改进。我们已经完成了一些基准测试,虽然仍然有一些来自reactive-kafka包装器的开销(但请记住,你也得到了一些回报:例如所有的好处来自一个带有异步背压的漂亮API!),整体数字看起来非常好,而且越来越好。
这里有几个常见的Kafka使用场景,比较旧的reactive-kafka版本(M4),当前版本(0.11),以及使用普通Kafka
Producers
/Consumers
实现的等效功能(但是当然,没有考虑与任何其他反应组件的连接。)