其实可以和kafka的pull模型对比下,kafka消费是不断轮训pull。我的认知中flink应该不是吧? flink应该仅仅是请求 result partition 的时候下游主动去上游请求? 建立之后应该就是类似一条连接不断读取数据?
yanfei lei <fredia...@gmail.com> 于2022年9月22日周四 11:31写道: > > Hi, > Flink社区有一篇关于Credit-based Flow Control的blog post > <https://flink.apache.org/2019/06/05/flink-network-stack.html#credit-based-flow-control> > ,里面介绍了反压机制的原理和优劣势,希望有帮助。 > > Shammon FY <zjur...@gmail.com> 于2022年9月21日周三 11:43写道: > > > Hi > > 我个人觉得简单的说flink数据传输是pull模型可能会有歧义,一般来讲大家理解的两个模型的执行流程如下 > > 1. push模型 > > 上下游计算任务将初始化网络连接后,上游计算任务直接通过连接不断向下游"push"数据 > > 2. pull模型 > > 上下游计算任务初始化网络连接后,下游计算任务根据自己的计算进度,轮询向上游发送请求“pull”数据,执行下一轮计算 > > > > 在flink里,上下游交互流程主要分为几个步骤 > > 1. 上游计算任务所在的TM创建一个Netty Server > > 2. 下游计算任务启动时通过Netty Client跟上游创建连接 > > 3. 下游计算任务向上游发送一个partition > > request请求,上游根据request请求创建数据reader,通过reader不断读取数据并通过连接发送数据 > > 4. 上下游计算任务分别有自己的内存池子,用于流控,大概流程如下 > > a) 下游计算任务根据数据消费内存池子情况,不定期向上游计算任务更新授信(credit) > > b) 上游计算任务根据接收到的credit消息,更新本地管理的授信大小 > > c) 上游计算任务根据本地授信大小不断向下游计算任务发送数据 > > > > 通过这种方式,在资源足够的情况下,可以保证数据传输是完全流式的,这跟传统的pull模型不同,可能更像是支持授信流控机制的push模型 > > > > On Wed, Sep 21, 2022 at 9:43 AM yh z <zhengyunhon...@gmail.com> wrote: > > > > > 你好。 Flink 采用的是 pull 模型。pull 模型的优点在于:1. > > > 其具有更好的扩展性(下游的消费者可以根据需求增加,只需要获取到上游的消费位点); 2. 下游的消费者可以根据需求来调整消费速率; > > > 3.网络传输,flink 以前也尝试使用过push模型,且为了节约开销,进程间是复用 TCP连接,一个 task > > 线程的性能瓶颈将导致整条链路的所有 > > > task 线程不能接收数据,影响整体的数据消费速率。 push模型的优点:消耗较小,不需要设计机制来一直轮训观察上游节点的数据情况。 > > > > > > Xuyang <xyzhong...@163.com> 于2022年9月9日周五 20:35写道: > > > > > > > Hi,主要是pull模型:下游主动拉取上游的数据。可以在下游的消费能力达到极限时,通过反压机制,让上游减少生产的数据。 > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > -- > > > > > > > > Best! > > > > Xuyang > > > > > > > > > > > > > > > > > > > > > > > > 在 2022-09-09 19:04:27,"郑 致远" <zehongzheng2...@hotmail.com> 写道: > > > > >各位大佬好 > > > > >请教下, > > > > >flink 的数据传输,是上游算子推给下游, 还是下游算子拉取上游, 这么设计的考虑是啥呢? > > > > > > > > >