Apache flink 弗林克·卡夫卡消费者落后

Apache flink 弗林克·卡夫卡消费者落后,apache-flink,kafka-consumer-api,consumer,amazon-kinesis-analytics,Apache Flink,Kafka Consumer Api,Consumer,Amazon Kinesis Analytics,我在弗林克的工作中使用卡夫卡资源的流,一次阅读50个主题,如下所示: FlinkKafkaConsumer<GenericRecord> kafkaConsumer = new FlinkKafkaConsumer<GenericRecord>( Pattern.compile("TOPIC_NAME[1-50].stream"), // getting data stream from all topics

我在弗林克的工作中使用卡夫卡资源的流,一次阅读50个主题,如下所示:

FlinkKafkaConsumer<GenericRecord> kafkaConsumer = new FlinkKafkaConsumer<GenericRecord>(
            Pattern.compile("TOPIC_NAME[1-50].stream"), // getting data stream from all topics
            <DeserializationSchema>, //using avro schema
            properties); // auto.commit.interval.ms=1000 ...
FlinkKafkaConsumer-kafkaConsumer=新的FlinkKafkaConsumer(
Pattern.compile(“主题名称[1-50].stream”),//从所有主题获取数据流
,//使用avro模式
属性);//auto.commit.interval.ms=1000。。。
还有一些操作符,比如:过滤器->地图->按键->窗口->聚集->接收器

我能获得的最大吞吐量是每秒10k到20k条记录,这相当低,因为源发布了数十万个事件,我可以清楚地看到消费者落后于生产者。我甚至试着移除水槽和其他操作员,以确保没有背压,但它仍然是一样的。我正在将我的应用程序部署到Amazon Kinesis data analytics,并尝试了几种并行设置,但这些设置似乎都不能提高吞吐量


我遗漏了什么?

有几件事会显著影响吞吐量

无效的序列化通常是导致吞吐量低的主要因素。有关此主题的详细信息,请参阅。Avro通用记录序列化程序还不错,但您是否携带了实际不需要的数据

您是否正在更改管道中的任何位置的并行性?那太贵了

对于Kinesis数据分析,您必须使用RocksDB状态后端,它的吞吐量远远低于基于堆的状态后端。但是拥有正确的配置会有很大帮助。您应该为RocksDB工作目录使用可用的最快本地磁盘(SSD,或者在极端情况下,可能需要RAM磁盘)。确保您的实例类型提供足够的IOPs。给RocksDB足够的内存。如果您进行大量读取,则值得启用Bloom筛选器。有关使用RocksDB的更多信息,请参阅

您可以尝试禁用检查点作为实验。如果这有帮助,那将提供一些线索


某些网络设置会影响吞吐量。默认设置通常可以提供良好的性能,但如果您对其进行了修改,则值得研究。

感谢@David突出重点。事实上,我已经经历了这些,甚至在独立的flink部署中,我得到了相同的吞吐量,所以我怀疑这是反序列化的问题。我阅读的主题包含几种类型的信息,我只对其中的几种类型感兴趣。您能告诉我正确的方向吗?在使用反序列化模式时,跳过某些类型的消息的最佳方法是什么?