Kafka Streams应用程序无法在一台机器上扩展更多CPU内核和线程

时间:2018-11-02 17:40:28

标签: apache-kafka scalability apache-kafka-streams

我正在编写一个kafka-streams应用程序,该应用程序基本上从avro记录中提取2种类型的键,并在指定的窗口中对它们进行计数。它应该每秒处理约6k个事件。

我面临的问题:

  • 一个具有c4.8xlarge个线程(输入主题的分区数)的num.stream.threads = 20实例每秒仅消耗约2.5k个事件
  • 具有num.stream.threads = 10个线程的相同实例消耗事件的速率相同
  • 四个c4.2xlarge的{​​{1}}实例每秒最多消耗10-25k个事件

我从未见过任何内核的CPU利用率高于70%。网络也未得到充分利用。

这是我的流配置:

num.stream.threads = 5

经纪人版本: 0.10.2.1

Kafka流版本: 1.1.1

这似乎令人惊讶,因为我认为只要有足够的分区,无论消费者位于何处,在一台机器上还是多台机器上,我都可以线性扩展kafka处理。

许多EC2实例可以解决可伸缩性问题,但是我想在一个应用程序上运行我的应用程序,因为聚合必须通过交互式查询公开,并且我不想开发RPC层。

UPD:流定义

kafka.streaming {  
  compression.type = "lz4"
  acks = 1
  retries = 1

  // I care about throughput more than about latency
  max.poll.records = 6000
  fetch.min.bytes = 3300000 // 6000 * 550 (average record size)
  fetch.max.wait.ms = 1000 // we get 6000 records in 1 second
  batch.size = 165000 // (6000 / 20) * 550
  linger.ms = 1000
}

0 个答案:

没有答案