You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@flink.apache.org by "featzhang (Jira)" <ji...@apache.org> on 2026/02/26 16:27:00 UTC
[jira] [Created] (FLINK-39170) [Table/SQL] Add async batch lookup join optimization for temporal table joins
featzhang created FLINK-39170:
---------------------------------
Summary: [Table/SQL] Add async batch lookup join optimization for temporal table joins
Key: FLINK-39170
URL: https://issues.apache.org/jira/browse/FLINK-39170
Project: Flink
Issue Type: New Feature
Components: Table SQL / API, Table SQL / Planner
Reporter: featzhang
h2. Overview
This feature introduces an async batch lookup join optimization for temporal table joins in Flink's Table API & SQL. The optimization batches multiple lookup requests together to reduce network overhead and improve throughput, particularly beneficial for high-throughput scenarios with frequent dimension table lookups.
h2. Motivation
Currently, Flink's temporal table joins perform individual lookup requests for each input record, which can lead to:
* *High network overhead*: Each lookup request requires a separate network round-trip
* *Suboptimal throughput*: Network latency becomes a bottleneck in high-throughput scenarios
* *Resource inefficiency*: Frequent small requests don't utilize network bandwidth effectively
h2. Proposed Solution
Implement an async batch lookup join that:
* *Batches lookup requests*: Groups multiple lookup requests together before sending to the external system
* *Configurable batch size*: Allows users to tune batch size based on their specific use case
* *Timeout-based flushing*: Ensures low latency by flushing incomplete batches after a configurable interval
* *Backward compatibility*: Maintains existing behavior when batch mode is disabled (default)
h2. Use Cases
* *Real-time analytics*: High-throughput streaming jobs that need to enrich data with dimension tables
* *Event processing*: Applications processing millions of events per second with frequent lookups
* *Data warehousing*: ETL pipelines that need to join streaming data with slowly changing dimensions
h2. Expected Benefits
* *Improved throughput*: 2-5x improvement in lookup throughput for high-volume scenarios
* *Reduced network overhead*: Fewer network round-trips through batching
* *Better resource utilization*: More efficient use of network bandwidth and external system resources
* *Configurable performance*: Users can tune batch size and flush interval based on their latency/throughput requirements
h2. Configuration Options
h3. table.optimizer.dim-lookup-join.batch.enabled
* *Type*: Boolean
* *Default*: false
* *Description*: Whether to enable the dim table batch lookup join optimization
h3. table.optimizer.dim-lookup-join.batch.size
* *Type*: Integer
* *Default*: 100
* *Description*: The batch size of dim table lookup join. Controls how many lookup requests are batched together.
h3. table.optimizer.dim-lookup-join.batch.flush.millis
* *Type*: Long
* *Default*: 2000L
* *Description*: The flush interval of dim table lookup join in batch mode, in milliseconds. Controls the maximum time to wait before flushing a batch.
h2. Implementation Details
h3. Core Components
# *AsyncBatchLookupJoinRunner*: Main runner for batch async lookup joins without calc
# *AsyncBatchLookupJoinWithCalcRunner*: Runner for batch async lookup joins with post-lookup calculations
# *BatchLookupFunctionWrapper*: Adapter that wraps single lookup functions for batch processing
# *BatchResultFutureWrapper*: Wrapper for handling batch result futures
h3. Architecture
{noformat}
Input Stream → Batch Accumulator → Batch Lookup Function → Result Processor → Output Stream
↓
Timeout Flusher (configurable interval)
{noformat}
h3. Batch Processing Flow
# *Accumulation*: Input records are accumulated into batches up to the configured batch size
# *Timeout Handling*: If batch size isn't reached within the flush interval, the batch is processed anyway
# *Batch Lookup*: The entire batch is sent to the lookup function as a single request
# *Result Distribution*: Results are distributed back to the corresponding input records
# *Output*: Joined results are emitted to the output stream
h2. Compatibility
* *Backward Compatible*: Existing temporal table joins continue to work unchanged
* *Opt-in Feature*: Must be explicitly enabled via configuration
* *API Compatible*: No changes to existing Table API or SQL syntax
h2. Testing Strategy
* *Unit Tests*: Comprehensive tests for all batch processing components
* *Integration Tests*: End-to-end tests with various batch sizes and flush intervals
* *Performance Tests*: Benchmarks comparing batch vs non-batch performance
* *Configuration Tests*: Validation of all configuration options
--
This message was sent by Atlassian Jira
(v8.20.10#820010)