risingwave_common/config/
streaming.rs1use std::time::Duration;
16
17use risingwave_common_proc_macro::serde_prefix_all;
18
19use super::*;
20
21mod async_stack_trace;
22mod join_encoding_type;
23mod over_window;
24
25pub use async_stack_trace::*;
26pub use join_encoding_type::*;
27pub use over_window::*;
28
29#[serde_with::apply(Option => #[serde(with = "none_as_empty_string")])]
31#[derive(Clone, Debug, Serialize, Deserialize, DefaultFromSerde, ConfigDoc)]
32pub struct StreamingConfig {
33 #[serde(default = "default::streaming::in_flight_barrier_nums")]
35 pub in_flight_barrier_nums: usize,
36
37 #[serde(default)]
40 pub actor_runtime_worker_threads_num: Option<usize>,
41
42 #[serde(default = "default::streaming::async_stack_trace")]
44 pub async_stack_trace: AsyncStackTraceOption,
45
46 #[serde(default)]
47 #[config_doc(nested)]
48 pub developer: StreamingDeveloperConfig,
49
50 #[serde(default = "default::streaming::unique_user_stream_errors")]
52 pub unique_user_stream_errors: usize,
53
54 #[serde(default = "default::streaming::unsafe_disable_strict_consistency")]
56 pub unsafe_disable_strict_consistency: bool,
57
58 #[serde(default, flatten)]
59 #[config_doc(omitted)]
60 pub unrecognized: Unrecognized<Self>,
61}
62
63#[serde_prefix_all("stream_", mode = "alias")]
67#[serde_with::apply(Option => #[serde(with = "none_as_empty_string")])]
68#[derive(Clone, Debug, Serialize, Deserialize, DefaultFromSerde, ConfigDoc)]
69pub struct StreamingDeveloperConfig {
70 #[serde(default = "default::developer::stream_enable_executor_row_count")]
74 pub enable_executor_row_count: bool,
75
76 #[serde(default = "default::developer::connector_message_buffer_size")]
79 pub connector_message_buffer_size: usize,
80
81 #[serde(default = "default::developer::unsafe_stream_extreme_cache_size")]
83 pub unsafe_extreme_cache_size: usize,
84
85 #[serde(default = "default::developer::stream_topn_cache_min_capacity")]
87 pub topn_cache_min_capacity: usize,
88
89 #[serde(default = "default::developer::stream_chunk_size")]
91 pub chunk_size: usize,
92
93 #[serde(default = "default::developer::stream_exchange_initial_permits")]
96 pub exchange_initial_permits: usize,
97
98 #[serde(default = "default::developer::stream_exchange_batched_permits")]
101 pub exchange_batched_permits: usize,
102
103 #[serde(default = "default::developer::stream_exchange_concurrent_barriers")]
105 pub exchange_concurrent_barriers: usize,
106
107 #[serde(default = "default::developer::stream_exchange_concurrent_dispatchers")]
112 pub exchange_concurrent_dispatchers: usize,
113
114 #[serde(default = "default::developer::stream_project_expr_concurrency")]
119 pub project_expr_concurrency: usize,
120
121 #[serde(default = "default::developer::stream_project_expr_inflight_request_concurrency")]
129 pub project_expr_inflight_request_concurrency: usize,
130
131 #[serde(default = "default::developer::stream_dml_channel_initial_permits")]
134 pub dml_channel_initial_permits: usize,
135
136 #[serde(default = "default::developer::stream_hash_agg_max_dirty_groups_heap_size")]
138 pub hash_agg_max_dirty_groups_heap_size: usize,
139
140 #[serde(default = "default::developer::memory_controller_threshold_aggressive")]
141 pub memory_controller_threshold_aggressive: f64,
142
143 #[serde(default = "default::developer::memory_controller_threshold_graceful")]
144 pub memory_controller_threshold_graceful: f64,
145
146 #[serde(default = "default::developer::memory_controller_threshold_stable")]
147 pub memory_controller_threshold_stable: f64,
148
149 #[serde(default = "default::developer::memory_controller_eviction_factor_aggressive")]
150 pub memory_controller_eviction_factor_aggressive: f64,
151
152 #[serde(default = "default::developer::memory_controller_eviction_factor_graceful")]
153 pub memory_controller_eviction_factor_graceful: f64,
154
155 #[serde(default = "default::developer::memory_controller_eviction_factor_stable")]
156 pub memory_controller_eviction_factor_stable: f64,
157
158 #[serde(default = "default::developer::memory_controller_update_interval_ms")]
159 pub memory_controller_update_interval_ms: usize,
160
161 #[serde(default = "default::developer::memory_controller_sequence_tls_step")]
162 pub memory_controller_sequence_tls_step: u64,
163
164 #[serde(default = "default::developer::memory_controller_sequence_tls_lag")]
165 pub memory_controller_sequence_tls_lag: u64,
166
167 #[serde(default = "default::developer::stream_enable_arrangement_backfill")]
168 #[deprecated(
171 note = "Deprecated and ignored for new streaming jobs. Arrangement backfill is always used as the fallback backfill type."
172 )]
173 pub enable_arrangement_backfill: bool,
174
175 #[serde(default = "default::developer::stream_enable_snapshot_backfill")]
176 pub enable_snapshot_backfill: bool,
181
182 #[serde(default = "default::developer::stream_high_join_amplification_threshold")]
183 pub high_join_amplification_threshold: usize,
186
187 #[serde(default = "default::developer::stream_high_gap_fill_amplification_threshold")]
188 pub high_gap_fill_amplification_threshold: usize,
191
192 #[serde(default = "default::developer::enable_actor_tokio_metrics")]
194 pub enable_actor_tokio_metrics: bool,
195
196 #[serde(default = "default::developer::stream_exchange_connection_pool_size")]
199 pub(super) exchange_connection_pool_size: Option<u16>,
200
201 #[serde(default = "default::developer::stream_enable_auto_schema_change")]
203 pub enable_auto_schema_change: bool,
204
205 #[serde(default = "default::developer::enable_shared_source")]
206 pub enable_shared_source: bool,
211
212 #[serde(default = "default::developer::switch_jdbc_pg_to_native")]
213 pub switch_jdbc_pg_to_native: bool,
216
217 #[serde(default = "default::developer::stream_max_barrier_batch_size")]
219 pub max_barrier_batch_size: u32,
220
221 #[serde(default = "default::developer::streaming_hash_join_entry_state_max_rows")]
224 pub hash_join_entry_state_max_rows: usize,
225
226 #[serde(default = "default::developer::streaming_join_hash_map_evict_interval_rows")]
229 pub join_hash_map_evict_interval_rows: u32,
230
231 #[serde(default = "default::developer::streaming_now_progress_ratio")]
232 pub now_progress_ratio: Option<f32>,
233
234 #[serde(default = "default::developer::enable_explain_analyze_stats")]
236 pub enable_explain_analyze_stats: bool,
237
238 #[serde(default)]
239 pub compute_client_config: RpcClientConfig,
240
241 #[serde(default = "default::developer::stream_snapshot_iter_rebuild_interval_secs")]
243 pub snapshot_iter_rebuild_interval_secs: u64,
244
245 #[serde(default = "default::developer::iceberg_list_interval_sec")]
247 pub iceberg_list_interval_sec: u64,
248
249 #[serde(default = "default::developer::iceberg_fetch_batch_size")]
251 pub iceberg_fetch_batch_size: u64,
252
253 #[serde(default = "default::developer::iceberg_sink_positional_delete_cache_size")]
255 pub iceberg_sink_positional_delete_cache_size: usize,
256
257 #[serde(default = "default::developer::iceberg_sink_write_parquet_max_row_group_rows")]
259 pub iceberg_sink_write_parquet_max_row_group_rows: usize,
260
261 #[serde(default = "default::developer::materialize_force_overwrite_on_no_check")]
264 pub materialize_force_overwrite_on_no_check: bool,
265
266 #[serde(default = "default::streaming::default_enable_mem_preload_state_table")]
269 pub default_enable_mem_preload_state_table: bool,
270
271 #[serde(default)]
274 pub mem_preload_state_table_ids_whitelist: Vec<u32>,
275
276 #[serde(default)]
279 pub mem_preload_state_table_ids_blacklist: Vec<u32>,
280
281 #[serde(default)]
284 pub aggressive_noop_update_elimination: bool,
285
286 #[serde(default = "default::developer::refresh_scheduler_interval_sec")]
288 pub refresh_scheduler_interval_sec: u64,
289
290 #[serde(default)]
292 pub join_encoding_type: JoinEncodingType,
293
294 #[serde(default = "default::developer::sync_log_store_pause_duration_ms")]
298 pub sync_log_store_pause_duration_ms: usize,
299
300 #[serde(default = "default::developer::sync_log_store_buffer_size")]
302 pub sync_log_store_buffer_size: usize,
303
304 #[serde(default = "default::developer::disable_sync_log_store_dispatcher")]
306 pub disable_sync_log_store_dispatcher: bool,
307
308 #[serde(default)]
311 pub over_window_cache_policy: OverWindowCachePolicy,
312
313 #[serde(default = "default::developer::enable_state_table_vnode_stats_pruning")]
319 pub enable_state_table_vnode_stats_pruning: bool,
320
321 #[serde(default = "default::developer::enable_vnode_key_stats_for_materialize")]
323 pub enable_vnode_key_stats_for_materialize: bool,
324
325 #[serde(default = "default::developer::max_concurrent_kv_log_store_historical_read")]
330 pub max_concurrent_kv_log_store_historical_read: usize,
331
332 #[serde(default, flatten)]
333 #[serde_prefix_all(skip)]
334 #[config_doc(omitted)]
335 pub unrecognized: Unrecognized<Self>,
336}
337
338impl StreamingDeveloperConfig {
339 pub fn snapshot_iter_rebuild_interval(&self) -> Duration {
340 let rebuild_interval = if self.snapshot_iter_rebuild_interval_secs < 10 {
341 tracing::warn!(
342 "too small rebuild_interval {} second. rewrite to 10",
343 self.snapshot_iter_rebuild_interval_secs
344 );
345 10
346 } else {
347 self.snapshot_iter_rebuild_interval_secs
348 };
349 Duration::from_secs(rebuild_interval)
350 }
351}
352
353impl StreamingConfig {
354 pub fn unrecognized_keys(&self) -> impl Iterator<Item = String> {
356 std::iter::from_coroutine(
357 #[coroutine]
358 || {
359 for k in self.unrecognized.inner().keys() {
360 yield format!("streaming.{k}");
361 }
362 for k in self.developer.unrecognized.inner().keys() {
363 yield format!("streaming.developer.{k}");
364 }
365 },
366 )
367 }
368}
369
370pub mod default {
371 pub use crate::config::default::developer;
372
373 pub mod streaming {
374 use tracing::info;
375
376 use crate::config::AsyncStackTraceOption;
377 use crate::util::env_var::env_var_is_true;
378
379 pub fn in_flight_barrier_nums() -> usize {
380 10000
383 }
384
385 pub fn async_stack_trace() -> AsyncStackTraceOption {
386 AsyncStackTraceOption::default()
387 }
388
389 pub fn unique_user_stream_errors() -> usize {
390 10
391 }
392
393 pub fn unsafe_disable_strict_consistency() -> bool {
394 false
395 }
396
397 pub fn default_enable_mem_preload_state_table() -> bool {
398 if env_var_is_true("DEFAULT_ENABLE_MEM_PRELOAD_STATE_TABLE") {
399 info!("enabled mem_preload_state_table globally by env var");
400 true
401 } else {
402 false
403 }
404 }
405 }
406}