nzw921rx commented on PR #10964:
URL: https://github.com/apache/seatunnel/pull/10964#issuecomment-4591594758

   Apologies, my earlier comments may not have been clear enough. Let me 
reorganize my thoughts here.
   
   I've identified a few points in the current approach that I think are worth 
discussing:
   
   -  Architectural consistency
      The `Sink→Sink` point-to-point shuffle effectively introduces an 
additional data channel outside the engine's existing data exchange, checkpoint 
alignment, and back-pressure paths, which conflicts with Zeta's current 
unidirectional DAG architecture. Moreover, this approach lacks reusability — if 
future data flows need to introduce scenarios such as primary-key-based 
routing, it would be nearly impossible to extend from this foundation.
   
   -  Cluster stability risk
   
      The current hash routing lacks a back-pressure feedback loop, making it 
easy for hot keys to overload a single writer. Combined with the synchronous 
blocking RPC (the dispatch side's `.get()` blocks the task thread), local skew 
can escalate into a global stall. On the receiving side, although 
`SinkPartitionExchangeOperation` obtains the target task through 
`TaskExecutionService`, the actual write executes synchronously on the HZ 
operation thread — if downstream responses slow down, it directly occupies HZ 
operation threads. More critically, this overhead scales as a product of the 
number of jobs and parallelism. When the cluster runs many concurrent jobs 
(e.g. 100), HZ operation threads can become heavily saturated. Since this 
thread pool is shared across the entire cluster (heartbeats, checkpoints, 
cluster management all depend on it), once exhausted, it may trigger heartbeat 
timeouts, false node-down detection, and cascading failover.
   
   - Failover data loss
   - 
      Because the `Sink→Sink` point-to-point channel is outside the engine's 
checkpoint scope, data that has been sent but not yet persisted may be lost 
during failover, and the existing recovery mechanism cannot replay it. If 
exactly-once or at-least-once recovery needs to be supported in the future, the 
room for retrofitting would be extremely limited.
   
   - A thought on direction
   
      My personal inclination is not to add a point-to-point channel on the 
Sink side, nor to introduce a standalone exchange operator at this stage. A 
direction worth considering is to have `SourceSplitEnumerator` handle routing 
and split strategies on the Source side, which would align better with the 
engine's existing mechanisms.
   
   Based on the above considerations, my suggestion is to produce a detailed 
design first, covering at least the following:
   - The complete `document_id` data flow (assignment, routing, delivery, 
landing), including the addressing relationship between each parallelism 
instance and vector database partitions
   - Checkpoint alignment can be considered as a follow-up iteration (state 
boundaries, snapshot timing, recovery consistency)
   
   The above is solely my personal opinion and I welcome any corrections 
@yzeng1618 @davidzollo @zhangshenghang .


-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: [email protected]

For queries about this service, please contact Infrastructure at:
[email protected]

Reply via email to