如何改善reactive-kafka(Scala plus Akka Streams)的缓慢性能?

时间:2016-03-29 19:13:49

标签: scala akka apache-kafka

我正在将我的项目从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。

1 个答案:

答案 0 :(得分:0)

不是完整的答案,但请重试,但最近(2016年9月) Akka Streams Kafka 0.11

  

有显着的性能改进。我们已经完成了一些基准测试,虽然仍然有一些来自reactive-kafka包装器的开销(但请记住,你也得到了一些回报:例如所有的好处来自一个带有异步背压的漂亮API!),整体数字看起来非常好,而且越来越好。

     

这里有几个常见的Kafka使用场景,比较旧的reactive-kafka版本(M4),当前版本(0.11),以及使用普通Kafka Producers / Consumers实现的等效功能(但是当然,没有考虑与任何其他反应组件的连接。)

http://blog.akka.io/assets/kafka-bench1.png

点击Benchmarking akka-stream-kafka的“Krzysiek Ciesielski”了解详情。