KafkaStream上的吞吐量低

时间:2019-08-29 19:48:04

标签: apache-kafka apache-kafka-streams

我的kafka流吞吐量有一些问题。我尝试阅读+ 90M记录的主题。使用我的kafka流应用程序,该应用程序基本上只打印每条记录,因此我获得了每秒约4K条记录的吞吐量。但是,如果我通过基本的kafka-avro-console-consumer命令行使用了完全相同的主题,那么吞吐量将达到每秒约80K个记录!是否有一些已知的限制可以解释为什么流应用程序的性能应低于kafka-avro-console-consumer的基础?任何有关我应该调整以获得更好性能的流配置的指导?

我的配置是:

Properties configs = new Properties();
configs.put(CommonClientConfigs.BOOTSTRAP_SERVERS_CONFIG, kafkaConfig.getBootstrapServer());
configs.put(AbstractKafkaAvroSerDeConfig.SCHEMA_REGISTRY_URL_CONFIG,
            kafkaConfig.getSchemaRegistryServer());
configs.put(StreamsConfig.DEFAULT_KEY_SERDE_CLASS_CONFIG, SpecificAvroSerde.class);
configs.put(StreamsConfig.DEFAULT_VALUE_SERDE_CLASS_CONFIG, SpecificAvroSerde.class);
configs.put(ConsumerConfig.AUTO_OFFSET_RESET_CONFIG, EARLIEST);
configs.put(StreamsConfig.APPLICATION_ID_CONFIG, "KS-test3");

并且拓扑显示为:

 StreamsBuilder streamsBuilder = new StreamsBuilder();
    streamsBuilder.stream(scheduleEventTopic)
                  .foreach(this::printRecord);
    return streamsBuilder.build();

2 个答案:

答案 0 :(得分:0)

尝试将max.poll.records的值提高到更高。此配置意味着您可以在一poll()

中获得的记录数
max.poll.records (1000 default)

您可能还希望查看两次调查之间的max.poll.interval.ms时间,并尝试减少它来看看。

此外,您可能希望增加流线程的数量并将其设置为no。您正在使用的主题的分区。

num.stream.threads (1 default)

参考:https://docs.confluent.io/current/streams/developer-guide/config-streams.html

P.S:默认值来自上述参考,您可能会有所不同。

答案 1 :(得分:0)

我实际上发现了我的问题。 commit.interval设置为0以禁用聚合中的批处理。相反,我使用了cache.max.bytes.buffering来获得相同的效果而又不影响性能。我的吞吐量从4K tps上升到10万tps