网络流控的概念与背景
1.为什么需要网络流控
如果 Receive Buffer 是有界的,这时候新到达的数据就只能被丢弃掉了。
如果 Receive Buffer 是无界的,Receive Buffer 会持续的扩张,最终会导致 Consumer 的内存耗尽。
2.网络流控的实现:静态限速
我们在Producer端实现一个静态限流,Producer经过限流器流量降低到和Consumer端相同,这样的话 Producer 端的发送速率跟 Consumer 端的处理速率就可以匹配起来了,就不会导致上述问题。但是这个解决方案有两点限制:
1.事先无法预估 Consumer 到底能承受多大的速率;
2.Consumer 的承受能力通常会动态地波动。
3.网络流控的实现:动态反馈/自动反压
我们需要Consumer及时的给Producer做一个feedback,告知Producer能够承受的速率是多少(flink的反压就采用动态反馈)。
动态反馈分为两种:
1.负反馈:接受速率小于发送速率时发生,告知 Producer 降低发送速率;
2正反馈:发送速率小于接收速率时发生,告知 Producer 可以把发送速率提上来。
Flink反压机制
TCP流控机制
TCP 包的格式结构,有 Sequence number 这样一个机制给每个