Thanks everyone for providing valuable feedback to the FLIP draft. I will start voting early next week.
On Mon, Oct 26, 2026 at 5:21 PM Peter Huang <[email protected]> wrote: > Hi Weiqing, > > Thanks for this feedback with detailed insight. > > 1. Reader integration. > Looks like it is an existing issue of RateLimitedSourceReader. There > should be a separate PR to fix it. > At the same time, the functionality needs to be added into both > RateLimitedSourceReader and SourceReaderBase. > > 2. Recovering after backoff. > It is algorithm dependent. The RateLimitCalculator is defined as an > interface. FLIP-610 provides a default algorithm. > A user may define a customized solution according to their needs. Please > refer to the PoC for details. > > 3. Timeouts and restarts. > The proposal mainly targets to adaptively control the flink job after it > runs smoothly at the beginning. If it is not stable at the beginning, > the user needs to fix the external dependencies or start with > a conservative max record per second limit in the configuration. > Obviously, source lag will be expected. > > 4. Delivering unequal allocations. > The PoC defines a default balanced calculation according to the subtask > throughput. > Please review if it is generic enough. > > It is the initial PoC <https://github.com/apache/flink/pull/29627>of the > proposal. Please comment on it directly. > > Best Regards > Peter Huang > > > > > > > > > > > > > > > > > > > > > > > > On Tue, Oct 13, 2026 at 11:58 PM Weiqing Yang <[email protected]> > wrote: > >> Hi Peter, >> >> Thanks for the proposal. Using observed throughput for backoff makes sense >> because it avoids repeatedly reducing a target the source may never have >> reached. A few questions on how the pieces fit together: >> >> 1. Reader integration. The proposal adds the update hook to >> RateLimitedSourceReader, while SourceReaderBase already manages its own >> limiter. How would updates reach readers using that existing path? If >> wrapping is intended, how would their checkpoint callbacks and split >> pausing be preserved? >> >> 2. Recovering after backoff. With the activation threshold now added, I >> wondered about recovery after backoff. A checkpoint interval of ten >> minutes >> gives a threshold of three minutes. If throttling improves checkpoint >> duration from four minutes to two, would “no adjustment below the >> threshold” also stop the source from gradually increasing its rate again? >> How should that gate work alongside the relative trend check? >> >> 3. Timeouts and restarts. The feedback loop learns from completed >> checkpoints. What happens if a checkpoint times out before it can provide >> a >> sample? What rate would the controller start with after a coordinator >> restart? >> >> 4. Delivering unequal allocations. The new allocator returns a rate for >> each reader, but the delivery section still describes broadcasting one >> total and dividing it equally. How would each reader receive its >> individual >> allocation? >> >> Best, >> Weiqing >> >> >> On Tue, Oct 13, 2026 at 9:54 AM Peter Huang <[email protected]> >> wrote: >> >> > Hi Yanquan, >> > >> > Thanks for the feedback and questions. Sorry for the late reply as I am >> > working on an internal solution for testing end to end. >> > >> > 1. Lack of source-level attribution >> > For Flink jobs that consume data from multiple sources, users can >> leverage >> > the new API introduced in DataStreamSource to configure source-specific >> > RateLimitParams, rather than relying on a global configuration. >> > This provides greater flexibility and enables independent rate-limiting >> > behavior for each source based on its workload characteristics and >> > throughput requirements. >> > >> > >> > 2. Sensitivity to small absolute checkpoint durations >> > The activation threshold is defined as a configurable fraction of the >> > checkpoint interval. For example, if the checkpoint interval is 10 >> minutes >> > and source.dynamic.rate-limit.trend-threshold is set to 0.3, the >> activation >> > threshold would be 3 minutes (10 × 0.3). >> > If the checkpoint duration remains below 3 minutes, no dynamic >> > rate-limiting adjustment is necessary. This approach allows the >> activation >> > threshold to scale proportionally with the configured checkpoint >> interval, >> > avoiding unnecessary rate adjustments when checkpoint duration is >> within an >> > acceptable range. >> > >> > 3. Coordination semantics. >> > As you mentioned, rate updates are soft control signals and are >> therefore >> > loss-tolerant. The coordination mechanism and loss-handling semantics >> > follow the same approach as WatermarkAlignmentEvent. >> > >> > 4. unaligned checkpoints >> > The proposal supports aligned checkpoints only. If users configure >> > unaligned >> > checkpoints, all dynamic rate-limiting configurations will be ignored >> and >> > will have no effect. >> > >> > The Proposal is updated accordingly. >> > >> > Best Regards >> > Peter Huang >> > >> > >> > >> > On Thu, Oct 8, 2026 at 3:11 AM Yanquan Lv <[email protected]> wrote: >> > >> > > Hi Peter, >> > > >> > > Thanks for putting together this proposal. I agree that static rate >> > > limiting has its limitations, especially for pipelines involving large >> > > language model (LLM) inference, where downstream processing capacity >> and >> > > latency can fluctuate significantly. However, I have a few questions >> and >> > > concerns about the current design that I would like to discuss with >> you >> > and >> > > the community. >> > > >> > > 1. Lack of source-level attribution >> > > >> > > For a job with multiple sources, even if the increase in checkpoint >> > > duration is caused by only one source, every SourceCoordinator >> observes >> > the >> > > duration of the same global checkpoint. As a result, all sources with >> > > dynamic rate limiting enabled may independently interpret the slowdown >> > as a >> > > signal to reduce their rates, including sources that did not >> contribute >> > to >> > > the checkpoint slowdown. >> > > >> > > 2. Sensitivity to small absolute checkpoint durations >> > > >> > > Using only the relative change in checkpoint duration can make the >> > > algorithm overly sensitive when the absolute durations are small. For >> > > example, an increase from 100 ms to 1 second represents a tenfold >> > increase >> > > and would strongly indicate a worsening trend, even though a 1-second >> > > checkpoint may still be perfectly healthy and far below the configured >> > > checkpoint timeout. Could the algorithm introduce an activation >> threshold >> > > based on the checkpoint timeout, or a separately configured target >> > > duration, and ignore relative fluctuations while the checkpoint >> duration >> > > remains below that threshold? This could prevent unnecessary >> throttling >> > > caused by large relative changes from a very small baseline. >> > > >> > > 3. Coordination semantics and unaligned checkpoints >> > > >> > > The new bidirectional coordination between the SourceOperators and the >> > > SourceCoordinator also introduces additional failure-handling and >> > > compatibility concerns. The proposal does not specify how the loss of >> a >> > > ReportedThroughputEvent or DynamicRateLimitEvent should be handled. >> > Since a >> > > rate update is a soft control signal, should DynamicRateLimitEvent be >> > > loss-tolerant, similar to WatermarkAlignmentEvent, rather than >> allowing >> > an >> > > occasional delivery failure to trigger task failover? >> > > >> > > The proposal also does not discuss unaligned checkpoints. While the >> > > OperatorEvent mechanism itself appears to be compatible with unaligned >> > > checkpoints, the assumption behind the control signal may no longer >> hold. >> > > Unaligned checkpoints allow barriers to overtake buffered records and >> are >> > > designed to make checkpoint duration largely independent of the >> current >> > > throughput and backpressure. In that case, a checkpoint-duration trend >> > may >> > > not reliably indicate that the source rate is too high. Has the >> algorithm >> > > been evaluated for aligned checkpoints, unaligned checkpoints, and >> > > checkpoints that switch from aligned to unaligned after an alignment >> > > timeout? Would these modes require different feedback signals or >> control >> > > strategies? >> > > >> > > >> > > >> > > Peter Huang <[email protected]> 于2026年10月1日周四 02:38写道: >> > > >> > > > Hi Everyone, >> > > > >> > > > I would like to start a discussion on FLIP-XXX: Dynamic Rate >> Limiting >> > for >> > > > FLIP-27 Source [1]. >> > > > >> > > > Flink's FLIP-27 Source API already supports rate limiting >> (RateLimiter >> > / >> > > > RateLimiterStrategy / RateLimitedSourceReader in flink-core), but >> the >> > > limit >> > > > is static: it's fixed once at source construction time and has no >> > > > visibility into how the job is actually running. >> > > > >> > > > Two pain points observed in this static rate limit feature. >> > > > >> > > > 1. >> > > > >> > > > It is hard to set up a static limit for different scenarios, for >> > > > example, periodical traffic peak, regional failover situation, >> and >> > > etc. >> > > > 2. >> > > > >> > > > For pipelines that throughput is bounded by in process RPC or >> > > downstream >> > > > service. Users prefer to slow down the process rather than impact >> > > these >> > > > services or job failure due to checkpoint timeout. >> > > > >> > > > The proposal aims to add features below to improve the resiliency of >> > > Flink >> > > > application with adjustable ratelimit with the feedback loop from >> > > > checkpoint time: >> > > > >> > > > >> > > > 1. >> > > > >> > > > Add a dynamic rate limit to the Source interface that can adjust >> > > itself >> > > > automatically, using the historical checkpoint completion time >> > tracked >> > > > by the SourceCoordinator as the feedback signal (checkpoints >> getting >> > > > slower → back off; checkpoints healthy → ramp back up). >> > > > 2. >> > > > >> > > > Expose the tuning knobs as standard Flink ConfigOptions instead >> of a >> > > > hand-rolled parameters object, so the feature is configurable the >> > same >> > > > way >> > > > as any other Flink job setting. >> > > > 3. >> > > > >> > > > Base the actual rate adjustment on the source operator's current >> > > > observed throughput, not on the previously-broadcast target rate, >> > so a >> > > > throttle/ramp decision takes effect immediately instead of >> > compounding >> > > > off >> > > > a stale number. >> > > > >> > > > >> > > > >> > > > >> > > > Looking forward to your feedback! >> > > > >> > > > >> > > > Best Regards >> > > > Peter Huang >> > > > >> > > > [1] >> > > > >> > > > >> > > >> > >> https://docs.google.com/document/d/1oOUBY6cbLnbvA3Xs9Hm8irvxStPHy5jIEjFec_46rNg/edit?tab=t.0#heading=h.exegx0l01gnh >> > > > >> > > >> > >> >
