如何解决Flink kafka 消费者落后
我正在使用来自 Kafka 源的流,用于我的 flink 作业,一次读取 50 个主题,如下所示:
implicitly_wait
然后还有一些操作符,比如:filter->map->keyBy->window->aggreagate->sink
我能够获得的最大吞吐量是每秒 10k 到 20k 条记录,考虑到源发布了数十万个事件,这相当低,而且我可以清楚地看到消费者落后于生产者。我什至试图拆除水槽和其他操作员以确保没有背压,但它仍然是一样的。我正在将我的应用程序部署到 Amazon Kinesis 数据分析,并尝试了多种并行设置,但这些设置似乎都没有提高吞吐量。
有什么我遗漏的吗?
解决方法
有几件事会显着影响吞吐量。
低效的序列化通常是导致吞吐量低下的主要因素。有关此主题的见解,请参阅 Flink Serialization Tuning Vol. 1: Choosing your Serializer — if you can。 Avro 通用记录序列化器还不错,但是您是否携带了实际上并不需要的数据?
您是否要更改管道中任何地方的并行度?那很贵。
对于 Kinesis 数据分析,您必须使用 RocksDB 状态后端,它的吞吐量远低于基于堆的状态后端。但是拥有正确的配置会有所帮助。您应该为 RocksDB 工作目录使用最快的可用本地磁盘(SSD,或者在极端情况下,可能需要 RAM 磁盘)。确保您的实例类型提供足够的 IOP。给 RocksDB 足够的内存。如果您进行大量读取,则值得启用布隆过滤器。有关使用 RocksDB 的更多见解,请参阅 The Impact of Disks on RocksDB State Backend in Flink: A Case Study。
您可以尝试禁用检查点作为实验。如果这有帮助,就会提供一些线索。
某些网络设置会影响吞吐量。默认值通常提供不错的性能,但如果您修改了它们,则值得研究。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。