什么原因导致背压?
流系统中消息的处理速度跟不上消息的发送速度,导致消息的堆积。如果系统能感知消息堆积,并调整消息发送的速度,使消息的处理速度和发送速度相协调就是有背压感知的系统。
背压如果不能得到正确地处理,可能会导致资源被耗尽或者甚至出现更糟的情况导致数据丢失。flink就是一个有背压感知的基于流的分布式消息处理系统。
如下图:
1、消息发送的太快,消息接受的太慢,产生消息拥堵。
2、发生消息拥堵后,系统会自动降低消息发送的速度。
举例说明:
正常情况下:消息处理速度>=消息的发送速度,不会发送消息拥堵,系统运行流畅
异常情况下:消息处理速度<消息的发送速度,发生消息堵塞,系统运行不流畅
消息拥堵可以采用两种方案:
1、将拥堵的消息直接删除,将导致数据丢失,在精确度要求高的场景非常不合适。
2、将拥堵的消息缓存起来,并告知消息发送者减缓消息发送的速度。
将消息缓存起来,并将缓冲区持久化,以方便在处理失败的情况下进行数据重复。有些source本身提供持久化机制,可以优先考虑。例如Kafka就是一个很不错的选择,