You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@fluss.apache.org by gi...@apache.org on 2025/08/12 07:29:17 UTC
(fluss-website) branch asf-site updated: Deploy website - based on 45ac152692aa561a4d87631eb201303a250f48cc
This is an automated email from the ASF dual-hosted git repository.
github-bot pushed a commit to branch asf-site
in repository https://gitbox.apache.org/repos/asf/fluss-website.git
The following commit(s) were added to refs/heads/asf-site by this push:
new 28c59779 Deploy website - based on 45ac152692aa561a4d87631eb201303a250f48cc
28c59779 is described below
commit 28c59779f35905a0c1e5b57bd4dfbbb2f5eb2f9c
Author: gh-actions <ac...@github.com>
AuthorDate: Tue Aug 12 07:29:11 2025 +0000
Deploy website - based on 45ac152692aa561a4d87631eb201303a250f48cc
---
404.html | 4 +-
...tform_arch-0b365a2892747d8d709efae2a20eb810.png | Bin 0 -> 365051 bytes
...g_operator-9f8fb7ad0280354e1561b63a6615b357.png | Bin 0 -> 134815 bytes
...delta_join-08049759413e940eb71f99d45449f52f.png | Bin 0 -> 86019 bytes
...mn_pruning-9b1ea19ec04baad6b5790dfba8fd5ae6.png | Bin 0 -> 143375 bytes
..._profiling-6edbee5cf60680f5a15c8dac1ccb1db5.png | Bin 0 -> 161322 bytes
...onsumption-f4d5fcfb658e670c290ab2be2e504718.png | Bin 0 -> 61199 bytes
..._evolution-1cbe65429b071d1f1bb6b2497f491599.png | Bin 0 -> 107752 bytes
...delta_join-5082dd8b7403c88c6e19e6cbeefca6ee.png | Bin 0 -> 43566 bytes
...orting_job-b9edc790b2248e8d51e27ee15777781f.png | Bin 0 -> 69295 bytes
..._evolution-2fc62883cca1013c9dfe5d774a085a5a.png | Bin 0 -> 83919 bytes
..._evolution-d062e069bcd12155c2dd8bdf8c7c226d.png | Bin 0 -> 112726 bytes
...onsumption-c36e04f8f69fcfd14eb3370abebf3e96.png | Bin 0 -> 80085 bytes
...oint_query-c1e70c05f23eeded2188aaa233d74efa.png | Bin 0 -> 120241 bytes
...y_example1-7f2a861db777f647bfe3ad322307452d.png | Bin 0 -> 78559 bytes
...y_example2-2e75b06cea33441f0183914d6a049103.png | Bin 0 -> 98024 bytes
...rt_tunning-da4fccacf7bce9e94414c36eebd66e86.png | Bin 0 -> 114562 bytes
...fulss_arch-9347738f0d221a64c79f1a2c735b1210.png | Bin 0 -> 49810 bytes
...lying_arch-a7af63a1ea8c1b9d495ba3ae2b4d5100.png | Bin 0 -> 86335 bytes
...ture_plans-1828502586ada6555bb15cd4719ccf5f.png | Bin 0 -> 55889 bytes
..._evolution-db92bbdb4894edfcdb28009b081b687a.png | Bin 0 -> 56927 bytes
..._evolution-4c8a2cfd7386d4b16ba1b474fa554b3b.png | Bin 0 -> 61577 bytes
..._evolution-1828502586ada6555bb15cd4719ccf5f.png | Bin 0 -> 55889 bytes
...ntegration-8ba3bec3161e76abfcdf7c82f2392bc1.png | Bin 0 -> 87963 bytes
..._profiling-80b5d670d20dccdfa5bd96aad32f47f5.png | Bin 0 -> 138728 bytes
...a_pipeline-eebb499bcdba0e096585e5febad7ad99.png | Bin 0 -> 65711 bytes
...n_pruning1-e4c22dae4b6104713ce26f5a370b36a8.png | Bin 0 -> 29238 bytes
...n_pruning2-9187374565daf3d3a14757c8444a7371.png | Bin 0 -> 35168 bytes
...ktracking1-25192a04f93b0cc734d0dae30744a7fc.png | Bin 0 -> 42126 bytes
...ktracking2-74113a436a7f89f34f7405490b5bffc9.png | Bin 0 -> 35295 bytes
...nce_delta1-76e0c23013cbefdb8bf9f76980497d38.png | Bin 0 -> 27893 bytes
...nce_delta2-db0bb3f31808d421f8e516221d44c29d.png | Bin 0 -> 25981 bytes
...mance_read-f565578d7f2a84163de5e0663147c105.png | Bin 0 -> 25429 bytes
...ance_write-27292f1029f6a85e421735a04a2b4a75.png | Bin 0 -> 27876 bytes
...house_arch-10cb25ecf32a9a576b09f081953aeb6d.png | Bin 0 -> 57033 bytes
..._evolution-03d7f2ae3f29d7190bf343b71e1f995d.png | Bin 0 -> 42336 bytes
..._evolution-840cd946cecc1efed58ce5a0f7ab8dfa.png | Bin 0 -> 44341 bytes
..._flink_job-f9515c01b5423520775b54a66b57deeb.png | Bin 0 -> 90965 bytes
...tion_state-d6c2a559f0ec205036782549c3e1434c.png | Bin 0 -> 49160 bytes
...state_size-c2ef4c0431192100599996d24ff10627.png | Bin 0 -> 72980 bytes
.../{08af526d.e5417d77.js => 08af526d.22025a9b.js} | 2 +-
assets/js/0cbde89a.702849bd.js | 1 -
assets/js/0cbde89a.f622d721.js | 1 +
assets/js/814f3328.0db7fac0.js | 1 +
assets/js/814f3328.32e64dca.js | 1 -
assets/js/aa40db63.d5fc15e1.js | 1 +
assets/js/dbfc4782.0d83a129.js | 1 +
assets/js/dbfc4782.9254443c.js | 1 -
.../{dd04b75e.2d6170d2.js => dd04b75e.3affd425.js} | 2 +-
.../{ea70c07d.0e60d95b.js => ea70c07d.e6402964.js} | 2 +-
assets/js/f618cca1.8465e284.js | 1 +
assets/js/f6ebaea3.9a91eec3.js | 1 +
assets/js/f6ebaea3.af153f4b.js | 1 -
assets/js/main.9636bb89.js | 2 +
...js.LICENSE.txt => main.9636bb89.js.LICENSE.txt} | 0
assets/js/main.d75df03d.js | 2 -
assets/js/runtime~main.87feb3cc.js | 1 -
assets/js/runtime~main.93b61691.js | 1 +
blog/archive/index.html | 6 +-
blog/atom.xml | 259 +++++++++++++++++++-
blog/authors/index.html | 6 +-
blog/fluss-intro/index.html | 6 +-
blog/fluss-java-client/index.html | 6 +-
blog/fluss-joins-asf/index.html | 6 +-
blog/fluss-open-source/index.html | 6 +-
blog/hands-on-fluss-lakehouse/index.html | 8 +-
blog/index.html | 19 +-
blog/page/2/index.html | 10 +-
blog/partial-updates/index.html | 6 +-
blog/releases/0.6/index.html | 6 +-
blog/releases/0.7/index.html | 6 +-
blog/rss.xml | 253 ++++++++++++++++++-
blog/tags/index.html | 6 +-
blog/tags/releases/index.html | 6 +-
blog/taobao-practice/index.html | 272 +++++++++++++++++++++
blog/tiering-service/index.html | 6 +-
blog/unified-streaming-lakehouse/index.html | 6 +-
blog/unveil-fluss-logo/index.html | 6 +-
blog/why-fluss/index.html | 6 +-
community/dev/building/index.html | 4 +-
community/dev/ide-setup/index.html | 4 +-
community/fluss-logos/index.html | 4 +-
.../bug-reports-feature-requests/index.html | 4 +-
.../how-to-contribute/contribute-code/index.html | 4 +-
.../how-to-contribute/contribute-docs/index.html | 4 +-
.../review-pull-requests/index.html | 4 +-
.../creating-a-fluss-shaded-release/index.html | 4 +-
.../release-manager-preparation/index.html | 4 +-
.../verifying-a-fluss-shaded-release/index.html | 4 +-
community/welcome/index.html | 4 +-
docs/0.5/concepts/architecture/index.html | 4 +-
docs/0.5/dev/building/index.html | 4 +-
docs/0.5/dev/ide-setup/index.html | 4 +-
docs/0.5/engine-flink/ddl/index.html | 4 +-
docs/0.5/engine-flink/getting-started/index.html | 4 +-
docs/0.5/engine-flink/lookups/index.html | 4 +-
docs/0.5/engine-flink/reads/index.html | 4 +-
docs/0.5/engine-flink/writes/index.html | 4 +-
docs/0.5/index.html | 4 +-
.../deploying-distributed-cluster/index.html | 4 +-
.../deploying-local-cluster/index.html | 4 +-
.../deploying-with-docker/index.html | 4 +-
docs/0.5/install-deploy/overview/index.html | 4 +-
docs/0.5/maintenance/configuration/index.html | 4 +-
docs/0.5/maintenance/filesystems/hdfs/index.html | 4 +-
docs/0.5/maintenance/filesystems/oss/index.html | 4 +-
.../maintenance/filesystems/overview/index.html | 4 +-
docs/0.5/maintenance/filesystems/s3/index.html | 4 +-
docs/0.5/maintenance/logging/index.html | 4 +-
docs/0.5/maintenance/metric-reporters/index.html | 4 +-
docs/0.5/maintenance/monitor-metrics/index.html | 4 +-
.../tiered-storage/lakehouse-storage/index.html | 4 +-
.../maintenance/tiered-storage/overview/index.html | 4 +-
.../tiered-storage/remote-storage/index.html | 4 +-
docs/0.5/quickstart/flink/index.html | 4 +-
.../integrate-data-lakes/paimon/index.html | 4 +-
docs/0.5/streaming-lakehouse/overview/index.html | 4 +-
.../data-distribution/bucketing/index.html | 4 +-
.../data-distribution/partitioning/index.html | 4 +-
.../table-design/data-distribution/ttl/index.html | 4 +-
docs/0.5/table-design/data-types/index.html | 4 +-
docs/0.5/table-design/overview/index.html | 4 +-
.../table-design/table-types/log-table/index.html | 4 +-
.../table-design/table-types/pk-table/index.html | 4 +-
docs/0.6/concepts/architecture/index.html | 4 +-
docs/0.6/engine-flink/ddl/index.html | 4 +-
docs/0.6/engine-flink/getting-started/index.html | 4 +-
docs/0.6/engine-flink/lookups/index.html | 4 +-
docs/0.6/engine-flink/options/index.html | 4 +-
docs/0.6/engine-flink/reads/index.html | 4 +-
docs/0.6/engine-flink/writes/index.html | 4 +-
docs/0.6/index.html | 4 +-
.../deploying-distributed-cluster/index.html | 4 +-
.../deploying-local-cluster/index.html | 4 +-
.../deploying-with-docker/index.html | 4 +-
docs/0.6/install-deploy/overview/index.html | 4 +-
docs/0.6/maintenance/configuration/index.html | 4 +-
docs/0.6/maintenance/filesystems/hdfs/index.html | 4 +-
docs/0.6/maintenance/filesystems/oss/index.html | 4 +-
.../maintenance/filesystems/overview/index.html | 4 +-
docs/0.6/maintenance/filesystems/s3/index.html | 4 +-
.../maintenance/observability/logging/index.html | 4 +-
.../observability/metric-reporters/index.html | 4 +-
.../observability/monitor-metrics/index.html | 4 +-
.../observability/quickstart/index.html | 4 +-
.../tiered-storage/lakehouse-storage/index.html | 4 +-
.../maintenance/tiered-storage/overview/index.html | 4 +-
.../tiered-storage/remote-storage/index.html | 4 +-
docs/0.6/quickstart/flink/index.html | 4 +-
.../integrate-data-lakes/paimon/index.html | 4 +-
docs/0.6/streaming-lakehouse/overview/index.html | 4 +-
.../data-distribution/bucketing/index.html | 4 +-
.../data-distribution/partitioning/index.html | 4 +-
.../table-design/data-distribution/ttl/index.html | 4 +-
docs/0.6/table-design/data-types/index.html | 4 +-
docs/0.6/table-design/overview/index.html | 4 +-
.../table-design/table-types/log-table/index.html | 4 +-
.../table-design/table-types/pk-table/index.html | 4 +-
.../pk-table/merge-engines/first-row/index.html | 4 +-
.../table-types/pk-table/merge-engines/index.html | 4 +-
.../pk-table/merge-engines/versioned/index.html | 4 +-
docs/apis/java-client/index.html | 4 +-
docs/concepts/architecture/index.html | 4 +-
docs/engine-flink/datastream/index.html | 4 +-
docs/engine-flink/ddl/index.html | 4 +-
docs/engine-flink/getting-started/index.html | 4 +-
docs/engine-flink/lookups/index.html | 4 +-
docs/engine-flink/options/index.html | 4 +-
docs/engine-flink/reads/index.html | 4 +-
docs/engine-flink/writes/index.html | 4 +-
docs/index.html | 4 +-
.../deploying-distributed-cluster/index.html | 4 +-
.../deploying-local-cluster/index.html | 4 +-
.../deploying-with-docker/index.html | 4 +-
docs/install-deploy/overview/index.html | 4 +-
docs/maintenance/configuration/index.html | 4 +-
docs/maintenance/filesystems/hdfs/index.html | 4 +-
docs/maintenance/filesystems/oss/index.html | 4 +-
docs/maintenance/filesystems/overview/index.html | 4 +-
docs/maintenance/filesystems/s3/index.html | 4 +-
docs/maintenance/observability/logging/index.html | 4 +-
.../observability/metric-reporters/index.html | 4 +-
.../observability/monitor-metrics/index.html | 4 +-
.../observability/quickstart/index.html | 4 +-
docs/maintenance/operations/racks/index.html | 4 +-
docs/maintenance/operations/upgrading/index.html | 4 +-
.../tiered-storage/lakehouse-storage/index.html | 4 +-
.../maintenance/tiered-storage/overview/index.html | 4 +-
.../tiered-storage/remote-storage/index.html | 4 +-
docs/next/apis/java-client/index.html | 4 +-
docs/next/concepts/architecture/index.html | 4 +-
docs/next/engine-flink/datastream/index.html | 4 +-
docs/next/engine-flink/ddl/index.html | 4 +-
docs/next/engine-flink/getting-started/index.html | 4 +-
docs/next/engine-flink/lookups/index.html | 4 +-
docs/next/engine-flink/options/index.html | 4 +-
docs/next/engine-flink/reads/index.html | 4 +-
docs/next/engine-flink/writes/index.html | 4 +-
docs/next/index.html | 4 +-
.../deploying-distributed-cluster/index.html | 4 +-
.../deploying-local-cluster/index.html | 4 +-
.../deploying-with-docker/index.html | 4 +-
docs/next/install-deploy/overview/index.html | 4 +-
docs/next/maintenance/configuration/index.html | 4 +-
docs/next/maintenance/filesystems/hdfs/index.html | 4 +-
docs/next/maintenance/filesystems/obs/index.html | 4 +-
docs/next/maintenance/filesystems/oss/index.html | 4 +-
.../maintenance/filesystems/overview/index.html | 4 +-
docs/next/maintenance/filesystems/s3/index.html | 4 +-
.../maintenance/observability/logging/index.html | 4 +-
.../observability/metric-reporters/index.html | 4 +-
.../observability/monitor-metrics/index.html | 4 +-
.../observability/quickstart/index.html | 4 +-
docs/next/maintenance/operations/racks/index.html | 4 +-
.../maintenance/operations/upgrading/index.html | 4 +-
.../tiered-storage/lakehouse-storage/index.html | 4 +-
.../maintenance/tiered-storage/overview/index.html | 4 +-
.../tiered-storage/remote-storage/index.html | 4 +-
docs/next/quickstart/flink/index.html | 4 +-
docs/next/quickstart/security/index.html | 4 +-
docs/next/security/authentication/index.html | 4 +-
docs/next/security/authorization/index.html | 4 +-
docs/next/security/overview/index.html | 4 +-
.../integrate-data-lakes/paimon/index.html | 4 +-
docs/next/streaming-lakehouse/overview/index.html | 4 +-
.../data-distribution/bucketing/index.html | 4 +-
.../data-distribution/partitioning/index.html | 4 +-
.../table-design/data-distribution/ttl/index.html | 4 +-
docs/next/table-design/data-types/index.html | 4 +-
docs/next/table-design/overview/index.html | 4 +-
.../table-design/table-types/log-table/index.html | 4 +-
.../table-design/table-types/pk-table/index.html | 4 +-
.../pk-table/merge-engines/default/index.html | 4 +-
.../pk-table/merge-engines/first-row/index.html | 4 +-
.../table-types/pk-table/merge-engines/index.html | 4 +-
.../pk-table/merge-engines/versioned/index.html | 4 +-
docs/quickstart/flink/index.html | 4 +-
docs/quickstart/security/index.html | 4 +-
docs/security/authentication/index.html | 4 +-
docs/security/authorization/index.html | 4 +-
docs/security/overview/index.html | 4 +-
.../integrate-data-lakes/paimon/index.html | 4 +-
docs/streaming-lakehouse/overview/index.html | 4 +-
.../data-distribution/bucketing/index.html | 4 +-
.../data-distribution/partitioning/index.html | 4 +-
docs/table-design/data-distribution/ttl/index.html | 4 +-
docs/table-design/data-types/index.html | 4 +-
docs/table-design/overview/index.html | 4 +-
docs/table-design/table-types/log-table/index.html | 4 +-
docs/table-design/table-types/pk-table/index.html | 4 +-
.../pk-table/merge-engines/default/index.html | 4 +-
.../pk-table/merge-engines/first-row/index.html | 4 +-
.../table-types/pk-table/merge-engines/index.html | 4 +-
.../pk-table/merge-engines/versioned/index.html | 4 +-
downloads/index.html | 4 +-
img/avatars/wanglilei.png | Bin 0 -> 73522 bytes
img/avatars/zhangxinyu.png | Bin 0 -> 37808 bytes
index.html | 4 +-
learn/talks/index.html | 4 +-
learn/videos/index.html | 4 +-
roadmap/index.html | 4 +-
search/index.html | 4 +-
sitemap.xml | 2 +-
sw.js | 2 +-
264 files changed, 1227 insertions(+), 438 deletions(-)
diff --git a/404.html b/404.html
index 5a5cd42c..eb3233cf 100644
--- a/404.html
+++ b/404.html
@@ -15,8 +15,8 @@
<link rel="icon" href="/img/logo.svg">
<link rel="manifest" href="/manifest.json">
<meta name="theme-color" content="#0071e3"><link rel="stylesheet" href="/assets/css/styles.53ed9f81.css">
-<script src="/assets/js/runtime~main.87feb3cc.js" defer="defer"></script>
-<script src="/assets/js/main.d75df03d.js" defer="defer"></script>
+<script src="/assets/js/runtime~main.93b61691.js" defer="defer"></script>
+<script src="/assets/js/main.9636bb89.js" defer="defer"></script>
</head>
<body class="navigation-with-keyboard">
<svg xmlns="http://www.w3.org/2000/svg" style="display: none;"><defs>
diff --git a/assets/images/ab_experiment_platform_arch-0b365a2892747d8d709efae2a20eb810.png b/assets/images/ab_experiment_platform_arch-0b365a2892747d8d709efae2a20eb810.png
new file mode 100644
index 00000000..15934ba6
Binary files /dev/null and b/assets/images/ab_experiment_platform_arch-0b365a2892747d8d709efae2a20eb810.png differ
diff --git a/assets/images/column_pruning_operator-9f8fb7ad0280354e1561b63a6615b357.png b/assets/images/column_pruning_operator-9f8fb7ad0280354e1561b63a6615b357.png
new file mode 100644
index 00000000..ccb773b4
Binary files /dev/null and b/assets/images/column_pruning_operator-9f8fb7ad0280354e1561b63a6615b357.png differ
diff --git a/assets/images/comparison_of_dual_stream_join_and_delta_join-08049759413e940eb71f99d45449f52f.png b/assets/images/comparison_of_dual_stream_join_and_delta_join-08049759413e940eb71f99d45449f52f.png
new file mode 100644
index 00000000..46d11ccc
Binary files /dev/null and b/assets/images/comparison_of_dual_stream_join_and_delta_join-08049759413e940eb71f99d45449f52f.png differ
diff --git a/assets/images/comparison_of_fluss_and_mq_column_pruning-9b1ea19ec04baad6b5790dfba8fd5ae6.png b/assets/images/comparison_of_fluss_and_mq_column_pruning-9b1ea19ec04baad6b5790dfba8fd5ae6.png
new file mode 100644
index 00000000..8abff8dc
Binary files /dev/null and b/assets/images/comparison_of_fluss_and_mq_column_pruning-9b1ea19ec04baad6b5790dfba8fd5ae6.png differ
diff --git a/assets/images/comparison_of_fulss_and_mq_data_profiling-6edbee5cf60680f5a15c8dac1ccb1db5.png b/assets/images/comparison_of_fulss_and_mq_data_profiling-6edbee5cf60680f5a15c8dac1ccb1db5.png
new file mode 100644
index 00000000..f5d2ede7
Binary files /dev/null and b/assets/images/comparison_of_fulss_and_mq_data_profiling-6edbee5cf60680f5a15c8dac1ccb1db5.png differ
diff --git a/assets/images/comparison_of_row_and_column_storage_consumption-f4d5fcfb658e670c290ab2be2e504718.png b/assets/images/comparison_of_row_and_column_storage_consumption-f4d5fcfb658e670c290ab2be2e504718.png
new file mode 100644
index 00000000..5285277d
Binary files /dev/null and b/assets/images/comparison_of_row_and_column_storage_consumption-f4d5fcfb658e670c290ab2be2e504718.png differ
diff --git a/assets/images/dual_stream_jobs_evolution-1cbe65429b071d1f1bb6b2497f491599.png b/assets/images/dual_stream_jobs_evolution-1cbe65429b071d1f1bb6b2497f491599.png
new file mode 100644
index 00000000..d92e97ef
Binary files /dev/null and b/assets/images/dual_stream_jobs_evolution-1cbe65429b071d1f1bb6b2497f491599.png differ
diff --git a/assets/images/dual_stream_join2delta_join-5082dd8b7403c88c6e19e6cbeefca6ee.png b/assets/images/dual_stream_join2delta_join-5082dd8b7403c88c6e19e6cbeefca6ee.png
new file mode 100644
index 00000000..aa40c12b
Binary files /dev/null and b/assets/images/dual_stream_join2delta_join-5082dd8b7403c88c6e19e6cbeefca6ee.png differ
diff --git a/assets/images/flink_sorting_job-b9edc790b2248e8d51e27ee15777781f.png b/assets/images/flink_sorting_job-b9edc790b2248e8d51e27ee15777781f.png
new file mode 100644
index 00000000..8272496e
Binary files /dev/null and b/assets/images/flink_sorting_job-b9edc790b2248e8d51e27ee15777781f.png differ
diff --git a/assets/images/flink_state_evolution-2fc62883cca1013c9dfe5d774a085a5a.png b/assets/images/flink_state_evolution-2fc62883cca1013c9dfe5d774a085a5a.png
new file mode 100644
index 00000000..50617607
Binary files /dev/null and b/assets/images/flink_state_evolution-2fc62883cca1013c9dfe5d774a085a5a.png differ
diff --git a/assets/images/fluss_column_pruning_evolution-d062e069bcd12155c2dd8bdf8c7c226d.png b/assets/images/fluss_column_pruning_evolution-d062e069bcd12155c2dd8bdf8c7c226d.png
new file mode 100644
index 00000000..3ddc70a6
Binary files /dev/null and b/assets/images/fluss_column_pruning_evolution-d062e069bcd12155c2dd8bdf8c7c226d.png differ
diff --git a/assets/images/fluss_historical_data_consumption-c36e04f8f69fcfd14eb3370abebf3e96.png b/assets/images/fluss_historical_data_consumption-c36e04f8f69fcfd14eb3370abebf3e96.png
new file mode 100644
index 00000000..a58fcc0f
Binary files /dev/null and b/assets/images/fluss_historical_data_consumption-c36e04f8f69fcfd14eb3370abebf3e96.png differ
diff --git a/assets/images/fluss_kv_store_point_query-c1e70c05f23eeded2188aaa233d74efa.png b/assets/images/fluss_kv_store_point_query-c1e70c05f23eeded2188aaa233d74efa.png
new file mode 100644
index 00000000..2ff4c0bd
Binary files /dev/null and b/assets/images/fluss_kv_store_point_query-c1e70c05f23eeded2188aaa233d74efa.png differ
diff --git a/assets/images/fluss_query_example1-7f2a861db777f647bfe3ad322307452d.png b/assets/images/fluss_query_example1-7f2a861db777f647bfe3ad322307452d.png
new file mode 100644
index 00000000..191f3b5e
Binary files /dev/null and b/assets/images/fluss_query_example1-7f2a861db777f647bfe3ad322307452d.png differ
diff --git a/assets/images/fluss_query_example2-2e75b06cea33441f0183914d6a049103.png b/assets/images/fluss_query_example2-2e75b06cea33441f0183914d6a049103.png
new file mode 100644
index 00000000..c6df158f
Binary files /dev/null and b/assets/images/fluss_query_example2-2e75b06cea33441f0183914d6a049103.png differ
diff --git a/assets/images/fluss_sort_tunning-da4fccacf7bce9e94414c36eebd66e86.png b/assets/images/fluss_sort_tunning-da4fccacf7bce9e94414c36eebd66e86.png
new file mode 100644
index 00000000..983aee6c
Binary files /dev/null and b/assets/images/fluss_sort_tunning-da4fccacf7bce9e94414c36eebd66e86.png differ
diff --git a/assets/images/fulss_arch-9347738f0d221a64c79f1a2c735b1210.png b/assets/images/fulss_arch-9347738f0d221a64c79f1a2c735b1210.png
new file mode 100644
index 00000000..bf08e10e
Binary files /dev/null and b/assets/images/fulss_arch-9347738f0d221a64c79f1a2c735b1210.png differ
diff --git a/assets/images/fulss_underlying_arch-a7af63a1ea8c1b9d495ba3ae2b4d5100.png b/assets/images/fulss_underlying_arch-a7af63a1ea8c1b9d495ba3ae2b4d5100.png
new file mode 100644
index 00000000..f440a6eb
Binary files /dev/null and b/assets/images/fulss_underlying_arch-a7af63a1ea8c1b9d495ba3ae2b4d5100.png differ
diff --git a/assets/images/future_plans-1828502586ada6555bb15cd4719ccf5f.png b/assets/images/future_plans-1828502586ada6555bb15cd4719ccf5f.png
new file mode 100644
index 00000000..ae5c00e6
Binary files /dev/null and b/assets/images/future_plans-1828502586ada6555bb15cd4719ccf5f.png differ
diff --git a/assets/images/join_jobs_evolution-db92bbdb4894edfcdb28009b081b687a.png b/assets/images/join_jobs_evolution-db92bbdb4894edfcdb28009b081b687a.png
new file mode 100644
index 00000000..7de9bf6e
Binary files /dev/null and b/assets/images/join_jobs_evolution-db92bbdb4894edfcdb28009b081b687a.png differ
diff --git a/assets/images/lake_jobs_evolution-4c8a2cfd7386d4b16ba1b474fa554b3b.png b/assets/images/lake_jobs_evolution-4c8a2cfd7386d4b16ba1b474fa554b3b.png
new file mode 100644
index 00000000..84278f34
Binary files /dev/null and b/assets/images/lake_jobs_evolution-4c8a2cfd7386d4b16ba1b474fa554b3b.png differ
diff --git a/assets/images/lake_stream_evolution-1828502586ada6555bb15cd4719ccf5f.png b/assets/images/lake_stream_evolution-1828502586ada6555bb15cd4719ccf5f.png
new file mode 100644
index 00000000..ae5c00e6
Binary files /dev/null and b/assets/images/lake_stream_evolution-1828502586ada6555bb15cd4719ccf5f.png differ
diff --git a/assets/images/lake_stream_integration-8ba3bec3161e76abfcdf7c82f2392bc1.png b/assets/images/lake_stream_integration-8ba3bec3161e76abfcdf7c82f2392bc1.png
new file mode 100644
index 00000000..e1ad847e
Binary files /dev/null and b/assets/images/lake_stream_integration-8ba3bec3161e76abfcdf7c82f2392bc1.png differ
diff --git a/assets/images/mq_profiling-80b5d670d20dccdfa5bd96aad32f47f5.png b/assets/images/mq_profiling-80b5d670d20dccdfa5bd96aad32f47f5.png
new file mode 100644
index 00000000..25e3c5d3
Binary files /dev/null and b/assets/images/mq_profiling-80b5d670d20dccdfa5bd96aad32f47f5.png differ
diff --git a/assets/images/origin_data_pipeline-eebb499bcdba0e096585e5febad7ad99.png b/assets/images/origin_data_pipeline-eebb499bcdba0e096585e5febad7ad99.png
new file mode 100644
index 00000000..79be2022
Binary files /dev/null and b/assets/images/origin_data_pipeline-eebb499bcdba0e096585e5febad7ad99.png differ
diff --git a/assets/images/performance_column_pruning1-e4c22dae4b6104713ce26f5a370b36a8.png b/assets/images/performance_column_pruning1-e4c22dae4b6104713ce26f5a370b36a8.png
new file mode 100644
index 00000000..59cadaab
Binary files /dev/null and b/assets/images/performance_column_pruning1-e4c22dae4b6104713ce26f5a370b36a8.png differ
diff --git a/assets/images/performance_column_pruning2-9187374565daf3d3a14757c8444a7371.png b/assets/images/performance_column_pruning2-9187374565daf3d3a14757c8444a7371.png
new file mode 100644
index 00000000..49124ecf
Binary files /dev/null and b/assets/images/performance_column_pruning2-9187374565daf3d3a14757c8444a7371.png differ
diff --git a/assets/images/performance_data_backtracking1-25192a04f93b0cc734d0dae30744a7fc.png b/assets/images/performance_data_backtracking1-25192a04f93b0cc734d0dae30744a7fc.png
new file mode 100644
index 00000000..7d0968cc
Binary files /dev/null and b/assets/images/performance_data_backtracking1-25192a04f93b0cc734d0dae30744a7fc.png differ
diff --git a/assets/images/performance_data_backtracking2-74113a436a7f89f34f7405490b5bffc9.png b/assets/images/performance_data_backtracking2-74113a436a7f89f34f7405490b5bffc9.png
new file mode 100644
index 00000000..3c880fb9
Binary files /dev/null and b/assets/images/performance_data_backtracking2-74113a436a7f89f34f7405490b5bffc9.png differ
diff --git a/assets/images/performance_delta1-76e0c23013cbefdb8bf9f76980497d38.png b/assets/images/performance_delta1-76e0c23013cbefdb8bf9f76980497d38.png
new file mode 100644
index 00000000..5132ee81
Binary files /dev/null and b/assets/images/performance_delta1-76e0c23013cbefdb8bf9f76980497d38.png differ
diff --git a/assets/images/performance_delta2-db0bb3f31808d421f8e516221d44c29d.png b/assets/images/performance_delta2-db0bb3f31808d421f8e516221d44c29d.png
new file mode 100644
index 00000000..586fb5ac
Binary files /dev/null and b/assets/images/performance_delta2-db0bb3f31808d421f8e516221d44c29d.png differ
diff --git a/assets/images/performance_read-f565578d7f2a84163de5e0663147c105.png b/assets/images/performance_read-f565578d7f2a84163de5e0663147c105.png
new file mode 100644
index 00000000..bb55d35b
Binary files /dev/null and b/assets/images/performance_read-f565578d7f2a84163de5e0663147c105.png differ
diff --git a/assets/images/performance_write-27292f1029f6a85e421735a04a2b4a75.png b/assets/images/performance_write-27292f1029f6a85e421735a04a2b4a75.png
new file mode 100644
index 00000000..86bfdd1a
Binary files /dev/null and b/assets/images/performance_write-27292f1029f6a85e421735a04a2b4a75.png differ
diff --git a/assets/images/realtime_data_warehouse_arch-10cb25ecf32a9a576b09f081953aeb6d.png b/assets/images/realtime_data_warehouse_arch-10cb25ecf32a9a576b09f081953aeb6d.png
new file mode 100644
index 00000000..20021e8e
Binary files /dev/null and b/assets/images/realtime_data_warehouse_arch-10cb25ecf32a9a576b09f081953aeb6d.png differ
diff --git a/assets/images/regular_jobs_evolution-03d7f2ae3f29d7190bf343b71e1f995d.png b/assets/images/regular_jobs_evolution-03d7f2ae3f29d7190bf343b71e1f995d.png
new file mode 100644
index 00000000..2f6e0341
Binary files /dev/null and b/assets/images/regular_jobs_evolution-03d7f2ae3f29d7190bf343b71e1f995d.png differ
diff --git a/assets/images/sorting_jobs_evolution-840cd946cecc1efed58ce5a0f7ab8dfa.png b/assets/images/sorting_jobs_evolution-840cd946cecc1efed58ce5a0f7ab8dfa.png
new file mode 100644
index 00000000..60f9a476
Binary files /dev/null and b/assets/images/sorting_jobs_evolution-840cd946cecc1efed58ce5a0f7ab8dfa.png differ
diff --git a/assets/images/transaction_attribution_flink_job-f9515c01b5423520775b54a66b57deeb.png b/assets/images/transaction_attribution_flink_job-f9515c01b5423520775b54a66b57deeb.png
new file mode 100644
index 00000000..3a755056
Binary files /dev/null and b/assets/images/transaction_attribution_flink_job-f9515c01b5423520775b54a66b57deeb.png differ
diff --git a/assets/images/transaction_attribution_state-d6c2a559f0ec205036782549c3e1434c.png b/assets/images/transaction_attribution_state-d6c2a559f0ec205036782549c3e1434c.png
new file mode 100644
index 00000000..57e0eab9
Binary files /dev/null and b/assets/images/transaction_attribution_state-d6c2a559f0ec205036782549c3e1434c.png differ
diff --git a/assets/images/transaction_attribution_state_size-c2ef4c0431192100599996d24ff10627.png b/assets/images/transaction_attribution_state_size-c2ef4c0431192100599996d24ff10627.png
new file mode 100644
index 00000000..3bbf510d
Binary files /dev/null and b/assets/images/transaction_attribution_state_size-c2ef4c0431192100599996d24ff10627.png differ
diff --git a/assets/js/08af526d.e5417d77.js b/assets/js/08af526d.22025a9b.js
similarity index 65%
rename from assets/js/08af526d.e5417d77.js
rename to assets/js/08af526d.22025a9b.js
index 1c3988c7..92f98609 100644
--- a/assets/js/08af526d.e5417d77.js
+++ b/assets/js/08af526d.22025a9b.js
@@ -1 +1 @@
-"use strict";(self.webpackChunkfluss_website=self.webpackChunkfluss_website||[]).push([[529],{41344:e=>{e.exports=JSON.parse('{"metadata":{"permalink":"/blog","page":1,"postsPerPage":10,"totalPages":2,"totalCount":12,"nextPage":"/blog/page/2","blogDescription":"Blog","blogTitle":"Blog"}}')}}]);
\ No newline at end of file
+"use strict";(self.webpackChunkfluss_website=self.webpackChunkfluss_website||[]).push([[529],{41344:e=>{e.exports=JSON.parse('{"metadata":{"permalink":"/blog","page":1,"postsPerPage":10,"totalPages":2,"totalCount":13,"nextPage":"/blog/page/2","blogDescription":"Blog","blogTitle":"Blog"}}')}}]);
\ No newline at end of file
diff --git a/assets/js/0cbde89a.702849bd.js b/assets/js/0cbde89a.702849bd.js
deleted file mode 100644
index e6e7d417..00000000
--- a/assets/js/0cbde89a.702849bd.js
+++ /dev/null
@@ -1 +0,0 @@
-"use strict";(self.webpackChunkfluss_website=self.webpackChunkfluss_website||[]).push([[5459],{28453:(e,s,t)=>{t.d(s,{R:()=>i,x:()=>r});var n=t(96540);const a={},o=n.createContext(a);function i(e){const s=n.useContext(o);return n.useMemo(function(){return"function"==typeof e?e(s):{...s,...e}},[s,e])}function r(e){let s;return s=e.disableParentContext?"function"==typeof e.components?e.components(a):e.components||a:i(e.components),n.createElement(o.Provider,{value:s},e.children)}},34878:e= [...]
\ No newline at end of file
diff --git a/assets/js/0cbde89a.f622d721.js b/assets/js/0cbde89a.f622d721.js
new file mode 100644
index 00000000..4ed7d46c
--- /dev/null
+++ b/assets/js/0cbde89a.f622d721.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkfluss_website=self.webpackChunkfluss_website||[]).push([[5459],{28453:(e,s,t)=>{t.d(s,{R:()=>i,x:()=>r});var n=t(96540);const a={},o=n.createContext(a);function i(e){const s=n.useContext(o);return n.useMemo(function(){return"function"==typeof e?e(s):{...s,...e}},[s,e])}function r(e){let s;return s=e.disableParentContext?"function"==typeof e.components?e.components(a):e.components||a:i(e.components),n.createElement(o.Provider,{value:s},e.children)}},34878:e= [...]
\ No newline at end of file
diff --git a/assets/js/814f3328.0db7fac0.js b/assets/js/814f3328.0db7fac0.js
new file mode 100644
index 00000000..fd02528e
--- /dev/null
+++ b/assets/js/814f3328.0db7fac0.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkfluss_website=self.webpackChunkfluss_website||[]).push([[7472],{55513:e=>{e.exports=JSON.parse('{"title":"All our posts","items":[{"title":"Apache Fluss (Incubating) at Taobao","permalink":"/blog/taobao-practice","unlisted":false,"date":"2025-08-07T00:00:00.000Z"},{"title":"From Stream to Lake: Hands-On with Fluss Tiering into Paimon on Minio","permalink":"/blog/hands-on-fluss-lakehouse","unlisted":false,"date":"2025-07-23T00:00:00.000Z"},{"title":"Fluss Jo [...]
\ No newline at end of file
diff --git a/assets/js/814f3328.32e64dca.js b/assets/js/814f3328.32e64dca.js
deleted file mode 100644
index fd9f01de..00000000
--- a/assets/js/814f3328.32e64dca.js
+++ /dev/null
@@ -1 +0,0 @@
-"use strict";(self.webpackChunkfluss_website=self.webpackChunkfluss_website||[]).push([[7472],{55513:e=>{e.exports=JSON.parse('{"title":"All our posts","items":[{"title":"From Stream to Lake: Hands-On with Fluss Tiering into Paimon on Minio","permalink":"/blog/hands-on-fluss-lakehouse","unlisted":false,"date":"2025-07-23T00:00:00.000Z"},{"title":"Fluss Joins the Apache Incubator","permalink":"/blog/fluss-joins-asf","unlisted":false,"date":"2025-07-10T00:00:00.000Z"},{"title":"Apache Flus [...]
\ No newline at end of file
diff --git a/assets/js/aa40db63.d5fc15e1.js b/assets/js/aa40db63.d5fc15e1.js
new file mode 100644
index 00000000..fe0dc41a
--- /dev/null
+++ b/assets/js/aa40db63.d5fc15e1.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkfluss_website=self.webpackChunkfluss_website||[]).push([[2418],{28453:(e,a,n)=>{n.d(a,{R:()=>s,x:()=>r});var t=n(96540);const o={},i=t.createContext(o);function s(e){const a=t.useContext(i);return t.useMemo(function(){return"function"==typeof e?e(a):{...a,...e}},[a,e])}function r(e){let a;return a=e.disableParentContext?"function"==typeof e.components?e.components(o):e.components||o:s(e.components),t.createElement(i.Provider,{value:a},e.children)}},63835:(e [...]
\ No newline at end of file
diff --git a/assets/js/dbfc4782.0d83a129.js b/assets/js/dbfc4782.0d83a129.js
new file mode 100644
index 00000000..3c15f28d
--- /dev/null
+++ b/assets/js/dbfc4782.0d83a129.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkfluss_website=self.webpackChunkfluss_website||[]).push([[8749],{91895:e=>{e.exports=JSON.parse('{"archive":{"blogPosts":[{"id":"taobao-practice","metadata":{"permalink":"/blog/taobao-practice","source":"@site/blog/2025-08-07-taobao-practice.md","title":"How Taobao uses Apache Fluss (Incubating) for Real-Time Processing in Search and RecSys","description":"Streaming Storage More Suitable for Real-Time OLAP","date":"2025-08-07T00:00:00.000Z","tags":[],"hasTru [...]
\ No newline at end of file
diff --git a/assets/js/dbfc4782.9254443c.js b/assets/js/dbfc4782.9254443c.js
deleted file mode 100644
index 62847de6..00000000
--- a/assets/js/dbfc4782.9254443c.js
+++ /dev/null
@@ -1 +0,0 @@
-"use strict";(self.webpackChunkfluss_website=self.webpackChunkfluss_website||[]).push([[8749],{91895:e=>{e.exports=JSON.parse('{"archive":{"blogPosts":[{"id":"hands-on-fluss-lakehouse","metadata":{"permalink":"/blog/hands-on-fluss-lakehouse","source":"@site/blog/2025-07-23-hands-on-fluss-lakehouse.md","title":"From Stream to Lake: Hands-On with Fluss Tiering into Paimon on Minio","description":"Fluss stores historical data in a lakehouse storage layer while keeping real-time data in the [...]
\ No newline at end of file
diff --git a/assets/js/dd04b75e.2d6170d2.js b/assets/js/dd04b75e.3affd425.js
similarity index 69%
rename from assets/js/dd04b75e.2d6170d2.js
rename to assets/js/dd04b75e.3affd425.js
index 0ed1b2ea..02f30757 100644
--- a/assets/js/dd04b75e.2d6170d2.js
+++ b/assets/js/dd04b75e.3affd425.js
@@ -1 +1 @@
-"use strict";(self.webpackChunkfluss_website=self.webpackChunkfluss_website||[]).push([[1672],{33024:a=>{a.exports=JSON.parse('{"authors":[{"name":"Jark Wu","title":"PPMC member of Apache Fluss (Incubating)","url":"https://github.com/wuchong","imageURL":"/img/avatars/wuchong.png","key":"jark","page":null,"count":7},{"name":"Giannis Polyzos","title":"PPMC member of Apache Fluss (Incubating)","url":"https://github.com/polyzos","imageURL":"/img/avatars/polyzos.png","key":"giannis","page":nu [...]
\ No newline at end of file
+"use strict";(self.webpackChunkfluss_website=self.webpackChunkfluss_website||[]).push([[1672],{33024:a=>{a.exports=JSON.parse('{"authors":[{"name":"Jark Wu","title":"PPMC member of Apache Fluss (Incubating)","url":"https://github.com/wuchong","imageURL":"/img/avatars/wuchong.png","key":"jark","page":null,"count":7},{"name":"Giannis Polyzos","title":"PPMC member of Apache Fluss (Incubating)","url":"https://github.com/polyzos","imageURL":"/img/avatars/polyzos.png","key":"giannis","page":nu [...]
\ No newline at end of file
diff --git a/assets/js/ea70c07d.0e60d95b.js b/assets/js/ea70c07d.e6402964.js
similarity index 64%
rename from assets/js/ea70c07d.0e60d95b.js
rename to assets/js/ea70c07d.e6402964.js
index bc95d535..b2c424aa 100644
--- a/assets/js/ea70c07d.0e60d95b.js
+++ b/assets/js/ea70c07d.e6402964.js
@@ -1 +1 @@
-"use strict";(self.webpackChunkfluss_website=self.webpackChunkfluss_website||[]).push([[8732],{76387:e=>{e.exports=JSON.parse('{"metadata":{"permalink":"/blog/page/2","page":2,"postsPerPage":10,"totalPages":2,"totalCount":12,"previousPage":"/blog","blogDescription":"Blog","blogTitle":"Blog"}}')}}]);
\ No newline at end of file
+"use strict";(self.webpackChunkfluss_website=self.webpackChunkfluss_website||[]).push([[8732],{76387:e=>{e.exports=JSON.parse('{"metadata":{"permalink":"/blog/page/2","page":2,"postsPerPage":10,"totalPages":2,"totalCount":13,"previousPage":"/blog","blogDescription":"Blog","blogTitle":"Blog"}}')}}]);
\ No newline at end of file
diff --git a/assets/js/f618cca1.8465e284.js b/assets/js/f618cca1.8465e284.js
new file mode 100644
index 00000000..276cbfaf
--- /dev/null
+++ b/assets/js/f618cca1.8465e284.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkfluss_website=self.webpackChunkfluss_website||[]).push([[616],{1107:(e,n,t)=>{t.d(n,{A:()=>i});const i=t.p+"assets/images/mq_profiling-80b5d670d20dccdfa5bd96aad32f47f5.png"},4273:(e,n,t)=>{t.d(n,{A:()=>i});const i=t.p+"assets/images/comparison_of_fluss_and_mq_column_pruning-9b1ea19ec04baad6b5790dfba8fd5ae6.png"},4292:(e,n,t)=>{t.d(n,{A:()=>i});const i=t.p+"assets/images/fluss_sort_tunning-da4fccacf7bce9e94414c36eebd66e86.png"},5513:(e,n,t)=>{t.d(n,{A:()=>i} [...]
\ No newline at end of file
diff --git a/assets/js/f6ebaea3.9a91eec3.js b/assets/js/f6ebaea3.9a91eec3.js
new file mode 100644
index 00000000..b2f6f1ef
--- /dev/null
+++ b/assets/js/f6ebaea3.9a91eec3.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkfluss_website=self.webpackChunkfluss_website||[]).push([[8472],{26619:(e,n,s)=>{s.d(n,{A:()=>a});const a=s.p+"assets/images/fluss-bucket-data-47a0df43a938f44f5671f184588fd5ef.png"},28453:(e,n,s)=>{s.d(n,{R:()=>l,x:()=>r});var a=s(96540);const i={},t=a.createContext(i);function l(e){const n=a.useContext(t);return a.useMemo(function(){return"function"==typeof e?e(n):{...n,...e}},[n,e])}function r(e){let n;return n=e.disableParentContext?"function"==typeof e.c [...]
\ No newline at end of file
diff --git a/assets/js/f6ebaea3.af153f4b.js b/assets/js/f6ebaea3.af153f4b.js
deleted file mode 100644
index 8d2427dc..00000000
--- a/assets/js/f6ebaea3.af153f4b.js
+++ /dev/null
@@ -1 +0,0 @@
-"use strict";(self.webpackChunkfluss_website=self.webpackChunkfluss_website||[]).push([[8472],{26619:(e,n,s)=>{s.d(n,{A:()=>a});const a=s.p+"assets/images/fluss-bucket-data-47a0df43a938f44f5671f184588fd5ef.png"},28453:(e,n,s)=>{s.d(n,{R:()=>l,x:()=>r});var a=s(96540);const i={},t=a.createContext(i);function l(e){const n=a.useContext(t);return a.useMemo(function(){return"function"==typeof e?e(n):{...n,...e}},[n,e])}function r(e){let n;return n=e.disableParentContext?"function"==typeof e.c [...]
\ No newline at end of file
diff --git a/assets/js/main.9636bb89.js b/assets/js/main.9636bb89.js
new file mode 100644
index 00000000..36af7fa2
--- /dev/null
+++ b/assets/js/main.9636bb89.js
@@ -0,0 +1,2 @@
+/*! For license information please see main.9636bb89.js.LICENSE.txt */
+(self.webpackChunkfluss_website=self.webpackChunkfluss_website||[]).push([[8792],{205:(e,t,n)=>{"use strict";n.d(t,{A:()=>o});var r=n(96540);const o=n(38193).A.canUseDOM?r.useLayoutEffect:r.useEffect},2694:(e,t,n)=>{"use strict";var r=n(6925);function o(){}function a(){}a.resetWarningCache=o,e.exports=function(){function e(e,t,n,o,a,i){if(i!==r){var s=new Error("Calling PropTypes validators directly is not supported by the `prop-types` package. Use PropTypes.checkPropTypes() to call them [...]
\ No newline at end of file
diff --git a/assets/js/main.d75df03d.js.LICENSE.txt b/assets/js/main.9636bb89.js.LICENSE.txt
similarity index 100%
rename from assets/js/main.d75df03d.js.LICENSE.txt
rename to assets/js/main.9636bb89.js.LICENSE.txt
diff --git a/assets/js/main.d75df03d.js b/assets/js/main.d75df03d.js
deleted file mode 100644
index be4881c6..00000000
--- a/assets/js/main.d75df03d.js
+++ /dev/null
@@ -1,2 +0,0 @@
-/*! For license information please see main.d75df03d.js.LICENSE.txt */
-(self.webpackChunkfluss_website=self.webpackChunkfluss_website||[]).push([[8792],{205:(e,t,n)=>{"use strict";n.d(t,{A:()=>o});var r=n(96540);const o=n(38193).A.canUseDOM?r.useLayoutEffect:r.useEffect},2694:(e,t,n)=>{"use strict";var r=n(6925);function o(){}function a(){}a.resetWarningCache=o,e.exports=function(){function e(e,t,n,o,a,i){if(i!==r){var s=new Error("Calling PropTypes validators directly is not supported by the `prop-types` package. Use PropTypes.checkPropTypes() to call them [...]
\ No newline at end of file
diff --git a/assets/js/runtime~main.87feb3cc.js b/assets/js/runtime~main.87feb3cc.js
deleted file mode 100644
index e25bf055..00000000
--- a/assets/js/runtime~main.87feb3cc.js
+++ /dev/null
@@ -1 +0,0 @@
-(()=>{"use strict";var e,a,c,f,d,b={},t={};function r(e){var a=t[e];if(void 0!==a)return a.exports;var c=t[e]={exports:{}};return b[e].call(c.exports,c,c.exports,r),c.exports}r.m=b,e=[],r.O=(a,c,f,d)=>{if(!c){var b=1/0;for(i=0;i<e.length;i++){c=e[i][0],f=e[i][1],d=e[i][2];for(var t=!0,o=0;o<c.length;o++)(!1&d||b>=d)&&Object.keys(r.O).every(e=>r.O[e](c[o]))?c.splice(o--,1):(t=!1,d<b&&(b=d));if(t){e.splice(i--,1);var n=f();void 0!==n&&(a=n)}}return a}d=d||0;for(var i=e.length;i>0&&e[i-1][2 [...]
\ No newline at end of file
diff --git a/assets/js/runtime~main.93b61691.js b/assets/js/runtime~main.93b61691.js
new file mode 100644
index 00000000..b7ed9473
--- /dev/null
+++ b/assets/js/runtime~main.93b61691.js
@@ -0,0 +1 @@
+(()=>{"use strict";var e,a,c,f,d,b={},t={};function r(e){var a=t[e];if(void 0!==a)return a.exports;var c=t[e]={exports:{}};return b[e].call(c.exports,c,c.exports,r),c.exports}r.m=b,e=[],r.O=(a,c,f,d)=>{if(!c){var b=1/0;for(i=0;i<e.length;i++){c=e[i][0],f=e[i][1],d=e[i][2];for(var t=!0,o=0;o<c.length;o++)(!1&d||b>=d)&&Object.keys(r.O).every(e=>r.O[e](c[o]))?c.splice(o--,1):(t=!1,d<b&&(b=d));if(t){e.splice(i--,1);var n=f();void 0!==n&&(a=n)}}return a}d=d||0;for(var i=e.length;i>0&&e[i-1][2 [...]
\ No newline at end of file
diff --git a/blog/archive/index.html b/blog/archive/index.html
index e15290f9..a90bd5d4 100644
--- a/blog/archive/index.html
+++ b/blog/archive/index.html
@@ -15,14 +15,14 @@
<link rel="icon" href="/img/logo.svg">
<link rel="manifest" href="/manifest.json">
<meta name="theme-color" content="#0071e3"><link rel="stylesheet" href="/assets/css/styles.53ed9f81.css">
-<script src="/assets/js/runtime~main.87feb3cc.js" defer="defer"></script>
-<script src="/assets/js/main.d75df03d.js" defer="defer"></script>
+<script src="/assets/js/runtime~main.93b61691.js" defer="defer"></script>
+<script src="/assets/js/main.9636bb89.js" defer="defer"></script>
</head>
<body class="navigation-with-keyboard">
<svg xmlns="http://www.w3.org/2000/svg" style="display: none;"><defs>
<symbol id="theme-svg-external-link" viewBox="0 0 24 24"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"/></symbol>
</defs></svg>
-<script>!function(){var t="light";var e=function(){try{return new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}}()||function(){try{return window.localStorage.getItem("theme")}catch(t){}}();document.documentElement.setAttribute("data-theme",e||t),document.documentElement.setAttribute("data-theme-choice",e||t)}(),function(){try{const c=new URLSearchParams(window.location.search).entries();for(var[t,e]of c)if(t.startsWith("docusaurus-data-")){var a=t.replace("do [...]
+<script>!function(){var t="light";var e=function(){try{return new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}}()||function(){try{return window.localStorage.getItem("theme")}catch(t){}}();document.documentElement.setAttribute("data-theme",e||t),document.documentElement.setAttribute("data-theme-choice",e||t)}(),function(){try{const c=new URLSearchParams(window.location.search).entries();for(var[t,e]of c)if(t.startsWith("docusaurus-data-")){var a=t.replace("do [...]
<p>Copyright © 2025 The Apache Software Foundation, Licensed under the Apache License, Version 2.0.</p>
<p>Apache, the names of Apache projects, and the feather logo are either registered trademarks or trademarks of the Apache Software Foundation in the United States and/or other countries. All other marks mentioned may be trademarks or registered trademarks of their respective owners.</p></div></div></div></footer></div>
</body>
diff --git a/blog/atom.xml b/blog/atom.xml
index 5666e212..9cdc116f 100644
--- a/blog/atom.xml
+++ b/blog/atom.xml
@@ -2,11 +2,268 @@
<feed xmlns="http://www.w3.org/2005/Atom">
<id>https://fluss.apache.org/blog/</id>
<title>Apache Fluss™ (Incubating) Blog</title>
- <updated>2025-07-23T00:00:00.000Z</updated>
+ <updated>2025-08-07T00:00:00.000Z</updated>
<generator>https://github.com/jpmonette/feed</generator>
<link rel="alternate" href="https://fluss.apache.org/blog/"/>
<subtitle>Apache Fluss™ (Incubating) Blog</subtitle>
<icon>https://fluss.apache.org/img/logo/fluss_favicon.svg</icon>
+ <entry>
+ <title type="html"><![CDATA[How Taobao uses Apache Fluss (Incubating) for Real-Time Processing in Search and RecSys]]></title>
+ <id>https://fluss.apache.org/blog/taobao-practice/</id>
+ <link href="https://fluss.apache.org/blog/taobao-practice/"/>
+ <updated>2025-08-07T00:00:00.000Z</updated>
+ <summary type="html"><![CDATA[Streaming Storage More Suitable for Real-Time OLAP]]></summary>
+ <content type="html"><![CDATA[<h2 class="anchor anchorWithStickyNavbar_LWe7" id="streaming-storage-more-suitable-for-real-time-olap">Streaming Storage More Suitable for Real-Time OLAP<a href="https://fluss.apache.org/blog/taobao-practice/#streaming-storage-more-suitable-for-real-time-olap" class="hash-link" aria-label="Direct link to Streaming Storage More Suitable for Real-Time OLAP" title="Direct link to Streaming Storage More Suitable for Real-Time OLAP"></a></h2>
+<h3 class="anchor anchorWithStickyNavbar_LWe7" id="introduction">Introduction<a href="https://fluss.apache.org/blog/taobao-practice/#introduction" class="hash-link" aria-label="Direct link to Introduction" title="Direct link to Introduction"></a></h3>
+<p>The Data Development Team of Taobao has built a new <strong>generation of real-time data warehouse</strong> based on Apache Fluss.
+Fluss solves the problems of redundant data transfer, difficulties in data profiling, and challenges in large scale stateful workload operations and maintenance.
+By combining columnar storage with real-time update capabilities, Fluss supports column pruning, key-value point lookups, Delta Join, and seamless lake–stream integration, thereby <strong>cutting I/O and compute overhead</strong> while enhancing job stability and profiling efficiency.</p>
+<p>Already deployed on Taobao’s A/B-testing platform for critical services such as search and recommendation, the system proved its resilience during the 618 Grand Promotion:
+<strong>it handled tens of millions of requests with sub-second latency</strong>, lowered resource usage by <strong>30%</strong>, and removed more than 100 TB from state storage.
+Looking ahead, the team will continue to extend Fluss within a <strong>Lakehouse architecture</strong> and broaden its use across <strong>AI-driven</strong> workloads.</p>
+<h3 class="anchor anchorWithStickyNavbar_LWe7" id="business-background">Business Background<a href="https://fluss.apache.org/blog/taobao-practice/#business-background" class="hash-link" aria-label="Direct link to Business Background" title="Direct link to Business Background"></a></h3>
+<p><img decoding="async" loading="lazy" src="https://fluss.apache.org/assets/images/ab_experiment_platform_arch-0b365a2892747d8d709efae2a20eb810.png" width="904" height="346" class="img_ev3q"></p>
+<p>Taobao A/B testing Analysis Platform, mainly focuses on A/B data of Taobao's C-end algorithms, aiming to promote scientific decision-making activities through the construction of generalized A/B data capabilities.
+Since its inception in <strong>2015</strong> , it has continuously and effectively supported the analysis of Taobao's algorithm A/B data for <strong>10 years</strong> .
+Currently, it is applied to <strong>over 100</strong> A/B testing scenarios across various business areas, including <strong>search, recommendation, content,</strong> <strong>user growth</strong>, and <strong>marketing</strong>.</p>
+<p><img decoding="async" loading="lazy" src="https://fluss.apache.org/assets/images/realtime_data_warehouse_arch-10cb25ecf32a9a576b09f081953aeb6d.png" width="904" height="364" class="img_ev3q"></p>
+<p>Taobao provides the following capabilities:</p>
+<ul>
+<li>
+<p><strong>A/B Data Public Data Warehouse:</strong> Serves various data applications of downstream algorithms, including: <code>online traffic splitting</code>, <code>distribution alignment</code>, <code>general features</code>, <code>scenario labels</code>, and other application scenarios.</p>
+</li>
+<li>
+<p><strong>Scientific Experiment Evaluation:</strong> Implement mature scientific evaluation solutions in the industry, conduct long-term tracking of the effects of A/B testing, and help businesses obtain real and reliable experimental evaluation results.</p>
+</li>
+<li>
+<p><strong>Multidimensional Ad Hoc OLAP Self-Service Analysis:</strong> Through mature data solutions, it supports multidimensional and ad hoc OLAP queries, serving data effectiveness analysis across all clients, businesses, and scenarios.</p>
+</li>
+</ul>
+<h2 class="anchor anchorWithStickyNavbar_LWe7" id="business-pain-points">Business Pain Points<a href="https://fluss.apache.org/blog/taobao-practice/#business-pain-points" class="hash-link" aria-label="Direct link to Business Pain Points" title="Direct link to Business Pain Points"></a></h2>
+<p>Currently, the real-time data warehouse of Taobao is based on technology stacks such as Flink, message queue, OLAP engine, etc., where the message queue is TT (Kafka-like architecture MQ) within Taobao, and the OLAP engine is Alibaba Cloud Hologres.</p>
+<p><img decoding="async" loading="lazy" src="https://fluss.apache.org/assets/images/origin_data_pipeline-eebb499bcdba0e096585e5febad7ad99.png" width="904" height="328" class="img_ev3q"></p>
+<p>After ingesting access log data from the message queue, we execute business logic within Apache Flink.
+However, as SQL complexity increases - particularly in the presence of <code>ORDER BY</code> and <code>JOIN</code> operations - the resulting retraction streams significantly expand.</p>
+<p>This leads to a substantial increase in Flink state size, which in turn drives up the consumption of compute resources.
+Such scenarios introduce notable challenges in both job development and ongoing maintenance. Additionally, the development lifecycle for these real-time jobs tends to be considerably longer compared to equivalent offline solutions.</p>
+<p>Currently, the message queue still has some limitations, and the main problems encountered are as follows:</p>
+<h3 class="anchor anchorWithStickyNavbar_LWe7" id="redundant-data-transfer">Redundant Data Transfer<a href="https://fluss.apache.org/blog/taobao-practice/#redundant-data-transfer" class="hash-link" aria-label="Direct link to Redundant Data Transfer" title="Direct link to Redundant Data Transfer"></a></h3>
+<p>In traditional data warehouse environments, <strong>write-once</strong>, <strong>read-many</strong> is the prevailing access pattern, where each downstream consumer typically reads only a subset of the available data.
+For example, in the exposure job for Taobao, the message queue provides 44 fields per record, yet the job only requires 13 of them.
+However, due to the row-based nature of the message queue storage format, all 44 fields must still be read and transmitted during consumption.</p>
+<p>This results in significant <strong>I/O inefficiency; approximately 70% of the network throughput</strong> is wasted on reading unused columns.
+Consumers bear the full cost of data transfer, even though only a fraction of the data is relevant to their processing logic.
+This contributes to <strong>excessive resource utilization</strong>, especially at scale.</p>
+<p>Attempts at Optimization with Flink
+To mitigate this, we explored column pruning within <strong>Apache Flink</strong> by explicitly defining the schema in the Source and introducing a UDF to drop unused columns early in the pipeline.
+While this approach aimed to reduce data ingestion costs, its <strong>practical impact was minimal</strong>.
+The performance gains were negligible, and the added complexity in pipeline design and maintenance introduced new operational challenges.</p>
+<p><img decoding="async" loading="lazy" src="https://fluss.apache.org/assets/images/column_pruning_operator-9f8fb7ad0280354e1561b63a6615b357.png" width="754" height="478" class="img_ev3q"></p>
+<h3 class="anchor anchorWithStickyNavbar_LWe7" id="challenges-in-data-profiling--debugging">Challenges In Data Profiling & Debugging<a href="https://fluss.apache.org/blog/taobao-practice/#challenges-in-data-profiling--debugging" class="hash-link" aria-label="Direct link to Challenges In Data Profiling & Debugging" title="Direct link to Challenges In Data Profiling & Debugging"></a></h3>
+<h4 class="anchor anchorWithStickyNavbar_LWe7" id="message-queues-are-not-designed-for-random-access-or-key-value-lookups">Message queues are not designed for random access or key-value lookups<a href="https://fluss.apache.org/blog/taobao-practice/#message-queues-are-not-designed-for-random-access-or-key-value-lookups" class="hash-link" aria-label="Direct link to Message queues are not designed for random access or key-value lookups" title="Direct link to Message queues are not designed [...]
+<p>In modern data warehouse architecture, <strong>data profiling is a foundational capability</strong>, essential for tasks such as issue diagnosis, anomaly detection, and case-specific troubleshooting. To meet these needs, two distinct data profiling approaches for message queues have been evaluated in production environments.</p>
+<p>While each method offers unique benefits, <strong>both exhibit trade-offs and limitations</strong> that prevent them from fully addressing the breadth of business requirements. Neither approach provides a comprehensive solution for profiling within the constraints and characteristics of message queue systems, such as their lack of random access and stateless consumption model.</p>
+<table><thead><tr><th>Query Type</th><th>Query Method</th><th>Advantages</th><th>Disadvantages</th></tr></thead><tbody><tr><td>Sampling query</td><td>Randomly query according to time slices.</td><td>High timeliness</td><td>Unable to query the specified data.</td></tr><tr><td>Synchronize additional storage query</td><td>Synchronize the data in the message queue to additional storage and then perform queries.</td><td>Can query specified data</td><td>1. Additional synchronization, storage, [...]
+<p><img decoding="async" loading="lazy" src="https://fluss.apache.org/assets/images/mq_profiling-80b5d670d20dccdfa5bd96aad32f47f5.png" width="904" height="374" class="img_ev3q"></p>
+<h4 class="anchor anchorWithStickyNavbar_LWe7" id="challenges-with-state-visibility-in-flink">Challenges with State Visibility in Flink<a href="https://fluss.apache.org/blog/taobao-practice/#challenges-with-state-visibility-in-flink" class="hash-link" aria-label="Direct link to Challenges with State Visibility in Flink" title="Direct link to Challenges with State Visibility in Flink"></a></h4>
+<p>In e-commerce analytics, identifying the <strong>first and last user interaction channels within the same day</strong> is a critical metric for evaluating both <strong>user acquisition performance</strong> and <strong>channel effectiveness</strong>.
+To ensure accurate computation of this metric, the processing engine must perform <strong>sorting and deduplication</strong>, which inherently requires <strong>materializing all relevant upstream data into Flink State</strong>.</p>
+<p>However, Flink’s managed state is inherently opaque;it functions as a high-performance internal component designed for scalability and fault tolerance, but it does not provide native visibility or introspection tools. This "black-box" nature of state introduces substantial challenges when attempting to <strong>debug</strong>, <strong>verify</strong>, or <strong>modify</strong> streaming jobs, especially in production environments. The lack of transparency significantly complicates tas [...]
+<p>As a result, teams may encounter <strong>increased operational overhead</strong> and <strong>longer development cycles</strong>, particularly when dealing with stateful streaming jobs that require precise control over historical data.</p>
+<p><img decoding="async" loading="lazy" src="https://fluss.apache.org/assets/images/flink_sorting_job-b9edc790b2248e8d51e27ee15777781f.png" width="904" height="398" class="img_ev3q"></p>
+<h3 class="anchor anchorWithStickyNavbar_LWe7" id="operational-challenges-of-large-flink-state-in-stateful-jobs">Operational Challenges of Large Flink State in Stateful Jobs<a href="https://fluss.apache.org/blog/taobao-practice/#operational-challenges-of-large-flink-state-in-stateful-jobs" class="hash-link" aria-label="Direct link to Operational Challenges of Large Flink State in Stateful Jobs" title="Direct link to Operational Challenges of Large Flink State in Stateful Jobs"></a></h3>
+<p>In many Flink jobs, maintaining intermediate result sets in state is essential to support operations such as sorting and joining. When modifying a job, Flink attempts to reuse the previous state by validating the updated execution plan against the existing state schema. If the plan verification succeeds, the job can resume from the latest checkpoint. However, if the verification fails, the system is forced to <strong>reinitialize the entire state from scratch (epoch 0)</strong>, a pro [...]
+<p><img decoding="async" loading="lazy" src="https://fluss.apache.org/assets/images/transaction_attribution_state-d6c2a559f0ec205036782549c3e1434c.png" width="904" height="210" class="img_ev3q"></p>
+<p>In our current scenario, each incoming record triggers updates to both Sort State and Join State. These states have grown significantly in size, with the sort operator's state reaching up to <strong>90 TB</strong> and the join operator's state peaking at <strong>10 TB</strong>. Managing such large-scale state introduces a number of serious challenges:</p>
+<ul>
+<li><strong>High infrastructure costs</strong> due to the volume of state data.</li>
+<li><strong>Increased risk of checkpoint timeouts</strong>, especially under load.</li>
+<li><strong>Degraded job stability</strong>, with failures more likely during recovery or scaling events.</li>
+<li><strong>Slow job restart and recovery times</strong>, making operational troubleshooting difficult.</li>
+<li><strong>Development inefficiency</strong>, as state schema changes often require full state resets.</li>
+</ul>
+<p>This highlights the need for <strong>more efficient state management strategies</strong>, such as state compaction, state TTLs, or alternative storage architectures, to support large-scale, high-throughput streaming workloads with minimal operational burden.</p>
+<p><img decoding="async" loading="lazy" src="https://fluss.apache.org/assets/images/transaction_attribution_flink_job-f9515c01b5423520775b54a66b57deeb.png" width="904" height="392" class="img_ev3q"></p>
+<h2 class="anchor anchorWithStickyNavbar_LWe7" id="apache-fluss-key-advantages">Apache Fluss Key Advantages<a href="https://fluss.apache.org/blog/taobao-practice/#apache-fluss-key-advantages" class="hash-link" aria-label="Direct link to Apache Fluss Key Advantages" title="Direct link to Apache Fluss Key Advantages"></a></h2>
+<h3 class="anchor anchorWithStickyNavbar_LWe7" id="what-is-apache-fluss">What is Apache Fluss?<a href="https://fluss.apache.org/blog/taobao-practice/#what-is-apache-fluss" class="hash-link" aria-label="Direct link to What is Apache Fluss?" title="Direct link to What is Apache Fluss?"></a></h3>
+<blockquote>
+<p>Fluss Official Documentation: <a href="https://fluss.apache.org/" target="_blank" rel="noopener noreferrer">https://fluss.apache.org/</a></p>
+</blockquote>
+<blockquote>
+<p>GitHub: <a href="https://github.com/apache/fluss" target="_blank" rel="noopener noreferrer">https://github.com/apache/fluss</a></p>
+</blockquote>
+<p><img decoding="async" loading="lazy" src="https://fluss.apache.org/assets/images/fulss_arch-9347738f0d221a64c79f1a2c735b1210.png" width="904" height="242" class="img_ev3q"></p>
+<p>Fluss, developed by the Flink team, is the next-generation stream storage for stream analysis, a stream storage built for real-time analysis. Fluss innovatively integrates columnar storage format and real-time update capabilities into stream storage, and is deeply integrated with Flink to help users build a streaming data warehouse with high throughput, low latency, and low cost. It has the following core features:</p>
+<ul>
+<li><strong>Real-time reads and writes:</strong> Supports millisecond-level streaming read and write capabilities.</li>
+<li><strong>Columnar pruning:</strong> Store real-time stream data in columnar format. Column pruning can improve read performance by 10 times and reduce network costs.</li>
+<li><strong>Streaming Update:</strong> Supports real-time streaming updates for large-scale data. Supports partial column updates to achieve low-cost wide table stitching.</li>
+<li><strong>CDC Subscription:</strong> Updates will generate a complete Change Log (CDC), and by consuming CDC through Flink streaming, real-time data flow across the whole-pipeline of the data warehouse can be achieved.</li>
+<li><strong>Real-time Lookup Queries:</strong> Supports high-performance primary key point query and can be used as a dimension table association for real-time processing links.</li>
+<li><strong>Unified Lake and Stream:</strong> Seamlessly integrates Lakehouse and provides a real-time data layer for Lakehouse. This not only brings low-latency data to Lakehouse analytics but also endows stream storage with powerful analytical capabilities.</li>
+</ul>
+<h3 class="anchor anchorWithStickyNavbar_LWe7" id="table-types">Table Types<a href="https://fluss.apache.org/blog/taobao-practice/#table-types" class="hash-link" aria-label="Direct link to Table Types" title="Direct link to Table Types"></a></h3>
+<p><img decoding="async" loading="lazy" src="https://fluss.apache.org/assets/images/fulss_underlying_arch-a7af63a1ea8c1b9d495ba3ae2b4d5100.png" width="904" height="594" class="img_ev3q"></p>
+<p><strong>Type:</strong> Divided into log tables and primary key tables. Log tables are columnar MQs that only support insert operations, while primary key tables can be updated according to the primary key and specified merge engine.</p>
+<p><strong>Partition:</strong> Divides data into smaller, more manageable subsets according to specified columns. Fluss supports more diverse partitioning strategies, such as Dynamic create partitions. For the latest documentation on partitioning, please refer to: <a href="https://fluss.apache.org/docs/table-design/data-distribution/partitioning/" target="_blank" rel="noopener noreferrer">https://fluss.apache.org/docs/table-design/data-distribution/partitioning/</a> . Note that the parti [...]
+<div class="language-SQL language-sql codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#9CDCFE;--prism-background-color:#1E1E1E"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-sql codeBlock_bY9V thin-scrollbar" style="color:#9CDCFE;background-color:#1E1E1E"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#9CDCFE"><span class="token keyword" style="color:rgb(86, 156, 214)">CREATE</span><span class="token plain"> </span [...]
+<p><strong>Bucket:</strong> The smallest unit of read and write operations. For a primary key table, the bucket to which each piece of data belongs is determined based on the hash value of the primary key of each piece of data. For a log table, the configuration of column hashing can be specified in the with parameter when creating the table; otherwise, it will be randomly scattered.</p>
+<h4 class="anchor anchorWithStickyNavbar_LWe7" id="log-table">Log Table<a href="https://fluss.apache.org/blog/taobao-practice/#log-table" class="hash-link" aria-label="Direct link to Log Table" title="Direct link to Log Table"></a></h4>
+<p>The log table is a commonly used table in Fluss, which writes data in the order of writing, only supports insert operations, and does not support update/delete operations, similar to MQ systems such as Kafka and TT. For the log tables, currently most of the data will be uploaded to a remote location, and only a portion of the data will be stored locally. For example, a log table has 128 buckets, only 128 * 2 (number of segments retained locally) * 1 (size of one segment) * 3 (number o [...]
+<div class="language-SQL language-sql codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#9CDCFE;--prism-background-color:#1E1E1E"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-sql codeBlock_bY9V thin-scrollbar" style="color:#9CDCFE;background-color:#1E1E1E"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#9CDCFE"><span class="token keyword" style="color:rgb(86, 156, 214)">CREATE</span><span class="token plain"> </span [...]
+<p>In Fluss, the log table is stored in Apache Arrow columnar format by default. This format stores data column by column rather than row by row, thereby enabling <strong>column pruning</strong>. This ensures that only the required columns are consumed during real-time consumption, thereby reducing IO overhead, improving performance, and reducing resource usage.</p>
+<h4 class="anchor anchorWithStickyNavbar_LWe7" id="primarykey-table">PrimaryKey Table<a href="https://fluss.apache.org/blog/taobao-practice/#primarykey-table" class="hash-link" aria-label="Direct link to PrimaryKey Table" title="Direct link to PrimaryKey Table"></a></h4>
+<p>Compared to the log table, the primary key table supports insert, update, and delete operations, and different merge methods are implemented by specifying the Merge Engine. It should be noted that <code>bucket.key</code> and <code>partitioned.key</code> need to be subsets of <code>primary.key</code>, and if this KV table is used for DeltaJoin, <code>bucket.key</code> needs to be a prefix of <code>primary.key</code>. The table creation statement is as follows:</p>
+<div class="language-SQL language-sql codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#9CDCFE;--prism-background-color:#1E1E1E"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-sql codeBlock_bY9V thin-scrollbar" style="color:#9CDCFE;background-color:#1E1E1E"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#9CDCFE"><span class="token keyword" style="color:rgb(86, 156, 214)">CREATE</span><span class="token plain"> </span [...]
+<p>Among them, merge-engine supports versioned and first_row; after using versioned, it is necessary to limit the ver-column for sorting, currently only supporting types such as INT, BIGINT, and TIMESTAMP, and not supporting STRING; after using first_row, it only supports retaining the first record of each primary key and does not support sorting by column.</p>
+<h3 class="anchor anchorWithStickyNavbar_LWe7" id="core-functions">Core Functions<a href="https://fluss.apache.org/blog/taobao-practice/#core-functions" class="hash-link" aria-label="Direct link to Core Functions" title="Direct link to Core Functions"></a></h3>
+<h4 class="anchor anchorWithStickyNavbar_LWe7" id="tailorable-columnar-storage">Tailorable Columnar Storage<a href="https://fluss.apache.org/blog/taobao-practice/#tailorable-columnar-storage" class="hash-link" aria-label="Direct link to Tailorable Columnar Storage" title="Direct link to Tailorable Columnar Storage"></a></h4>
+<p>Fluss is a column-based streaming storage, with its underlying file storage adopting the Apache Arrow IPC streaming format. This enables Fluss to achieve efficient column pruning while maintaining millisecond-level streaming read and write capabilities.</p>
+<p>A key advantage of Fluss is that column pruning is performed at the server level, and <strong>only the necessary columns are transferred to the Client</strong>. This architecture not only improves performance but also reduces network costs and resource consumption.</p>
+<p><img decoding="async" loading="lazy" src="https://fluss.apache.org/assets/images/comparison_of_row_and_column_storage_consumption-f4d5fcfb658e670c290ab2be2e504718.png" width="904" height="238" class="img_ev3q"></p>
+<h4 class="anchor anchorWithStickyNavbar_LWe7" id="fluss-key-value-storage-architecture-and-benefits">Fluss Key-Value Storage Architecture and Benefits<a href="https://fluss.apache.org/blog/taobao-practice/#fluss-key-value-storage-architecture-and-benefits" class="hash-link" aria-label="Direct link to Fluss Key-Value Storage Architecture and Benefits" title="Direct link to Fluss Key-Value Storage Architecture and Benefits"></a></h4>
+<p>Fluss’s <strong>Key-Value (KV) storage engine</strong> is built atop a high-performance <strong>log-structured table</strong>, where a KV index is constructed directly over the log stream. This index leverages an <strong>LSM-tree (Log-Structured Merge Tree)</strong> design, enabling high-throughput real-time updates and partial record modifications—making it particularly well-suited for building and maintaining wide tables at scale.</p>
+<p>One of the standout advantages of this architecture is that the <strong>changelog</strong> produced by the KV store is <strong>natively consumable by Apache Flink</strong>. Unlike traditional message queues or log-based systems that require expensive post-processing and deduplication, Fluss’s integration avoids these overheads entirely. This results in <strong>significant reductions in compute cost</strong>, <strong>latency</strong>, and <strong>complexity</strong> across the data pip [...]
+<p>Fluss’s built-in KV index supports <strong>low-latency primary key lookups</strong>, making it ideal for operational queries, streaming joins, and dimension table enrichment. Beyond real-time ingestion and processing, Fluss also supports <strong>ad-hoc data exploration</strong>, with efficient execution of queries involving operations like <code>LIMIT</code> and <code>COUNT</code>. This allows users to <strong>debug</strong> and <strong>inspect live data</strong> within Fluss quickly [...]
+<p><img decoding="async" loading="lazy" src="https://fluss.apache.org/assets/images/fluss_kv_store_point_query-c1e70c05f23eeded2188aaa233d74efa.png" width="904" height="376" class="img_ev3q"></p>
+<h4 class="anchor anchorWithStickyNavbar_LWe7" id="dual-stream-join--delta-join">Dual-Stream Join → Delta Join<a href="https://fluss.apache.org/blog/taobao-practice/#dual-stream-join--delta-join" class="hash-link" aria-label="Direct link to Dual-Stream Join → Delta Join" title="Direct link to Dual-Stream Join → Delta Join"></a></h4>
+<p>In Flink, Dual-Stream Join is a very fundamental function, often used to build wide tables. However, it is also a function that often gives developers headaches. This is because Dual-Stream Join needs to maintain the full amount of upstream data in State, which results in its state usually being very large. This brings about many problems, including high costs, unstable jobs, checkpoint timeouts, slow restart recovery, and so on.</p>
+<p>Fluss has developed a brand-new Flink join operator implementation called Delta Join, which fully leverages Fluss's streaming read and Prefix Lookup capabilities. Delta Join can be simply understood as "<strong>dual-sided driven dimension table join</strong>". When data arrives on the left side, it performs a point query on the right table based on the Join Key; when data arrives on the right side, it performs a point query on the left table based on the Join Key. Throughout the proce [...]
+<p><img decoding="async" loading="lazy" src="https://fluss.apache.org/assets/images/dual_stream_join2delta_join-5082dd8b7403c88c6e19e6cbeefca6ee.png" width="904" height="152" class="img_ev3q"></p>
+<h4 class="anchor anchorWithStickyNavbar_LWe7" id="lake-stream-integration">Lake-Stream Integration<a href="https://fluss.apache.org/blog/taobao-practice/#lake-stream-integration" class="hash-link" aria-label="Direct link to Lake-Stream Integration" title="Direct link to Lake-Stream Integration"></a></h4>
+<p>In the Kappa architecture, due to differences in production pipelines, data is stored separately in streams and lakes, resulting in cost waste. At the same time, additional data services need to be defined to unify data consumption. The goal of lake-stream integration is to enable <strong>Lakehouse data</strong>" and <strong>streaming data</strong> to be stored, managed, and consumed as a unified whole, thereby avoiding data redundancy and metadata inconsistency issues.</p>
+<p><img decoding="async" loading="lazy" src="https://fluss.apache.org/assets/images/lake_stream_integration-8ba3bec3161e76abfcdf7c82f2392bc1.png" width="904" height="386" class="img_ev3q"></p>
+<p>Fluss introduces <strong>Union Reads</strong> to fully support the unified data access layer required by <strong>Kappa architecture</strong> principles. This functionality enables seamless access to both real-time streaming data and historical batch data through a consistent abstraction, ensuring a <strong>fully managed, end-to-end unified data service</strong>.</p>
+<p>To maintain alignment between streaming and lakehouse storage, Fluss operates a <strong>built-in Tiering Service</strong>. This service automatically transforms raw Fluss data into a lake-friendly format (e.g., columnar files), while <strong>preserving metadata consistency between stream and lake</strong>. This tight integration eliminates the need for external tooling to reconcile stream processing with downstream analytics systems.</p>
+<p>Fluss also introduces <strong>partition and bucket alignment mechanisms</strong>, which ensure that data layout remains consistent across streaming and lakehouse layers. These alignment strategies allow for <strong>direct conversion of Arrow files to Parquet</strong> without <strong>triggering network shuffling or repartitioning</strong>, significantly reducing I/O overhead and improving performance across the data pipeline.</p>
+<p>Together, these capabilities enable Fluss to function as a <strong>next-generation streaming storage layer</strong>, bridging the gap between low-latency stream processing and scalable lakehouse analytics—while optimizing cost, consistency, and operational simplicity.</p>
+<h2 class="anchor anchorWithStickyNavbar_LWe7" id="architecture-evolution-and-capability-implementation">Architecture Evolution and Capability Implementation<a href="https://fluss.apache.org/blog/taobao-practice/#architecture-evolution-and-capability-implementation" class="hash-link" aria-label="Direct link to Architecture Evolution and Capability Implementation" title="Direct link to Architecture Evolution and Capability Implementation"></a></h2>
+<h3 class="anchor anchorWithStickyNavbar_LWe7" id="architecture-evolution">Architecture Evolution<a href="https://fluss.apache.org/blog/taobao-practice/#architecture-evolution" class="hash-link" aria-label="Direct link to Architecture Evolution" title="Direct link to Architecture Evolution"></a></h3>
+<p>Fluss innovatively integrates columnar storage format and real-time update capabilities into stream storage and deeply integrates with Flink. Based on Fluss's core capabilities, we further enhance the real-time architecture, building a high-throughput, low-latency, and low-cost lakehouse through Fluss.</p>
+<p>The following takes the typical upgrade scenario of the Taobao as an example to introduce the implementation practice of Fluss.</p>
+<h4 class="anchor anchorWithStickyNavbar_LWe7" id="evolution-of-regular-jobs">Evolution of Regular Jobs<a href="https://fluss.apache.org/blog/taobao-practice/#evolution-of-regular-jobs" class="hash-link" aria-label="Direct link to Evolution of Regular Jobs" title="Direct link to Evolution of Regular Jobs"></a></h4>
+<p><img decoding="async" loading="lazy" src="https://fluss.apache.org/assets/images/regular_jobs_evolution-03d7f2ae3f29d7190bf343b71e1f995d.png" width="904" height="136" class="img_ev3q"></p>
+<p>The above is the architecture before and after the job upgrade. For routine jobs such as <code>Source -> ETL cleaning -> Sink</code>, since the message queue is row-based storage, when consuming, Flink first loads the entire row of data into memory and then filters the required columns, resulting in a significant waste of Source IO.</p>
+<p>After upgrading to Fluss, due to the columnar storage at the bottom of Fluss, column pruning in Fluss is performed at the server level, which means that the <strong>data sent to the client has already been pruned</strong>, thus saving a large amount of network costs.</p>
+<h4 class="anchor anchorWithStickyNavbar_LWe7" id="evolution-of-sorting-jobs">Evolution of Sorting Jobs<a href="https://fluss.apache.org/blog/taobao-practice/#evolution-of-sorting-jobs" class="hash-link" aria-label="Direct link to Evolution of Sorting Jobs" title="Direct link to Evolution of Sorting Jobs"></a></h4>
+<p><img decoding="async" loading="lazy" src="https://fluss.apache.org/assets/images/sorting_jobs_evolution-840cd946cecc1efed58ce5a0f7ab8dfa.png" width="904" height="246" class="img_ev3q"></p>
+<p>In Flink, the implementation of sorting relies on Flink explicitly computing and using State to store the intermediate state of data. This model incurs significant business overhead and extremely low business reusability. The introduction of Fluss pushes this computation and storage down to the Sink side, and in conjunction with the Fluss Merge Engine, implements different deduplication methods for KV tables. Currently, it supports <strong>FirstRow Merge Engine</strong> (the first row [...]
+<h4 class="anchor anchorWithStickyNavbar_LWe7" id="evolution-of-dual-stream-join-jobs">Evolution of Dual-Stream Join Jobs<a href="https://fluss.apache.org/blog/taobao-practice/#evolution-of-dual-stream-join-jobs" class="hash-link" aria-label="Direct link to Evolution of Dual-Stream Join Jobs" title="Direct link to Evolution of Dual-Stream Join Jobs"></a></h4>
+<p><img decoding="async" loading="lazy" src="https://fluss.apache.org/assets/images/dual_stream_jobs_evolution-1cbe65429b071d1f1bb6b2497f491599.png" width="904" height="558" class="img_ev3q"></p>
+<p>After the Fluss remodeling, the Dual-Stream Join of the Taobao transaction attributed job has been enhanced with the following upgrade points:</p>
+<ul>
+<li><strong>Column pruning</strong> is truly pre-positioned to Source consumption, avoiding IO consumption of useless columns.</li>
+<li><strong>Introduce Fluss KV table & Merge Engines</strong> to implement data sorting and eliminate the dependency on Flink sorting State.</li>
+<li><strong>Refactor the Dual-Stream Join into FlussDeltaJoin</strong>, using stream reading and index point query, and externalize the Flink Dual-Stream JoinState.</li>
+</ul>
+<p>A comprehensive comparison between traditional Dual-Stream Join and the new Fluss-based architecture reveals the following advantages and disadvantages of the two:</p>
+<table><thead><tr><th>Job Type</th><th>Advantages</th><th>Disadvantages</th></tr></thead><tbody><tr><td>Traditional MQ & Dual-Stream Join</td><td>One job can implement the Join business logic.</td><td>1. Data is consumed row by row, resulting in wasted IO resources for useless columns.2. The Join State of the dual-stream is too large, making job maintenance difficult.3. State Black box, difficult to probe internal state. 4. If the resource plan does not match after modifying the job, [...]
+<h4 class="anchor anchorWithStickyNavbar_LWe7" id="evolution-of-lake-jobs">Evolution of Lake Jobs<a href="https://fluss.apache.org/blog/taobao-practice/#evolution-of-lake-jobs" class="hash-link" aria-label="Direct link to Evolution of Lake Jobs" title="Direct link to Evolution of Lake Jobs"></a></h4>
+<p><img decoding="async" loading="lazy" src="https://fluss.apache.org/assets/images/lake_jobs_evolution-4c8a2cfd7386d4b16ba1b474fa554b3b.png" width="904" height="470" class="img_ev3q"></p>
+<p>Under the Fluss lake-stream integrated architecture, Fluss provides a <strong>fully managed</strong> unified data service. Fluss and Paimon store stream and lake data respectively, output a Catalog to the computing engine (such as Flink), and the data is output externally in the form of a unified table. Consumers can directly access the data in Fluss and lake storage in the form of Union Read.</p>
+<h3 class="anchor anchorWithStickyNavbar_LWe7" id="implementation-of-core-competencies">Implementation of Core Competencies<a href="https://fluss.apache.org/blog/taobao-practice/#implementation-of-core-competencies" class="hash-link" aria-label="Direct link to Implementation of Core Competencies" title="Direct link to Implementation of Core Competencies"></a></h3>
+<h4 class="anchor anchorWithStickyNavbar_LWe7" id="column-pruning-capability">Column Pruning Capability<a href="https://fluss.apache.org/blog/taobao-practice/#column-pruning-capability" class="hash-link" aria-label="Direct link to Column Pruning Capability" title="Direct link to Column Pruning Capability"></a></h4>
+<p>In the job of consuming message queues, consumers typically only consume a portion of the data, but Flink jobs still need to read data from all columns, resulting in significant waste in Flink Source IO. Fundamentally, existing message queues are all row-based storage, and for scenarios that need to process large-scale data, the efficiency of row-based storage format appears insufficient. The underlying storage needs to have powerful Data Skipping capabilities and support features suc [...]
+<p><img decoding="async" loading="lazy" src="https://fluss.apache.org/assets/images/fluss_column_pruning_evolution-d062e069bcd12155c2dd8bdf8c7c226d.png" width="904" height="302" class="img_ev3q"></p>
+<p>In our real-time data warehouse, 70% of jobs only consume partial columns of Source. Taking the Taobao recommendation clicks job as an example, out of the 43 fields in Source, we only need 13. Additional operator resources are required to trim the entire row of data, wasting more than 20% of IO resources. After using Fluss, it directly consumes the required columns, avoiding additional IO waste and reducing the additional resources brought by Flink column pruning operators. To date, m [...]
+<p><img decoding="async" loading="lazy" src="https://fluss.apache.org/assets/images/comparison_of_fluss_and_mq_column_pruning-9b1ea19ec04baad6b5790dfba8fd5ae6.png" width="904" height="334" class="img_ev3q"></p>
+<h4 class="anchor anchorWithStickyNavbar_LWe7" id="real-time-data-profiling">Real-time Data Profiling<a href="https://fluss.apache.org/blog/taobao-practice/#real-time-data-profiling" class="hash-link" aria-label="Direct link to Real-time Data Profiling" title="Direct link to Real-time Data Profiling"></a></h4>
+<p><strong>Lookup Queries</strong></p>
+<p>Whether troubleshooting issues or conducting data exploration, data queries are necessary. However, the message queue only supports sampling queries in the interface and queries of synchronized data in additional storage. In sampling queries, it is not possible to query specified data; only a batch of output can be retrieved for display and inspection. Using the method of synchronizing additional storage, on the other hand, incurs minute-level latency as well as additional storage and [...]
+<p><img decoding="async" loading="lazy" src="https://fluss.apache.org/assets/images/comparison_of_fulss_and_mq_data_profiling-6edbee5cf60680f5a15c8dac1ccb1db5.png" width="904" height="536" class="img_ev3q"></p>
+<p>In Fluss KV Table, a KV index is built, so it can support high-performance primary key point queries, directly probe Fluss data through point query statements, and also support query functions such as LIMIT and COUNT to meet daily Data Profiling requirements. An example is as follows:</p>
+<p><img decoding="async" loading="lazy" src="https://fluss.apache.org/assets/images/fluss_query_example1-7f2a861db777f647bfe3ad322307452d.png" width="904" height="204" class="img_ev3q"></p>
+<p><strong>Flink State Query</strong></p>
+<p>Flink's State mechanism (such as KeyedState or OperatorState) provides efficient state management capabilities, but its internal implementation is a "Black box" to developers. Developers cannot directly query, analyze, or debug the data in State, resulting in a strong coupling between business logic and state management, making it difficult to dynamically adjust or expand. When data anomalies occur, developers can only infer the content in State from the result data, unable to directl [...]
+<p><img decoding="async" loading="lazy" src="https://fluss.apache.org/assets/images/flink_state_evolution-2fc62883cca1013c9dfe5d774a085a5a.png" width="904" height="270" class="img_ev3q"></p>
+<p>We externalize Flink State into Fluss, such as states for duak-stream join, data deduplication, etc. Based on Fluss's KV index, we provide State exploration capabilities, white-box the internal data of State, and efficiently locate issues.</p>
+<p><img decoding="async" loading="lazy" src="https://fluss.apache.org/assets/images/fluss_query_example2-2e75b06cea33441f0183914d6a049103.png" width="904" height="270" class="img_ev3q"></p>
+<h4 class="anchor anchorWithStickyNavbar_LWe7" id="merge-engine--delta-join">Merge Engine & Delta Join<a href="https://fluss.apache.org/blog/taobao-practice/#merge-engine--delta-join" class="hash-link" aria-label="Direct link to Merge Engine & Delta Join" title="Direct link to Merge Engine & Delta Join"></a></h4>
+<p>In the current real-time data warehouse, the transaction attribution task is a job that heavily relies on State, with State <strong>reaching up to 100TB</strong> , which includes operations such as sorting and Dual-Stream Join. After consuming TT data, we first perform data sorting and then conduct a Dual-Stream Join to attribute order data.</p>
+<p><img decoding="async" loading="lazy" src="https://fluss.apache.org/assets/images/transaction_attribution_state_size-c2ef4c0431192100599996d24ff10627.png" width="904" height="178" class="img_ev3q"></p>
+<p>As shown in the figure, in the first attribution logic implementation of the attribution job, the State of the sorting operator is as high as <strong>90TB</strong> , and that of the Dual-Stream Join operator is <strong>10TB</strong> . Large State jobs bring many problems, including high costs, job instability, long CP time, etc.</p>
+<p><strong>Sorting optimization, Merge Engine</strong></p>
+<p><img decoding="async" loading="lazy" src="https://fluss.apache.org/assets/images/fluss_sort_tunning-da4fccacf7bce9e94414c36eebd66e86.png" width="904" height="362" class="img_ev3q"></p>
+<p>In the implementation of the Merge Engine, it mainly relies on Fluss's KV table. The Changelog generated by KV can be read by Flink streams without additional deduplication operations, saving Flink's computing resources and achieving business reuse of data. Through Fluss's KV table, the sorting logic in our jobs is implemented, and there is no longer a need to maintain the state of the sorting operator in the jobs.</p>
+<p><strong>Join Optimization, Dual Sides Driving</strong></p>
+<p><img decoding="async" loading="lazy" src="https://fluss.apache.org/assets/images/comparison_of_dual_stream_join_and_delta_join-08049759413e940eb71f99d45449f52f.png" width="904" height="390" class="img_ev3q"></p>
+<p>The jobs of Delta Join are as described above. The original job, after consuming data, sorts it according to business requirements, performs Dual-Stream Join after sorting, and saves the state for 24 hours. This results in issues such as long CP time, poor job maintainability, and the need to rerun when modifying the job state. In Fluss, data sorting is completed through the Merge Engine of the KV table, and through Delta Join, the job and state are decoupled, eliminating the need to [...]
+<p>We use the transaction attribution job as an example. It should be noted that both sides of DeltaJoin need to be KV tables.</p>
+<div class="language-SQL language-sql codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#9CDCFE;--prism-background-color:#1E1E1E"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-sql codeBlock_bY9V thin-scrollbar" style="color:#9CDCFE;background-color:#1E1E1E"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#9CDCFE"><span class="token comment" style="color:rgb(106, 153, 85)">-- Create left table</span><span class="token [...]
+<p>Some operations are shown in the above code. After migrating from the Dual-Stream Join to Merge Engine & Delta Join, large states were successfully reduced, making the job run more stably and eliminating CP timeouts. Meanwhile, the actual usage of CPU and Memory also decreased.</p>
+<p>In addition to resource reduction and performance improvement, there is also an enhancement in flexibility for our benefits. The state of traditional stream-to-stream connections is tightly coupled with Flink jobs, like an opaque "black box". When the job is modified, it is found that the historical resource plan is incompatible with the current job, and the State can only be rerun from scratch, which is time-consuming and labor-intensive. After using Delta Join, it is equivalent to d [...]
+<p><img decoding="async" loading="lazy" src="https://fluss.apache.org/assets/images/fluss_historical_data_consumption-c36e04f8f69fcfd14eb3370abebf3e96.png" width="904" height="298" class="img_ev3q"></p>
+<p>Meanwhile, Fluss maintains a Tiering Service to synchronize Fluss data to Paimon, with the latest data stored in Fluss and historical data in Paimon. Flink can support Union Read, which combines the data in Fluss and Paimon to achieve second-level freshness analysis.</p>
+<p><img decoding="async" loading="lazy" src="https://fluss.apache.org/assets/images/join_jobs_evolution-db92bbdb4894edfcdb28009b081b687a.png" width="904" height="394" class="img_ev3q"></p>
+<p>In addition, Data Join also addresses the scenario of backtracking data. In the case of Dual-Stream Join, if a job modification causes the Operating Plan verification to fail, only data backfilling can be performed. During the Fluss backtracking process, the Paimon table archived by the unified lake-stream architecture combined with Flink Batch Join can be used to accelerate data backfilling.</p>
+<h4 class="anchor anchorWithStickyNavbar_LWe7" id="lake-stream-evolution">Lake-Stream Evolution<a href="https://fluss.apache.org/blog/taobao-practice/#lake-stream-evolution" class="hash-link" aria-label="Direct link to Lake-Stream Evolution" title="Direct link to Lake-Stream Evolution"></a></h4>
+<p>Fluss provides high compatibility with Data lake warehouses. Through the underlying service, it automatically converts Fluss data into Paimon format data, enabling real-time data to be ingested into the lake with a single click, while ensuring consistent data partitioning and bucketing on both the lake and stream sides.</p>
+<p><img decoding="async" loading="lazy" src="https://fluss.apache.org/assets/images/lake_stream_evolution-1828502586ada6555bb15cd4719ccf5f.png" width="904" height="294" class="img_ev3q"></p>
+<p>After having <strong>lake</strong> and <strong>stream</strong> two levels of data, Fluss has the key characteristic of sharing data. Paimon stores long-period, minute-level latency data; Fluss stores short-period, millisecond-level latency data, and the data of both can be shared with each other.</p>
+<p>When performing Fluss stream reads, Paimon can provide efficient backtracking capabilities as historical data. After backtracking to the current checkpoint, the system will automatically switch to stream storage to continue reading and ensure that no duplicate data is read. In batch query analysis, Fluss stream storage can supplement Paimon with real-time data, thereby enabling analysis with second-level freshness. This feature is called Union Read.</p>
+<h2 class="anchor anchorWithStickyNavbar_LWe7" id="benefits-and-summary">Benefits and Summary<a href="https://fluss.apache.org/blog/taobao-practice/#benefits-and-summary" class="hash-link" aria-label="Direct link to Benefits and Summary" title="Direct link to Benefits and Summary"></a></h2>
+<p>After a period of in-depth research, comprehensive testing, and smooth launch of Fluss, we successfully completed the evolution of the technical architecture based on Fluss as a solution. Among them, we conducted comprehensive tests on core capabilities such as Fluss column pruning and Delta Join to ensure the stability and performance of the solution met the standards.</p>
+<h3 class="anchor anchorWithStickyNavbar_LWe7" id="performance-test">Performance Test<a href="https://fluss.apache.org/blog/taobao-practice/#performance-test" class="hash-link" aria-label="Direct link to Performance Test" title="Direct link to Performance Test"></a></h3>
+<h4 class="anchor anchorWithStickyNavbar_LWe7" id="read-and-write-performance">Read and Write Performance<a href="https://fluss.apache.org/blog/taobao-practice/#read-and-write-performance" class="hash-link" aria-label="Direct link to Read and Write Performance" title="Direct link to Read and Write Performance"></a></h4>
+<p>We tested the read-write and column pruning capabilities of Fluss. Among them, in terms of read-write performance, we conducted tests with the same traffic. While maintaining the input <strong>RPS at 800 w/s</strong> and the output <strong>RPS at 44 w/s</strong> , we compared the actual CPU and Memory usage of Flink jobs. The details are as follows:</p>
+<p><img decoding="async" loading="lazy" src="https://fluss.apache.org/assets/images/performance_write-27292f1029f6a85e421735a04a2b4a75.png" width="698" height="402" class="img_ev3q"></p>
+<p><img decoding="async" loading="lazy" src="https://fluss.apache.org/assets/images/performance_read-f565578d7f2a84163de5e0663147c105.png" width="698" height="402" class="img_ev3q"></p>
+<h4 class="anchor anchorWithStickyNavbar_LWe7" id="column-pruning-performance">Column Pruning Performance<a href="https://fluss.apache.org/blog/taobao-practice/#column-pruning-performance" class="hash-link" aria-label="Direct link to Column Pruning Performance" title="Direct link to Column Pruning Performance"></a></h4>
+<p>Regarding column pruning capabilities, we also tested TT, Fluss, and different numbers of columns in Fluss to explore the consumption of CPU, Memory, and IO. With the input <strong>RPS maintained at 25 w/s</strong>, the specific test results are as follows:</p>
+<p><img decoding="async" loading="lazy" src="https://fluss.apache.org/assets/images/performance_column_pruning2-9187374565daf3d3a14757c8444a7371.png" width="698" height="402" class="img_ev3q"></p>
+<p><img decoding="async" loading="lazy" src="https://fluss.apache.org/assets/images/performance_column_pruning1-e4c22dae4b6104713ce26f5a370b36a8.png" width="698" height="402" class="img_ev3q"></p>
+<p>At this point, we will find a problem: as the number of columns decreases (a total of 13 columns out of 43 columns are consumed), IO does not show a linear decrease. After verification, the storage of each column in the source is not evenly distributed, and the storage of some required columns <strong>accounts for 72%</strong> . It can be seen that the input IO traffic <strong>decreases by 20%</strong> , which is consistent with the expected proportion of the storage of the read columns.</p>
+<h4 class="anchor anchorWithStickyNavbar_LWe7" id="delta-join-performance">Delta Join Performance<a href="https://fluss.apache.org/blog/taobao-practice/#delta-join-performance" class="hash-link" aria-label="Direct link to Delta Join Performance" title="Direct link to Delta Join Performance"></a></h4>
+<p>We also tested and compared the resources and performance of the above <strong>Dual-Stream Join and Fluss Delta Join</strong> , and under the condition of maintaining the <strong>input RPS of the left table at 68,000/s</strong> and the <strong>input RPS of the right table at 1,700/s</strong> , all jobs ran for 24 hours.</p>
+<p><img decoding="async" loading="lazy" src="https://fluss.apache.org/assets/images/performance_delta1-76e0c23013cbefdb8bf9f76980497d38.png" width="904" height="246" class="img_ev3q"></p>
+<p><img decoding="async" loading="lazy" src="https://fluss.apache.org/assets/images/performance_delta2-db0bb3f31808d421f8e516221d44c29d.png" width="904" height="246" class="img_ev3q"></p>
+<p>After actual testing, after migrating from the Dual-Stream Join to Merge Engine + Delta Join, it successfully <strong>reduced 95TB</strong> of large state, making the job run more stably and significantly shortening the CP time. Meanwhile, the actual usage of CPU and Memory also <strong>decreased by more than 80%</strong> .</p>
+<h4 class="anchor anchorWithStickyNavbar_LWe7" id="data-backfilling-performance">Data Backfilling Performance<a href="https://fluss.apache.org/blog/taobao-practice/#data-backfilling-performance" class="hash-link" aria-label="Direct link to Data Backfilling Performance" title="Direct link to Data Backfilling Performance"></a></h4>
+<p>Since Delta Join <strong>does not need to maintain state</strong> , it can use batch mode <strong>Batch Join</strong> to catch up. After catching up, it switches back to stream mode Delta Join. During this process, a small amount of data will be reprocessed, and the end-to-end consistency is ensured through the idempotence update mechanism of the result table. We <strong>performed a test comparison on the data catch-up of the above</strong> Dual-Stream Join and Batch Join <strong>for [...]
+<p><img decoding="async" loading="lazy" src="https://fluss.apache.org/assets/images/performance_data_backtracking1-25192a04f93b0cc734d0dae30744a7fc.png" width="698" height="402" class="img_ev3q"></p>
+<p><img decoding="async" loading="lazy" src="https://fluss.apache.org/assets/images/performance_data_backtracking2-74113a436a7f89f34f7405490b5bffc9.png" width="698" height="402" class="img_ev3q"></p>
+<p>After actual testing, the batch mode Batch Join backtracking for one day (24H) takes <strong>70%+ less time</strong> compared to the Dual-Stream Join backtracking.</p>
+<h3 class="anchor anchorWithStickyNavbar_LWe7" id="summary">Summary<a href="https://fluss.apache.org/blog/taobao-practice/#summary" class="hash-link" aria-label="Direct link to Summary" title="Direct link to Summary"></a></h3>
+<p>Fluss has core features such as columnar pruning, streaming updates, real-time point queries, and lake-stream integration. At the same time, it innovatively integrates columnar storage format and real-time update capabilities into stream storage, and deeply integrates with Flink and Paimon to build a lake warehouse with high throughput, low latency, and low cost. Just as the original intention of Fluss: <strong>Real-time stream storage for analytics.</strong></p>
+<p>After nearly three months of exploration, Fluss has been implemented in <strong>Taobao's core search and recommendation scenarios</strong> , built a unified lake-stream A/B data warehouse, and continuously served internal business through Taobao's A/B Experiment Platform. In practical applications, the following results have been achieved:</p>
+<ul>
+<li>
+<p><strong>Scenarios are widely implemented:</strong> covering core Taobao business such as search and recommendation, and successfully passing the test of Taobao's 618 Grand Promotion <strong>,</strong> with peak traffic reaching tens of millions and average latency <strong>within 1 second</strong> .</p>
+</li>
+<li>
+<p><strong>Column Pruning Resource Optimization</strong> : The column pruning feature has been implemented in all Fluss real-time jobs. When the consumption of columnar storage accounts for 75% of the source data, the average IO <strong>is reduced by 25%</strong> , and the average job resource consumption <strong>is reduced by 30%</strong> .</p>
+</li>
+<li>
+<p><strong>Big State job optimization:</strong> Taking transaction attribution job as an example, the Delta Join & Merge Engine is applied to reconstruct the first and last attribution. State is externally implemented, and the actual usage of CPU and Memory is <strong>reduced by 80% +</strong> . The state of Flink is <strong>decoupled</strong> from the job, and the <strong>100TB +</strong> big state is successfully reduced, making the job more stable.</p>
+</li>
+<li>
+<p><strong>Data Profiling:</strong> Implemented capabilities including message queue profiling and State profiling, supports query operators such as LIMIT and COUNT, achieved white-boxing of State for sorting and Dual-Stream Join, with higher flexibility and more efficient problem location.</p>
+</li>
+</ul>
+<h2 class="anchor anchorWithStickyNavbar_LWe7" id="planning">Planning<a href="https://fluss.apache.org/blog/taobao-practice/#planning" class="hash-link" aria-label="Direct link to Planning" title="Direct link to Planning"></a></h2>
+<p><img decoding="async" loading="lazy" src="https://fluss.apache.org/assets/images/future_plans-1828502586ada6555bb15cd4719ccf5f.png" width="904" height="294" class="img_ev3q"></p>
+<p>In the upcoming work, we will develop a new generation of lakehouse data architecture and continue to explore in Data & AI scenarios.</p>
+<ul>
+<li>
+<p><strong>Scenario Inclusiveness:</strong> In the second-level data warehouse, switch the whole-pipeline and all scenarios of the consumption message queue to the Fluss pipeline. Based on the Fluss lake-stream capabilities, provide corresponding Paimon minute-level data.</p>
+</li>
+<li>
+<p><strong>AI Empowerment:</strong> Attempt to implement scenarios of MultiModal Machine Learning data pipelines, Agents, and model pre-training, and add AI-enhanced analytics.</p>
+</li>
+<li>
+<p><strong>Capability Exploration:</strong> Explore more Fluss capabilities and empower business operations, optimizing more jobs through Fluss Aggregate Merge Engine and Partial Update capabilities.</p>
+</li>
+</ul>
+<h2 class="anchor anchorWithStickyNavbar_LWe7" id="references">References<a href="https://fluss.apache.org/blog/taobao-practice/#references" class="hash-link" aria-label="Direct link to References" title="Direct link to References"></a></h2>
+<p>[1] <a href="https://fluss.apache.org/" target="_blank" rel="noopener noreferrer">Fluss Official Documentation</a></p>
+<p>[2] <a href="https://mp.weixin.qq.com/s?__biz=MzU3Mzg4OTMyNQ==&mid=2247512207&idx=1&sn=e25320a020d7b20e25be8fd614e9f46b&chksm=fd383ecdca4fb7dbf9a37e9c3840699ba8b1b2c57868db028f995c3bc7bcf6a0340e396d87c4&scene=178&cur_album_id=3764887437743669257&search_click_id=#rd" target="_blank" rel="noopener noreferrer">Fluss: Next-Generation Stream Storage Designed for Real-Time Analysis</a></p>]]></content>
+ <author>
+ <name>Xinyu Zhang</name>
+ </author>
+ <author>
+ <name>Lilei Wang</name>
+ </author>
+ </entry>
<entry>
<title type="html"><![CDATA[From Stream to Lake: Hands-On with Fluss Tiering into Paimon on Minio]]></title>
<id>https://fluss.apache.org/blog/hands-on-fluss-lakehouse/</id>
diff --git a/blog/authors/index.html b/blog/authors/index.html
index a80d1b3f..d35ccb38 100644
--- a/blog/authors/index.html
+++ b/blog/authors/index.html
@@ -15,14 +15,14 @@
<link rel="icon" href="/img/logo.svg">
<link rel="manifest" href="/manifest.json">
<meta name="theme-color" content="#0071e3"><link rel="stylesheet" href="/assets/css/styles.53ed9f81.css">
-<script src="/assets/js/runtime~main.87feb3cc.js" defer="defer"></script>
-<script src="/assets/js/main.d75df03d.js" defer="defer"></script>
+<script src="/assets/js/runtime~main.93b61691.js" defer="defer"></script>
+<script src="/assets/js/main.9636bb89.js" defer="defer"></script>
</head>
<body class="navigation-with-keyboard">
<svg xmlns="http://www.w3.org/2000/svg" style="display: none;"><defs>
<symbol id="theme-svg-external-link" viewBox="0 0 24 24"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"/></symbol>
</defs></svg>
-<script>!function(){var t="light";var e=function(){try{return new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}}()||function(){try{return window.localStorage.getItem("theme")}catch(t){}}();document.documentElement.setAttribute("data-theme",e||t),document.documentElement.setAttribute("data-theme-choice",e||t)}(),function(){try{const c=new URLSearchParams(window.location.search).entries();for(var[t,e]of c)if(t.startsWith("docusaurus-data-")){var a=t.replace("do [...]
+<script>!function(){var t="light";var e=function(){try{return new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}}()||function(){try{return window.localStorage.getItem("theme")}catch(t){}}();document.documentElement.setAttribute("data-theme",e||t),document.documentElement.setAttribute("data-theme-choice",e||t)}(),function(){try{const c=new URLSearchParams(window.location.search).entries();for(var[t,e]of c)if(t.startsWith("docusaurus-data-")){var a=t.replace("do [...]
<p>Copyright © 2025 The Apache Software Foundation, Licensed under the Apache License, Version 2.0.</p>
<p>Apache, the names of Apache projects, and the feather logo are either registered trademarks or trademarks of the Apache Software Foundation in the United States and/or other countries. All other marks mentioned may be trademarks or registered trademarks of their respective owners.</p></div></div></div></footer></div>
</body>
diff --git a/blog/fluss-intro/index.html b/blog/fluss-intro/index.html
index e2b69658..a27769fd 100644
--- a/blog/fluss-intro/index.html
+++ b/blog/fluss-intro/index.html
@@ -15,14 +15,14 @@
<link rel="icon" href="/img/logo.svg">
<link rel="manifest" href="/manifest.json">
<meta name="theme-color" content="#0071e3"><link rel="stylesheet" href="/assets/css/styles.53ed9f81.css">
-<script src="/assets/js/runtime~main.87feb3cc.js" defer="defer"></script>
-<script src="/assets/js/main.d75df03d.js" defer="defer"></script>
+<script src="/assets/js/runtime~main.93b61691.js" defer="defer"></script>
+<script src="/assets/js/main.9636bb89.js" defer="defer"></script>
</head>
<body class="navigation-with-keyboard">
<svg xmlns="http://www.w3.org/2000/svg" style="display: none;"><defs>
<symbol id="theme-svg-external-link" viewBox="0 0 24 24"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"/></symbol>
</defs></svg>
-<script>!function(){var t="light";var e=function(){try{return new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}}()||function(){try{return window.localStorage.getItem("theme")}catch(t){}}();document.documentElement.setAttribute("data-theme",e||t),document.documentElement.setAttribute("data-theme-choice",e||t)}(),function(){try{const c=new URLSearchParams(window.location.search).entries();for(var[t,e]of c)if(t.startsWith("docusaurus-data-")){var a=t.replace("do [...]
+<script>!function(){var t="light";var e=function(){try{return new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}}()||function(){try{return window.localStorage.getItem("theme")}catch(t){}}();document.documentElement.setAttribute("data-theme",e||t),document.documentElement.setAttribute("data-theme-choice",e||t)}(),function(){try{const c=new URLSearchParams(window.location.search).entries();for(var[t,e]of c)if(t.startsWith("docusaurus-data-")){var a=t.replace("do [...]
Today, we are excited to introduce Fluss, a cutting-edge streaming storage system designed to power real-time analytics.
We are going to explore Fluss's architecture, design principles, key features, and how it addresses the challenges of using Kafka for real-time analytics.</p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="key-features-of-fluss">Key Features of Fluss<a href="#key-features-of-fluss" class="hash-link" aria-label="Direct link to Key Features of Fluss" title="Direct link to Key Features of Fluss"></a></h2>
diff --git a/blog/fluss-java-client/index.html b/blog/fluss-java-client/index.html
index 70b1f12a..62ca97d8 100644
--- a/blog/fluss-java-client/index.html
+++ b/blog/fluss-java-client/index.html
@@ -15,14 +15,14 @@
<link rel="icon" href="/img/logo.svg">
<link rel="manifest" href="/manifest.json">
<meta name="theme-color" content="#0071e3"><link rel="stylesheet" href="/assets/css/styles.53ed9f81.css">
-<script src="/assets/js/runtime~main.87feb3cc.js" defer="defer"></script>
-<script src="/assets/js/main.d75df03d.js" defer="defer"></script>
+<script src="/assets/js/runtime~main.93b61691.js" defer="defer"></script>
+<script src="/assets/js/main.9636bb89.js" defer="defer"></script>
</head>
<body class="navigation-with-keyboard">
<svg xmlns="http://www.w3.org/2000/svg" style="display: none;"><defs>
<symbol id="theme-svg-external-link" viewBox="0 0 24 24"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"/></symbol>
</defs></svg>
-<script>!function(){var t="light";var e=function(){try{return new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}}()||function(){try{return window.localStorage.getItem("theme")}catch(t){}}();document.documentElement.setAttribute("data-theme",e||t),document.documentElement.setAttribute("data-theme-choice",e||t)}(),function(){try{const c=new URLSearchParams(window.location.search).entries();for(var[t,e]of c)if(t.startsWith("docusaurus-data-")){var a=t.replace("do [...]
+<script>!function(){var t="light";var e=function(){try{return new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}}()||function(){try{return window.localStorage.getItem("theme")}catch(t){}}();document.documentElement.setAttribute("data-theme",e||t),document.documentElement.setAttribute("data-theme-choice",e||t)}(),function(){try{const c=new URLSearchParams(window.location.search).entries();for(var[t,e]of c)if(t.startsWith("docusaurus-data-")){var a=t.replace("do [...]
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="introduction">Introduction<a href="#introduction" class="hash-link" aria-label="Direct link to Introduction" title="Direct link to Introduction"></a></h2>
<p>Apache Fluss is a streaming data storage system built for real-time analytics, serving as a low-latency data layer in modern data Lakehouses.
It supports sub-second streaming reads and writes, storing data in a columnar format for efficiency, and offers two flexible table types: <strong>append-only Log Tables</strong> and <strong>updatable Primary Key Tables</strong>.
diff --git a/blog/fluss-joins-asf/index.html b/blog/fluss-joins-asf/index.html
index 1bbcfd4e..f9a26fa0 100644
--- a/blog/fluss-joins-asf/index.html
+++ b/blog/fluss-joins-asf/index.html
@@ -15,14 +15,14 @@
<link rel="icon" href="/img/logo.svg">
<link rel="manifest" href="/manifest.json">
<meta name="theme-color" content="#0071e3"><link rel="stylesheet" href="/assets/css/styles.53ed9f81.css">
-<script src="/assets/js/runtime~main.87feb3cc.js" defer="defer"></script>
-<script src="/assets/js/main.d75df03d.js" defer="defer"></script>
+<script src="/assets/js/runtime~main.93b61691.js" defer="defer"></script>
+<script src="/assets/js/main.9636bb89.js" defer="defer"></script>
</head>
<body class="navigation-with-keyboard">
<svg xmlns="http://www.w3.org/2000/svg" style="display: none;"><defs>
<symbol id="theme-svg-external-link" viewBox="0 0 24 24"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"/></symbol>
</defs></svg>
-<script>!function(){var t="light";var e=function(){try{return new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}}()||function(){try{return window.localStorage.getItem("theme")}catch(t){}}();document.documentElement.setAttribute("data-theme",e||t),document.documentElement.setAttribute("data-theme-choice",e||t)}(),function(){try{const c=new URLSearchParams(window.location.search).entries();for(var[t,e]of c)if(t.startsWith("docusaurus-data-")){var a=t.replace("do [...]
+<script>!function(){var t="light";var e=function(){try{return new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}}()||function(){try{return window.localStorage.getItem("theme")}catch(t){}}();document.documentElement.setAttribute("data-theme",e||t),document.documentElement.setAttribute("data-theme-choice",e||t)}(),function(){try{const c=new URLSearchParams(window.location.search).entries();for(var[t,e]of c)if(t.startsWith("docusaurus-data-")){var a=t.replace("do [...]
neutral, and standardized. Moving forward, Fluss will leverage the ASF ecosystem to accelerate the building of a global developer community, continuously driving innovation and adoption of next-generation real-time data infrastructure.</p>
<p><img decoding="async" loading="lazy" alt="ASF" src="/assets/images/asf-0621eab6f6aadbdfebfc5e24a36667c1.png" width="1231" height="631" class="img_ev3q"></p>
<p>The Fluss community has recently completed all donation procedures and successfully transferred the project to the Apache Software Foundation.
diff --git a/blog/fluss-open-source/index.html b/blog/fluss-open-source/index.html
index 9a62b658..3843dc7b 100644
--- a/blog/fluss-open-source/index.html
+++ b/blog/fluss-open-source/index.html
@@ -15,14 +15,14 @@
<link rel="icon" href="/img/logo.svg">
<link rel="manifest" href="/manifest.json">
<meta name="theme-color" content="#0071e3"><link rel="stylesheet" href="/assets/css/styles.53ed9f81.css">
-<script src="/assets/js/runtime~main.87feb3cc.js" defer="defer"></script>
-<script src="/assets/js/main.d75df03d.js" defer="defer"></script>
+<script src="/assets/js/runtime~main.93b61691.js" defer="defer"></script>
+<script src="/assets/js/main.9636bb89.js" defer="defer"></script>
</head>
<body class="navigation-with-keyboard">
<svg xmlns="http://www.w3.org/2000/svg" style="display: none;"><defs>
<symbol id="theme-svg-external-link" viewBox="0 0 24 24"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"/></symbol>
</defs></svg>
-<script>!function(){var t="light";var e=function(){try{return new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}}()||function(){try{return window.localStorage.getItem("theme")}catch(t){}}();document.documentElement.setAttribute("data-theme",e||t),document.documentElement.setAttribute("data-theme-choice",e||t)}(),function(){try{const c=new URLSearchParams(window.location.search).entries();for(var[t,e]of c)if(t.startsWith("docusaurus-data-")){var a=t.replace("do [...]
+<script>!function(){var t="light";var e=function(){try{return new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}}()||function(){try{return window.localStorage.getItem("theme")}catch(t){}}();document.documentElement.setAttribute("data-theme",e||t),document.documentElement.setAttribute("data-theme-choice",e||t)}(),function(){try{const c=new URLSearchParams(window.location.search).entries();for(var[t,e]of c)if(t.startsWith("docusaurus-data-")){var a=t.replace("do [...]
Fluss is a <strong>streaming storage system</strong> designed to power real-time analytics. It aspires to change how organizations approach real-time data by acting as the <strong>real-time data layer</strong> for the Lakehouse.
Its cutting-edge design enables businesses to achieve <strong>sub-second latency</strong>, <strong>high throughput</strong>, and <strong>cost efficiency</strong> for data analytics, making it the ideal solution for modern data-driven applications.</p>
<p>We have historically invested a lot of effort into advancing the data streaming ecosystem, being major contributors to <a href="https://flink.apache.org/" target="_blank" rel="noopener noreferrer">Apache Flink®</a>, <a href="https://www.ververica.com/blog/ververica-donates-flink-cdc-empowering-real-time-data-integration-for-the-community" target="_blank" rel="noopener noreferrer">Apache Flink CDC</a>, and <a href="https://paimon.apache.org/" target="_blank" rel="noopener noreferrer">A [...]
diff --git a/blog/hands-on-fluss-lakehouse/index.html b/blog/hands-on-fluss-lakehouse/index.html
index e3481846..802ab8be 100644
--- a/blog/hands-on-fluss-lakehouse/index.html
+++ b/blog/hands-on-fluss-lakehouse/index.html
@@ -15,14 +15,14 @@
<link rel="icon" href="/img/logo.svg">
<link rel="manifest" href="/manifest.json">
<meta name="theme-color" content="#0071e3"><link rel="stylesheet" href="/assets/css/styles.53ed9f81.css">
-<script src="/assets/js/runtime~main.87feb3cc.js" defer="defer"></script>
-<script src="/assets/js/main.d75df03d.js" defer="defer"></script>
+<script src="/assets/js/runtime~main.93b61691.js" defer="defer"></script>
+<script src="/assets/js/main.9636bb89.js" defer="defer"></script>
</head>
<body class="navigation-with-keyboard">
<svg xmlns="http://www.w3.org/2000/svg" style="display: none;"><defs>
<symbol id="theme-svg-external-link" viewBox="0 0 24 24"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"/></symbol>
</defs></svg>
-<script>!function(){var t="light";var e=function(){try{return new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}}()||function(){try{return window.localStorage.getItem("theme")}catch(t){}}();document.documentElement.setAttribute("data-theme",e||t),document.documentElement.setAttribute("data-theme-choice",e||t)}(),function(){try{const c=new URLSearchParams(window.location.search).entries();for(var[t,e]of c)if(t.startsWith("docusaurus-data-")){var a=t.replace("do [...]
+<script>!function(){var t="light";var e=function(){try{return new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}}()||function(){try{return window.localStorage.getItem("theme")}catch(t){}}();document.documentElement.setAttribute("data-theme",e||t),document.documentElement.setAttribute("data-theme-choice",e||t)}(),function(){try{const c=new URLSearchParams(window.location.search).entries();for(var[t,e]of c)if(t.startsWith("docusaurus-data-")){var a=t.replace("do [...]
<p><img decoding="async" loading="lazy" src="/assets/images/streamhouse-7b7f1260fc996ca89b50dbb9454584ab.png" width="3057" height="1237" class="img_ev3q"></p>
<p>In this hands-on tutorial, we'll walk you through setting up a local Fluss lakehouse environment, running some practical data operations, and getting first-hand experience with the complete Fluss lakehouse architecture. By the end, you'll have a working environment for experimenting with Fluss's powerful data processing capabilities.</p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="integrate-with-paimon-minio-lakehouse">Integrate with Paimon Minio Lakehouse<a href="#integrate-with-paimon-minio-lakehouse" class="hash-link" aria-label="Direct link to Integrate with Paimon Minio Lakehouse" title="Direct link to Integrate with Paimon Minio Lakehouse"></a></h2>
@@ -168,7 +168,7 @@
</li>
</ol>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="summary">Summary<a href="#summary" class="hash-link" aria-label="Direct link to Summary" title="Direct link to Summary"></a></h2>
-<p>In this guide, we've explored the Fluss lakehouse architecture and set up a complete local environment with Fluss, Flink, Paimon, and Minio. We've walked through practical examples of data processing that showcase how Fluss seamlessly integrates real-time and historical data. With this setup, you now have a solid foundation for experimenting with Fluss's powerful lakehouse capabilities on your own machine.</p></div></article><nav class="pagination-nav docusaurus-mt-lg" [...]
+<p>In this guide, we've explored the Fluss lakehouse architecture and set up a complete local environment with Fluss, Flink, Paimon, and Minio. We've walked through practical examples of data processing that showcase how Fluss seamlessly integrates real-time and historical data. With this setup, you now have a solid foundation for experimenting with Fluss's powerful lakehouse capabilities on your own machine.</p></div></article><nav class="pagination-nav docusaurus-mt-lg" [...]
<p>Copyright © 2025 The Apache Software Foundation, Licensed under the Apache License, Version 2.0.</p>
<p>Apache, the names of Apache projects, and the feather logo are either registered trademarks or trademarks of the Apache Software Foundation in the United States and/or other countries. All other marks mentioned may be trademarks or registered trademarks of their respective owners.</p></div></div></div></footer></div>
</body>
diff --git a/blog/index.html b/blog/index.html
index a62b043d..78befd18 100644
--- a/blog/index.html
+++ b/blog/index.html
@@ -3,7 +3,7 @@
<head>
<meta charset="UTF-8">
<meta name="generator" content="Docusaurus v3.8.1">
-<title data-rh="true">Blog | Apache Fluss™ (Incubating)</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:image" content="https://fluss.apache.org/img/logo/png/colored_logo.png"><meta data-rh="true" name="twitter:image" content="https://fluss.apache.org/img/logo/png/colored_logo.png"><meta data-rh="true" property="og:url" content="https://fluss.a [...]
+<title data-rh="true">Blog | Apache Fluss™ (Incubating)</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:image" content="https://fluss.apache.org/img/logo/png/colored_logo.png"><meta data-rh="true" name="twitter:image" content="https://fluss.apache.org/img/logo/png/colored_logo.png"><meta data-rh="true" property="og:url" content="https://fluss.a [...]
<link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache Fluss™ (Incubating) Atom Feed">
@@ -15,14 +15,21 @@
<link rel="icon" href="/img/logo.svg">
<link rel="manifest" href="/manifest.json">
<meta name="theme-color" content="#0071e3"><link rel="stylesheet" href="/assets/css/styles.53ed9f81.css">
-<script src="/assets/js/runtime~main.87feb3cc.js" defer="defer"></script>
-<script src="/assets/js/main.d75df03d.js" defer="defer"></script>
+<script src="/assets/js/runtime~main.93b61691.js" defer="defer"></script>
+<script src="/assets/js/main.9636bb89.js" defer="defer"></script>
</head>
<body class="navigation-with-keyboard">
<svg xmlns="http://www.w3.org/2000/svg" style="display: none;"><defs>
<symbol id="theme-svg-external-link" viewBox="0 0 24 24"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"/></symbol>
</defs></svg>
-<script>!function(){var t="light";var e=function(){try{return new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}}()||function(){try{return window.localStorage.getItem("theme")}catch(t){}}();document.documentElement.setAttribute("data-theme",e||t),document.documentElement.setAttribute("data-theme-choice",e||t)}(),function(){try{const c=new URLSearchParams(window.location.search).entries();for(var[t,e]of c)if(t.startsWith("docusaurus-data-")){var a=t.replace("do [...]
+<script>!function(){var t="light";var e=function(){try{return new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}}()||function(){try{return window.localStorage.getItem("theme")}catch(t){}}();document.documentElement.setAttribute("data-theme",e||t),document.documentElement.setAttribute("data-theme-choice",e||t)}(),function(){try{const c=new URLSearchParams(window.location.search).entries();for(var[t,e]of c)if(t.startsWith("docusaurus-data-")){var a=t.replace("do [...]
+<h3 class="anchor anchorWithStickyNavbar_LWe7" id="introduction">Introduction<a href="#introduction" class="hash-link" aria-label="Direct link to Introduction" title="Direct link to Introduction"></a></h3>
+<p>The Data Development Team of Taobao has built a new <strong>generation of real-time data warehouse</strong> based on Apache Fluss.
+Fluss solves the problems of redundant data transfer, difficulties in data profiling, and challenges in large scale stateful workload operations and maintenance.
+By combining columnar storage with real-time update capabilities, Fluss supports column pruning, key-value point lookups, Delta Join, and seamless lake–stream integration, thereby <strong>cutting I/O and compute overhead</strong> while enhancing job stability and profiling efficiency.</p>
+<p>Already deployed on Taobao’s A/B-testing platform for critical services such as search and recommendation, the system proved its resilience during the 618 Grand Promotion:
+<strong>it handled tens of millions of requests with sub-second latency</strong>, lowered resource usage by <strong>30%</strong>, and removed more than 100 TB from state storage.
+Looking ahead, the team will continue to extend Fluss within a <strong>Lakehouse architecture</strong> and broaden its use across <strong>AI-driven</strong> workloads.</p></div><footer class="row docusaurus-mt-lg"><div class="col text--right"><a aria-label="Read more about How Taobao uses Apache Fluss (Incubating) for Real-Time Processing in Search and RecSys" href="/blog/taobao-practice/"><b>Read more</b></a></div></footer></article><article class="margin-bottom--xl"><header><h2 class=" [...]
<p><img decoding="async" loading="lazy" src="/assets/images/streamhouse-7b7f1260fc996ca89b50dbb9454584ab.png" width="3057" height="1237" class="img_ev3q"></p>
<p>In this hands-on tutorial, we'll walk you through setting up a local Fluss lakehouse environment, running some practical data operations, and getting first-hand experience with the complete Fluss lakehouse architecture. By the end, you'll have a working environment for experimenting with Fluss's powerful data processing capabilities.</p></div><footer class="row docusaurus-mt-lg"><div class="col text--right"><a aria-label="Read more about From Stream to Lake: Hands-On wi [...]
neutral, and standardized. Moving forward, Fluss will leverage the ASF ecosystem to accelerate the building of a global developer community, continuously driving innovation and adoption of next-generation real-time data infrastructure.</p>
@@ -59,9 +66,7 @@ with more than 200 code commits completed. Our heartfelt thanks go out to every
<li><strong>Changelog Generation:</strong> Supports changelog generation and consumption.</li>
<li><strong>Real-Time Lookup Queries:</strong> Facilitates instant lookup queries on primary keys.</li>
<li><strong>Streaming & Lakehouse Unification:</strong> Seamlessly integrates streaming and lakehouse storage for unified data processing.</li>
-</ul></div><footer class="row docusaurus-mt-lg"><div class="col text--right"><a aria-label="Read more about Towards A Unified Streaming & Lakehouse Architecture" href="/blog/unified-streaming-lakehouse/"><b>Read more</b></a></div></footer></article><article class="margin-bottom--xl"><header><h2 class="title_f1Hy"><a href="/blog/fluss-intro/">Introducing Fluss: Streaming Storage for Real-Time Analytics</a></h2><div class="container_mt6G margin-vert--md"><time datetime="2024-12-12T00:0 [...]
-Today, we are excited to introduce Fluss, a cutting-edge streaming storage system designed to power real-time analytics.
-We are going to explore Fluss's architecture, design principles, key features, and how it addresses the challenges of using Kafka for real-time analytics.</p></div><footer class="row docusaurus-mt-lg"><div class="col text--right"><a aria-label="Read more about Introducing Fluss: Streaming Storage for Real-Time Analytics" href="/blog/fluss-intro/"><b>Read more</b></a></div></footer></article><nav class="pagination-nav" aria-label="Blog list page navigation"><a class="pagination-nav__ [...]
+</ul></div><footer class="row docusaurus-mt-lg"><div class="col text--right"><a aria-label="Read more about Towards A Unified Streaming & Lakehouse Architecture" href="/blog/unified-streaming-lakehouse/"><b>Read more</b></a></div></footer></article><nav class="pagination-nav" aria-label="Blog list page navigation"><a class="pagination-nav__link pagination-nav__link--next" href="/blog/page/2/"><div class="pagination-nav__label">Older entries</div></a></nav></main></div></div></div><fo [...]
<p>Copyright © 2025 The Apache Software Foundation, Licensed under the Apache License, Version 2.0.</p>
<p>Apache, the names of Apache projects, and the feather logo are either registered trademarks or trademarks of the Apache Software Foundation in the United States and/or other countries. All other marks mentioned may be trademarks or registered trademarks of their respective owners.</p></div></div></div></footer></div>
</body>
diff --git a/blog/page/2/index.html b/blog/page/2/index.html
index 1364747c..0087e5ff 100644
--- a/blog/page/2/index.html
+++ b/blog/page/2/index.html
@@ -3,7 +3,7 @@
<head>
<meta charset="UTF-8">
<meta name="generator" content="Docusaurus v3.8.1">
-<title data-rh="true">Blog | Apache Fluss™ (Incubating)</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:image" content="https://fluss.apache.org/img/logo/png/colored_logo.png"><meta data-rh="true" name="twitter:image" content="https://fluss.apache.org/img/logo/png/colored_logo.png"><meta data-rh="true" property="og:url" content="https://fluss.a [...]
+<title data-rh="true">Blog | Apache Fluss™ (Incubating)</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:image" content="https://fluss.apache.org/img/logo/png/colored_logo.png"><meta data-rh="true" name="twitter:image" content="https://fluss.apache.org/img/logo/png/colored_logo.png"><meta data-rh="true" property="og:url" content="https://fluss.a [...]
<link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache Fluss™ (Incubating) Atom Feed">
@@ -15,14 +15,16 @@
<link rel="icon" href="/img/logo.svg">
<link rel="manifest" href="/manifest.json">
<meta name="theme-color" content="#0071e3"><link rel="stylesheet" href="/assets/css/styles.53ed9f81.css">
-<script src="/assets/js/runtime~main.87feb3cc.js" defer="defer"></script>
-<script src="/assets/js/main.d75df03d.js" defer="defer"></script>
+<script src="/assets/js/runtime~main.93b61691.js" defer="defer"></script>
+<script src="/assets/js/main.9636bb89.js" defer="defer"></script>
</head>
<body class="navigation-with-keyboard">
<svg xmlns="http://www.w3.org/2000/svg" style="display: none;"><defs>
<symbol id="theme-svg-external-link" viewBox="0 0 24 24"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"/></symbol>
</defs></svg>
-<script>!function(){var t="light";var e=function(){try{return new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}}()||function(){try{return window.localStorage.getItem("theme")}catch(t){}}();document.documentElement.setAttribute("data-theme",e||t),document.documentElement.setAttribute("data-theme-choice",e||t)}(),function(){try{const c=new URLSearchParams(window.location.search).entries();for(var[t,e]of c)if(t.startsWith("docusaurus-data-")){var a=t.replace("do [...]
+<script>!function(){var t="light";var e=function(){try{return new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}}()||function(){try{return window.localStorage.getItem("theme")}catch(t){}}();document.documentElement.setAttribute("data-theme",e||t),document.documentElement.setAttribute("data-theme-choice",e||t)}(),function(){try{const c=new URLSearchParams(window.location.search).entries();for(var[t,e]of c)if(t.startsWith("docusaurus-data-")){var a=t.replace("do [...]
+Today, we are excited to introduce Fluss, a cutting-edge streaming storage system designed to power real-time analytics.
+We are going to explore Fluss's architecture, design principles, key features, and how it addresses the challenges of using Kafka for real-time analytics.</p></div><footer class="row docusaurus-mt-lg"><div class="col text--right"><a aria-label="Read more about Introducing Fluss: Streaming Storage for Real-Time Analytics" href="/blog/fluss-intro/"><b>Read more</b></a></div></footer></article><article class="margin-bottom--xl"><header><h2 class="title_f1Hy"><a href="/blog/why-fluss/"> [...]
This transition is revolutionizing various sectors, including the E-commerce, automotive networking, finance, and beyond,
where real-time data applications are becoming integral to operations. This evolution enables organizations to unlock greater
value by leveraging real-time insights to drive business impact and enhance decision-making.</p></div><footer class="row docusaurus-mt-lg"><div class="col text--right"><a aria-label="Read more about Why Fluss? Top 4 Challenges of Using Kafka for Real-Time Analytics" href="/blog/why-fluss/"><b>Read more</b></a></div></footer></article><article class="margin-bottom--xl"><header><h2 class="title_f1Hy"><a href="/blog/fluss-open-source/">Fluss is Now Open Source</a></h2><div class="container_ [...]
diff --git a/blog/partial-updates/index.html b/blog/partial-updates/index.html
index 30c42ce0..ee1f4bac 100644
--- a/blog/partial-updates/index.html
+++ b/blog/partial-updates/index.html
@@ -15,14 +15,14 @@
<link rel="icon" href="/img/logo.svg">
<link rel="manifest" href="/manifest.json">
<meta name="theme-color" content="#0071e3"><link rel="stylesheet" href="/assets/css/styles.53ed9f81.css">
-<script src="/assets/js/runtime~main.87feb3cc.js" defer="defer"></script>
-<script src="/assets/js/main.d75df03d.js" defer="defer"></script>
+<script src="/assets/js/runtime~main.93b61691.js" defer="defer"></script>
+<script src="/assets/js/main.9636bb89.js" defer="defer"></script>
</head>
<body class="navigation-with-keyboard">
<svg xmlns="http://www.w3.org/2000/svg" style="display: none;"><defs>
<symbol id="theme-svg-external-link" viewBox="0 0 24 24"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"/></symbol>
</defs></svg>
-<script>!function(){var t="light";var e=function(){try{return new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}}()||function(){try{return window.localStorage.getItem("theme")}catch(t){}}();document.documentElement.setAttribute("data-theme",e||t),document.documentElement.setAttribute("data-theme-choice",e||t)}(),function(){try{const c=new URLSearchParams(window.location.search).entries();for(var[t,e]of c)if(t.startsWith("docusaurus-data-")){var a=t.replace("do [...]
+<script>!function(){var t="light";var e=function(){try{return new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}}()||function(){try{return window.localStorage.getItem("theme")}catch(t){}}();document.documentElement.setAttribute("data-theme",e||t),document.documentElement.setAttribute("data-theme-choice",e||t)}(),function(){try{const c=new URLSearchParams(window.location.search).entries();for(var[t,e]of c)if(t.startsWith("docusaurus-data-")){var a=t.replace("do [...]
<p>Traditional streaming data pipelines often need to join many tables or streams on a primary key to create a wide view.
For example, imagine you’re building a real-time recommendation engine for an e-commerce platform.
To serve highly personalized recommendations, your system needs a complete 360° view of each user, including:
diff --git a/blog/releases/0.6/index.html b/blog/releases/0.6/index.html
index 641f642c..3b0843c5 100644
--- a/blog/releases/0.6/index.html
+++ b/blog/releases/0.6/index.html
@@ -15,14 +15,14 @@
<link rel="icon" href="/img/logo.svg">
<link rel="manifest" href="/manifest.json">
<meta name="theme-color" content="#0071e3"><link rel="stylesheet" href="/assets/css/styles.53ed9f81.css">
-<script src="/assets/js/runtime~main.87feb3cc.js" defer="defer"></script>
-<script src="/assets/js/main.d75df03d.js" defer="defer"></script>
+<script src="/assets/js/runtime~main.93b61691.js" defer="defer"></script>
+<script src="/assets/js/main.9636bb89.js" defer="defer"></script>
</head>
<body class="navigation-with-keyboard">
<svg xmlns="http://www.w3.org/2000/svg" style="display: none;"><defs>
<symbol id="theme-svg-external-link" viewBox="0 0 24 24"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"/></symbol>
</defs></svg>
-<script>!function(){var t="light";var e=function(){try{return new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}}()||function(){try{return window.localStorage.getItem("theme")}catch(t){}}();document.documentElement.setAttribute("data-theme",e||t),document.documentElement.setAttribute("data-theme-choice",e||t)}(),function(){try{const c=new URLSearchParams(window.location.search).entries();for(var[t,e]of c)if(t.startsWith("docusaurus-data-")){var a=t.replace("do [...]
+<script>!function(){var t="light";var e=function(){try{return new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}}()||function(){try{return window.localStorage.getItem("theme")}catch(t){}}();document.documentElement.setAttribute("data-theme",e||t),document.documentElement.setAttribute("data-theme-choice",e||t)}(),function(){try{const c=new URLSearchParams(window.location.search).entries();for(var[t,e]of c)if(t.startsWith("docusaurus-data-")){var a=t.replace("do [...]
three months of intensive development, bringing together the expertise and efforts of 45 contributors worldwide,
with more than 200 code commits completed. Our heartfelt thanks go out to every contributor for their invaluable support!</p>
<p><img decoding="async" loading="lazy" alt="Release Announcement" src="/assets/images/announce-9ab924e071ec69fe7af8765954f9e966.png" width="1224" height="440" class="img_ev3q"></p>
diff --git a/blog/releases/0.7/index.html b/blog/releases/0.7/index.html
index 0ef3d44f..d60dd27f 100644
--- a/blog/releases/0.7/index.html
+++ b/blog/releases/0.7/index.html
@@ -15,14 +15,14 @@
<link rel="icon" href="/img/logo.svg">
<link rel="manifest" href="/manifest.json">
<meta name="theme-color" content="#0071e3"><link rel="stylesheet" href="/assets/css/styles.53ed9f81.css">
-<script src="/assets/js/runtime~main.87feb3cc.js" defer="defer"></script>
-<script src="/assets/js/main.d75df03d.js" defer="defer"></script>
+<script src="/assets/js/runtime~main.93b61691.js" defer="defer"></script>
+<script src="/assets/js/main.9636bb89.js" defer="defer"></script>
</head>
<body class="navigation-with-keyboard">
<svg xmlns="http://www.w3.org/2000/svg" style="display: none;"><defs>
<symbol id="theme-svg-external-link" viewBox="0 0 24 24"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"/></symbol>
</defs></svg>
-<script>!function(){var t="light";var e=function(){try{return new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}}()||function(){try{return window.localStorage.getItem("theme")}catch(t){}}();document.documentElement.setAttribute("data-theme",e||t),document.documentElement.setAttribute("data-theme-choice",e||t)}(),function(){try{const c=new URLSearchParams(window.location.search).entries();for(var[t,e]of c)if(t.startsWith("docusaurus-data-")){var a=t.replace("do [...]
+<script>!function(){var t="light";var e=function(){try{return new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}}()||function(){try{return window.localStorage.getItem("theme")}catch(t){}}();document.documentElement.setAttribute("data-theme",e||t),document.documentElement.setAttribute("data-theme-choice",e||t)}(),function(){try{const c=new URLSearchParams(window.location.search).entries();for(var[t,e]of c)if(t.startsWith("docusaurus-data-")){var a=t.replace("do [...]
<p>🌊 We are excited to announce the official release of <strong>Fluss 0.7</strong>!</p>
<p>This version has undergone extensive improvements in <strong>stability</strong>, <strong>architecture</strong>, <strong>performance optimization</strong>, and <strong>security</strong>, further enhancing its readiness for <strong>production environments</strong>. Over the past three months, we have completed more than <strong>250 commits</strong>, making this release a significant milestone toward becoming a mature, production-grade streaming storage platform.</p>
<p><img decoding="async" loading="lazy" alt="Improvements Diagram" src="/assets/images/overview-255047ec7648f12c63660b40d1147c86.png" width="1248" height="778" class="img_ev3q"></p>
diff --git a/blog/rss.xml b/blog/rss.xml
index 4ae9c3d0..7b1b0af3 100644
--- a/blog/rss.xml
+++ b/blog/rss.xml
@@ -4,10 +4,261 @@
<title>Apache Fluss™ (Incubating) Blog</title>
<link>https://fluss.apache.org/blog/</link>
<description>Apache Fluss™ (Incubating) Blog</description>
- <lastBuildDate>Wed, 23 Jul 2025 00:00:00 GMT</lastBuildDate>
+ <lastBuildDate>Thu, 07 Aug 2025 00:00:00 GMT</lastBuildDate>
<docs>https://validator.w3.org/feed/docs/rss2.html</docs>
<generator>https://github.com/jpmonette/feed</generator>
<language>en</language>
+ <item>
+ <title><![CDATA[How Taobao uses Apache Fluss (Incubating) for Real-Time Processing in Search and RecSys]]></title>
+ <link>https://fluss.apache.org/blog/taobao-practice/</link>
+ <guid>https://fluss.apache.org/blog/taobao-practice/</guid>
+ <pubDate>Thu, 07 Aug 2025 00:00:00 GMT</pubDate>
+ <description><![CDATA[Streaming Storage More Suitable for Real-Time OLAP]]></description>
+ <content:encoded><![CDATA[<h2 class="anchor anchorWithStickyNavbar_LWe7" id="streaming-storage-more-suitable-for-real-time-olap">Streaming Storage More Suitable for Real-Time OLAP<a href="https://fluss.apache.org/blog/taobao-practice/#streaming-storage-more-suitable-for-real-time-olap" class="hash-link" aria-label="Direct link to Streaming Storage More Suitable for Real-Time OLAP" title="Direct link to Streaming Storage More Suitable for Real-Time OLAP"></a></h2>
+<h3 class="anchor anchorWithStickyNavbar_LWe7" id="introduction">Introduction<a href="https://fluss.apache.org/blog/taobao-practice/#introduction" class="hash-link" aria-label="Direct link to Introduction" title="Direct link to Introduction"></a></h3>
+<p>The Data Development Team of Taobao has built a new <strong>generation of real-time data warehouse</strong> based on Apache Fluss.
+Fluss solves the problems of redundant data transfer, difficulties in data profiling, and challenges in large scale stateful workload operations and maintenance.
+By combining columnar storage with real-time update capabilities, Fluss supports column pruning, key-value point lookups, Delta Join, and seamless lake–stream integration, thereby <strong>cutting I/O and compute overhead</strong> while enhancing job stability and profiling efficiency.</p>
+<p>Already deployed on Taobao’s A/B-testing platform for critical services such as search and recommendation, the system proved its resilience during the 618 Grand Promotion:
+<strong>it handled tens of millions of requests with sub-second latency</strong>, lowered resource usage by <strong>30%</strong>, and removed more than 100 TB from state storage.
+Looking ahead, the team will continue to extend Fluss within a <strong>Lakehouse architecture</strong> and broaden its use across <strong>AI-driven</strong> workloads.</p>
+<h3 class="anchor anchorWithStickyNavbar_LWe7" id="business-background">Business Background<a href="https://fluss.apache.org/blog/taobao-practice/#business-background" class="hash-link" aria-label="Direct link to Business Background" title="Direct link to Business Background"></a></h3>
+<p><img decoding="async" loading="lazy" src="https://fluss.apache.org/assets/images/ab_experiment_platform_arch-0b365a2892747d8d709efae2a20eb810.png" width="904" height="346" class="img_ev3q"></p>
+<p>Taobao A/B testing Analysis Platform, mainly focuses on A/B data of Taobao's C-end algorithms, aiming to promote scientific decision-making activities through the construction of generalized A/B data capabilities.
+Since its inception in <strong>2015</strong> , it has continuously and effectively supported the analysis of Taobao's algorithm A/B data for <strong>10 years</strong> .
+Currently, it is applied to <strong>over 100</strong> A/B testing scenarios across various business areas, including <strong>search, recommendation, content,</strong> <strong>user growth</strong>, and <strong>marketing</strong>.</p>
+<p><img decoding="async" loading="lazy" src="https://fluss.apache.org/assets/images/realtime_data_warehouse_arch-10cb25ecf32a9a576b09f081953aeb6d.png" width="904" height="364" class="img_ev3q"></p>
+<p>Taobao provides the following capabilities:</p>
+<ul>
+<li>
+<p><strong>A/B Data Public Data Warehouse:</strong> Serves various data applications of downstream algorithms, including: <code>online traffic splitting</code>, <code>distribution alignment</code>, <code>general features</code>, <code>scenario labels</code>, and other application scenarios.</p>
+</li>
+<li>
+<p><strong>Scientific Experiment Evaluation:</strong> Implement mature scientific evaluation solutions in the industry, conduct long-term tracking of the effects of A/B testing, and help businesses obtain real and reliable experimental evaluation results.</p>
+</li>
+<li>
+<p><strong>Multidimensional Ad Hoc OLAP Self-Service Analysis:</strong> Through mature data solutions, it supports multidimensional and ad hoc OLAP queries, serving data effectiveness analysis across all clients, businesses, and scenarios.</p>
+</li>
+</ul>
+<h2 class="anchor anchorWithStickyNavbar_LWe7" id="business-pain-points">Business Pain Points<a href="https://fluss.apache.org/blog/taobao-practice/#business-pain-points" class="hash-link" aria-label="Direct link to Business Pain Points" title="Direct link to Business Pain Points"></a></h2>
+<p>Currently, the real-time data warehouse of Taobao is based on technology stacks such as Flink, message queue, OLAP engine, etc., where the message queue is TT (Kafka-like architecture MQ) within Taobao, and the OLAP engine is Alibaba Cloud Hologres.</p>
+<p><img decoding="async" loading="lazy" src="https://fluss.apache.org/assets/images/origin_data_pipeline-eebb499bcdba0e096585e5febad7ad99.png" width="904" height="328" class="img_ev3q"></p>
+<p>After ingesting access log data from the message queue, we execute business logic within Apache Flink.
+However, as SQL complexity increases - particularly in the presence of <code>ORDER BY</code> and <code>JOIN</code> operations - the resulting retraction streams significantly expand.</p>
+<p>This leads to a substantial increase in Flink state size, which in turn drives up the consumption of compute resources.
+Such scenarios introduce notable challenges in both job development and ongoing maintenance. Additionally, the development lifecycle for these real-time jobs tends to be considerably longer compared to equivalent offline solutions.</p>
+<p>Currently, the message queue still has some limitations, and the main problems encountered are as follows:</p>
+<h3 class="anchor anchorWithStickyNavbar_LWe7" id="redundant-data-transfer">Redundant Data Transfer<a href="https://fluss.apache.org/blog/taobao-practice/#redundant-data-transfer" class="hash-link" aria-label="Direct link to Redundant Data Transfer" title="Direct link to Redundant Data Transfer"></a></h3>
+<p>In traditional data warehouse environments, <strong>write-once</strong>, <strong>read-many</strong> is the prevailing access pattern, where each downstream consumer typically reads only a subset of the available data.
+For example, in the exposure job for Taobao, the message queue provides 44 fields per record, yet the job only requires 13 of them.
+However, due to the row-based nature of the message queue storage format, all 44 fields must still be read and transmitted during consumption.</p>
+<p>This results in significant <strong>I/O inefficiency; approximately 70% of the network throughput</strong> is wasted on reading unused columns.
+Consumers bear the full cost of data transfer, even though only a fraction of the data is relevant to their processing logic.
+This contributes to <strong>excessive resource utilization</strong>, especially at scale.</p>
+<p>Attempts at Optimization with Flink
+To mitigate this, we explored column pruning within <strong>Apache Flink</strong> by explicitly defining the schema in the Source and introducing a UDF to drop unused columns early in the pipeline.
+While this approach aimed to reduce data ingestion costs, its <strong>practical impact was minimal</strong>.
+The performance gains were negligible, and the added complexity in pipeline design and maintenance introduced new operational challenges.</p>
+<p><img decoding="async" loading="lazy" src="https://fluss.apache.org/assets/images/column_pruning_operator-9f8fb7ad0280354e1561b63a6615b357.png" width="754" height="478" class="img_ev3q"></p>
+<h3 class="anchor anchorWithStickyNavbar_LWe7" id="challenges-in-data-profiling--debugging">Challenges In Data Profiling & Debugging<a href="https://fluss.apache.org/blog/taobao-practice/#challenges-in-data-profiling--debugging" class="hash-link" aria-label="Direct link to Challenges In Data Profiling & Debugging" title="Direct link to Challenges In Data Profiling & Debugging"></a></h3>
+<h4 class="anchor anchorWithStickyNavbar_LWe7" id="message-queues-are-not-designed-for-random-access-or-key-value-lookups">Message queues are not designed for random access or key-value lookups<a href="https://fluss.apache.org/blog/taobao-practice/#message-queues-are-not-designed-for-random-access-or-key-value-lookups" class="hash-link" aria-label="Direct link to Message queues are not designed for random access or key-value lookups" title="Direct link to Message queues are not designed [...]
+<p>In modern data warehouse architecture, <strong>data profiling is a foundational capability</strong>, essential for tasks such as issue diagnosis, anomaly detection, and case-specific troubleshooting. To meet these needs, two distinct data profiling approaches for message queues have been evaluated in production environments.</p>
+<p>While each method offers unique benefits, <strong>both exhibit trade-offs and limitations</strong> that prevent them from fully addressing the breadth of business requirements. Neither approach provides a comprehensive solution for profiling within the constraints and characteristics of message queue systems, such as their lack of random access and stateless consumption model.</p>
+<table><thead><tr><th>Query Type</th><th>Query Method</th><th>Advantages</th><th>Disadvantages</th></tr></thead><tbody><tr><td>Sampling query</td><td>Randomly query according to time slices.</td><td>High timeliness</td><td>Unable to query the specified data.</td></tr><tr><td>Synchronize additional storage query</td><td>Synchronize the data in the message queue to additional storage and then perform queries.</td><td>Can query specified data</td><td>1. Additional synchronization, storage, [...]
+<p><img decoding="async" loading="lazy" src="https://fluss.apache.org/assets/images/mq_profiling-80b5d670d20dccdfa5bd96aad32f47f5.png" width="904" height="374" class="img_ev3q"></p>
+<h4 class="anchor anchorWithStickyNavbar_LWe7" id="challenges-with-state-visibility-in-flink">Challenges with State Visibility in Flink<a href="https://fluss.apache.org/blog/taobao-practice/#challenges-with-state-visibility-in-flink" class="hash-link" aria-label="Direct link to Challenges with State Visibility in Flink" title="Direct link to Challenges with State Visibility in Flink"></a></h4>
+<p>In e-commerce analytics, identifying the <strong>first and last user interaction channels within the same day</strong> is a critical metric for evaluating both <strong>user acquisition performance</strong> and <strong>channel effectiveness</strong>.
+To ensure accurate computation of this metric, the processing engine must perform <strong>sorting and deduplication</strong>, which inherently requires <strong>materializing all relevant upstream data into Flink State</strong>.</p>
+<p>However, Flink’s managed state is inherently opaque;it functions as a high-performance internal component designed for scalability and fault tolerance, but it does not provide native visibility or introspection tools. This "black-box" nature of state introduces substantial challenges when attempting to <strong>debug</strong>, <strong>verify</strong>, or <strong>modify</strong> streaming jobs, especially in production environments. The lack of transparency significantly complicates tas [...]
+<p>As a result, teams may encounter <strong>increased operational overhead</strong> and <strong>longer development cycles</strong>, particularly when dealing with stateful streaming jobs that require precise control over historical data.</p>
+<p><img decoding="async" loading="lazy" src="https://fluss.apache.org/assets/images/flink_sorting_job-b9edc790b2248e8d51e27ee15777781f.png" width="904" height="398" class="img_ev3q"></p>
+<h3 class="anchor anchorWithStickyNavbar_LWe7" id="operational-challenges-of-large-flink-state-in-stateful-jobs">Operational Challenges of Large Flink State in Stateful Jobs<a href="https://fluss.apache.org/blog/taobao-practice/#operational-challenges-of-large-flink-state-in-stateful-jobs" class="hash-link" aria-label="Direct link to Operational Challenges of Large Flink State in Stateful Jobs" title="Direct link to Operational Challenges of Large Flink State in Stateful Jobs"></a></h3>
+<p>In many Flink jobs, maintaining intermediate result sets in state is essential to support operations such as sorting and joining. When modifying a job, Flink attempts to reuse the previous state by validating the updated execution plan against the existing state schema. If the plan verification succeeds, the job can resume from the latest checkpoint. However, if the verification fails, the system is forced to <strong>reinitialize the entire state from scratch (epoch 0)</strong>, a pro [...]
+<p><img decoding="async" loading="lazy" src="https://fluss.apache.org/assets/images/transaction_attribution_state-d6c2a559f0ec205036782549c3e1434c.png" width="904" height="210" class="img_ev3q"></p>
+<p>In our current scenario, each incoming record triggers updates to both Sort State and Join State. These states have grown significantly in size, with the sort operator's state reaching up to <strong>90 TB</strong> and the join operator's state peaking at <strong>10 TB</strong>. Managing such large-scale state introduces a number of serious challenges:</p>
+<ul>
+<li><strong>High infrastructure costs</strong> due to the volume of state data.</li>
+<li><strong>Increased risk of checkpoint timeouts</strong>, especially under load.</li>
+<li><strong>Degraded job stability</strong>, with failures more likely during recovery or scaling events.</li>
+<li><strong>Slow job restart and recovery times</strong>, making operational troubleshooting difficult.</li>
+<li><strong>Development inefficiency</strong>, as state schema changes often require full state resets.</li>
+</ul>
+<p>This highlights the need for <strong>more efficient state management strategies</strong>, such as state compaction, state TTLs, or alternative storage architectures, to support large-scale, high-throughput streaming workloads with minimal operational burden.</p>
+<p><img decoding="async" loading="lazy" src="https://fluss.apache.org/assets/images/transaction_attribution_flink_job-f9515c01b5423520775b54a66b57deeb.png" width="904" height="392" class="img_ev3q"></p>
+<h2 class="anchor anchorWithStickyNavbar_LWe7" id="apache-fluss-key-advantages">Apache Fluss Key Advantages<a href="https://fluss.apache.org/blog/taobao-practice/#apache-fluss-key-advantages" class="hash-link" aria-label="Direct link to Apache Fluss Key Advantages" title="Direct link to Apache Fluss Key Advantages"></a></h2>
+<h3 class="anchor anchorWithStickyNavbar_LWe7" id="what-is-apache-fluss">What is Apache Fluss?<a href="https://fluss.apache.org/blog/taobao-practice/#what-is-apache-fluss" class="hash-link" aria-label="Direct link to What is Apache Fluss?" title="Direct link to What is Apache Fluss?"></a></h3>
+<blockquote>
+<p>Fluss Official Documentation: <a href="https://fluss.apache.org/" target="_blank" rel="noopener noreferrer">https://fluss.apache.org/</a></p>
+</blockquote>
+<blockquote>
+<p>GitHub: <a href="https://github.com/apache/fluss" target="_blank" rel="noopener noreferrer">https://github.com/apache/fluss</a></p>
+</blockquote>
+<p><img decoding="async" loading="lazy" src="https://fluss.apache.org/assets/images/fulss_arch-9347738f0d221a64c79f1a2c735b1210.png" width="904" height="242" class="img_ev3q"></p>
+<p>Fluss, developed by the Flink team, is the next-generation stream storage for stream analysis, a stream storage built for real-time analysis. Fluss innovatively integrates columnar storage format and real-time update capabilities into stream storage, and is deeply integrated with Flink to help users build a streaming data warehouse with high throughput, low latency, and low cost. It has the following core features:</p>
+<ul>
+<li><strong>Real-time reads and writes:</strong> Supports millisecond-level streaming read and write capabilities.</li>
+<li><strong>Columnar pruning:</strong> Store real-time stream data in columnar format. Column pruning can improve read performance by 10 times and reduce network costs.</li>
+<li><strong>Streaming Update:</strong> Supports real-time streaming updates for large-scale data. Supports partial column updates to achieve low-cost wide table stitching.</li>
+<li><strong>CDC Subscription:</strong> Updates will generate a complete Change Log (CDC), and by consuming CDC through Flink streaming, real-time data flow across the whole-pipeline of the data warehouse can be achieved.</li>
+<li><strong>Real-time Lookup Queries:</strong> Supports high-performance primary key point query and can be used as a dimension table association for real-time processing links.</li>
+<li><strong>Unified Lake and Stream:</strong> Seamlessly integrates Lakehouse and provides a real-time data layer for Lakehouse. This not only brings low-latency data to Lakehouse analytics but also endows stream storage with powerful analytical capabilities.</li>
+</ul>
+<h3 class="anchor anchorWithStickyNavbar_LWe7" id="table-types">Table Types<a href="https://fluss.apache.org/blog/taobao-practice/#table-types" class="hash-link" aria-label="Direct link to Table Types" title="Direct link to Table Types"></a></h3>
+<p><img decoding="async" loading="lazy" src="https://fluss.apache.org/assets/images/fulss_underlying_arch-a7af63a1ea8c1b9d495ba3ae2b4d5100.png" width="904" height="594" class="img_ev3q"></p>
+<p><strong>Type:</strong> Divided into log tables and primary key tables. Log tables are columnar MQs that only support insert operations, while primary key tables can be updated according to the primary key and specified merge engine.</p>
+<p><strong>Partition:</strong> Divides data into smaller, more manageable subsets according to specified columns. Fluss supports more diverse partitioning strategies, such as Dynamic create partitions. For the latest documentation on partitioning, please refer to: <a href="https://fluss.apache.org/docs/table-design/data-distribution/partitioning/" target="_blank" rel="noopener noreferrer">https://fluss.apache.org/docs/table-design/data-distribution/partitioning/</a> . Note that the parti [...]
+<div class="language-SQL language-sql codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#9CDCFE;--prism-background-color:#1E1E1E"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-sql codeBlock_bY9V thin-scrollbar" style="color:#9CDCFE;background-color:#1E1E1E"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#9CDCFE"><span class="token keyword" style="color:rgb(86, 156, 214)">CREATE</span><span class="token plain"> </span [...]
+<p><strong>Bucket:</strong> The smallest unit of read and write operations. For a primary key table, the bucket to which each piece of data belongs is determined based on the hash value of the primary key of each piece of data. For a log table, the configuration of column hashing can be specified in the with parameter when creating the table; otherwise, it will be randomly scattered.</p>
+<h4 class="anchor anchorWithStickyNavbar_LWe7" id="log-table">Log Table<a href="https://fluss.apache.org/blog/taobao-practice/#log-table" class="hash-link" aria-label="Direct link to Log Table" title="Direct link to Log Table"></a></h4>
+<p>The log table is a commonly used table in Fluss, which writes data in the order of writing, only supports insert operations, and does not support update/delete operations, similar to MQ systems such as Kafka and TT. For the log tables, currently most of the data will be uploaded to a remote location, and only a portion of the data will be stored locally. For example, a log table has 128 buckets, only 128 * 2 (number of segments retained locally) * 1 (size of one segment) * 3 (number o [...]
+<div class="language-SQL language-sql codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#9CDCFE;--prism-background-color:#1E1E1E"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-sql codeBlock_bY9V thin-scrollbar" style="color:#9CDCFE;background-color:#1E1E1E"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#9CDCFE"><span class="token keyword" style="color:rgb(86, 156, 214)">CREATE</span><span class="token plain"> </span [...]
+<p>In Fluss, the log table is stored in Apache Arrow columnar format by default. This format stores data column by column rather than row by row, thereby enabling <strong>column pruning</strong>. This ensures that only the required columns are consumed during real-time consumption, thereby reducing IO overhead, improving performance, and reducing resource usage.</p>
+<h4 class="anchor anchorWithStickyNavbar_LWe7" id="primarykey-table">PrimaryKey Table<a href="https://fluss.apache.org/blog/taobao-practice/#primarykey-table" class="hash-link" aria-label="Direct link to PrimaryKey Table" title="Direct link to PrimaryKey Table"></a></h4>
+<p>Compared to the log table, the primary key table supports insert, update, and delete operations, and different merge methods are implemented by specifying the Merge Engine. It should be noted that <code>bucket.key</code> and <code>partitioned.key</code> need to be subsets of <code>primary.key</code>, and if this KV table is used for DeltaJoin, <code>bucket.key</code> needs to be a prefix of <code>primary.key</code>. The table creation statement is as follows:</p>
+<div class="language-SQL language-sql codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#9CDCFE;--prism-background-color:#1E1E1E"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-sql codeBlock_bY9V thin-scrollbar" style="color:#9CDCFE;background-color:#1E1E1E"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#9CDCFE"><span class="token keyword" style="color:rgb(86, 156, 214)">CREATE</span><span class="token plain"> </span [...]
+<p>Among them, merge-engine supports versioned and first_row; after using versioned, it is necessary to limit the ver-column for sorting, currently only supporting types such as INT, BIGINT, and TIMESTAMP, and not supporting STRING; after using first_row, it only supports retaining the first record of each primary key and does not support sorting by column.</p>
+<h3 class="anchor anchorWithStickyNavbar_LWe7" id="core-functions">Core Functions<a href="https://fluss.apache.org/blog/taobao-practice/#core-functions" class="hash-link" aria-label="Direct link to Core Functions" title="Direct link to Core Functions"></a></h3>
+<h4 class="anchor anchorWithStickyNavbar_LWe7" id="tailorable-columnar-storage">Tailorable Columnar Storage<a href="https://fluss.apache.org/blog/taobao-practice/#tailorable-columnar-storage" class="hash-link" aria-label="Direct link to Tailorable Columnar Storage" title="Direct link to Tailorable Columnar Storage"></a></h4>
+<p>Fluss is a column-based streaming storage, with its underlying file storage adopting the Apache Arrow IPC streaming format. This enables Fluss to achieve efficient column pruning while maintaining millisecond-level streaming read and write capabilities.</p>
+<p>A key advantage of Fluss is that column pruning is performed at the server level, and <strong>only the necessary columns are transferred to the Client</strong>. This architecture not only improves performance but also reduces network costs and resource consumption.</p>
+<p><img decoding="async" loading="lazy" src="https://fluss.apache.org/assets/images/comparison_of_row_and_column_storage_consumption-f4d5fcfb658e670c290ab2be2e504718.png" width="904" height="238" class="img_ev3q"></p>
+<h4 class="anchor anchorWithStickyNavbar_LWe7" id="fluss-key-value-storage-architecture-and-benefits">Fluss Key-Value Storage Architecture and Benefits<a href="https://fluss.apache.org/blog/taobao-practice/#fluss-key-value-storage-architecture-and-benefits" class="hash-link" aria-label="Direct link to Fluss Key-Value Storage Architecture and Benefits" title="Direct link to Fluss Key-Value Storage Architecture and Benefits"></a></h4>
+<p>Fluss’s <strong>Key-Value (KV) storage engine</strong> is built atop a high-performance <strong>log-structured table</strong>, where a KV index is constructed directly over the log stream. This index leverages an <strong>LSM-tree (Log-Structured Merge Tree)</strong> design, enabling high-throughput real-time updates and partial record modifications—making it particularly well-suited for building and maintaining wide tables at scale.</p>
+<p>One of the standout advantages of this architecture is that the <strong>changelog</strong> produced by the KV store is <strong>natively consumable by Apache Flink</strong>. Unlike traditional message queues or log-based systems that require expensive post-processing and deduplication, Fluss’s integration avoids these overheads entirely. This results in <strong>significant reductions in compute cost</strong>, <strong>latency</strong>, and <strong>complexity</strong> across the data pip [...]
+<p>Fluss’s built-in KV index supports <strong>low-latency primary key lookups</strong>, making it ideal for operational queries, streaming joins, and dimension table enrichment. Beyond real-time ingestion and processing, Fluss also supports <strong>ad-hoc data exploration</strong>, with efficient execution of queries involving operations like <code>LIMIT</code> and <code>COUNT</code>. This allows users to <strong>debug</strong> and <strong>inspect live data</strong> within Fluss quickly [...]
+<p><img decoding="async" loading="lazy" src="https://fluss.apache.org/assets/images/fluss_kv_store_point_query-c1e70c05f23eeded2188aaa233d74efa.png" width="904" height="376" class="img_ev3q"></p>
+<h4 class="anchor anchorWithStickyNavbar_LWe7" id="dual-stream-join--delta-join">Dual-Stream Join → Delta Join<a href="https://fluss.apache.org/blog/taobao-practice/#dual-stream-join--delta-join" class="hash-link" aria-label="Direct link to Dual-Stream Join → Delta Join" title="Direct link to Dual-Stream Join → Delta Join"></a></h4>
+<p>In Flink, Dual-Stream Join is a very fundamental function, often used to build wide tables. However, it is also a function that often gives developers headaches. This is because Dual-Stream Join needs to maintain the full amount of upstream data in State, which results in its state usually being very large. This brings about many problems, including high costs, unstable jobs, checkpoint timeouts, slow restart recovery, and so on.</p>
+<p>Fluss has developed a brand-new Flink join operator implementation called Delta Join, which fully leverages Fluss's streaming read and Prefix Lookup capabilities. Delta Join can be simply understood as "<strong>dual-sided driven dimension table join</strong>". When data arrives on the left side, it performs a point query on the right table based on the Join Key; when data arrives on the right side, it performs a point query on the left table based on the Join Key. Throughout the proce [...]
+<p><img decoding="async" loading="lazy" src="https://fluss.apache.org/assets/images/dual_stream_join2delta_join-5082dd8b7403c88c6e19e6cbeefca6ee.png" width="904" height="152" class="img_ev3q"></p>
+<h4 class="anchor anchorWithStickyNavbar_LWe7" id="lake-stream-integration">Lake-Stream Integration<a href="https://fluss.apache.org/blog/taobao-practice/#lake-stream-integration" class="hash-link" aria-label="Direct link to Lake-Stream Integration" title="Direct link to Lake-Stream Integration"></a></h4>
+<p>In the Kappa architecture, due to differences in production pipelines, data is stored separately in streams and lakes, resulting in cost waste. At the same time, additional data services need to be defined to unify data consumption. The goal of lake-stream integration is to enable <strong>Lakehouse data</strong>" and <strong>streaming data</strong> to be stored, managed, and consumed as a unified whole, thereby avoiding data redundancy and metadata inconsistency issues.</p>
+<p><img decoding="async" loading="lazy" src="https://fluss.apache.org/assets/images/lake_stream_integration-8ba3bec3161e76abfcdf7c82f2392bc1.png" width="904" height="386" class="img_ev3q"></p>
+<p>Fluss introduces <strong>Union Reads</strong> to fully support the unified data access layer required by <strong>Kappa architecture</strong> principles. This functionality enables seamless access to both real-time streaming data and historical batch data through a consistent abstraction, ensuring a <strong>fully managed, end-to-end unified data service</strong>.</p>
+<p>To maintain alignment between streaming and lakehouse storage, Fluss operates a <strong>built-in Tiering Service</strong>. This service automatically transforms raw Fluss data into a lake-friendly format (e.g., columnar files), while <strong>preserving metadata consistency between stream and lake</strong>. This tight integration eliminates the need for external tooling to reconcile stream processing with downstream analytics systems.</p>
+<p>Fluss also introduces <strong>partition and bucket alignment mechanisms</strong>, which ensure that data layout remains consistent across streaming and lakehouse layers. These alignment strategies allow for <strong>direct conversion of Arrow files to Parquet</strong> without <strong>triggering network shuffling or repartitioning</strong>, significantly reducing I/O overhead and improving performance across the data pipeline.</p>
+<p>Together, these capabilities enable Fluss to function as a <strong>next-generation streaming storage layer</strong>, bridging the gap between low-latency stream processing and scalable lakehouse analytics—while optimizing cost, consistency, and operational simplicity.</p>
+<h2 class="anchor anchorWithStickyNavbar_LWe7" id="architecture-evolution-and-capability-implementation">Architecture Evolution and Capability Implementation<a href="https://fluss.apache.org/blog/taobao-practice/#architecture-evolution-and-capability-implementation" class="hash-link" aria-label="Direct link to Architecture Evolution and Capability Implementation" title="Direct link to Architecture Evolution and Capability Implementation"></a></h2>
+<h3 class="anchor anchorWithStickyNavbar_LWe7" id="architecture-evolution">Architecture Evolution<a href="https://fluss.apache.org/blog/taobao-practice/#architecture-evolution" class="hash-link" aria-label="Direct link to Architecture Evolution" title="Direct link to Architecture Evolution"></a></h3>
+<p>Fluss innovatively integrates columnar storage format and real-time update capabilities into stream storage and deeply integrates with Flink. Based on Fluss's core capabilities, we further enhance the real-time architecture, building a high-throughput, low-latency, and low-cost lakehouse through Fluss.</p>
+<p>The following takes the typical upgrade scenario of the Taobao as an example to introduce the implementation practice of Fluss.</p>
+<h4 class="anchor anchorWithStickyNavbar_LWe7" id="evolution-of-regular-jobs">Evolution of Regular Jobs<a href="https://fluss.apache.org/blog/taobao-practice/#evolution-of-regular-jobs" class="hash-link" aria-label="Direct link to Evolution of Regular Jobs" title="Direct link to Evolution of Regular Jobs"></a></h4>
+<p><img decoding="async" loading="lazy" src="https://fluss.apache.org/assets/images/regular_jobs_evolution-03d7f2ae3f29d7190bf343b71e1f995d.png" width="904" height="136" class="img_ev3q"></p>
+<p>The above is the architecture before and after the job upgrade. For routine jobs such as <code>Source -> ETL cleaning -> Sink</code>, since the message queue is row-based storage, when consuming, Flink first loads the entire row of data into memory and then filters the required columns, resulting in a significant waste of Source IO.</p>
+<p>After upgrading to Fluss, due to the columnar storage at the bottom of Fluss, column pruning in Fluss is performed at the server level, which means that the <strong>data sent to the client has already been pruned</strong>, thus saving a large amount of network costs.</p>
+<h4 class="anchor anchorWithStickyNavbar_LWe7" id="evolution-of-sorting-jobs">Evolution of Sorting Jobs<a href="https://fluss.apache.org/blog/taobao-practice/#evolution-of-sorting-jobs" class="hash-link" aria-label="Direct link to Evolution of Sorting Jobs" title="Direct link to Evolution of Sorting Jobs"></a></h4>
+<p><img decoding="async" loading="lazy" src="https://fluss.apache.org/assets/images/sorting_jobs_evolution-840cd946cecc1efed58ce5a0f7ab8dfa.png" width="904" height="246" class="img_ev3q"></p>
+<p>In Flink, the implementation of sorting relies on Flink explicitly computing and using State to store the intermediate state of data. This model incurs significant business overhead and extremely low business reusability. The introduction of Fluss pushes this computation and storage down to the Sink side, and in conjunction with the Fluss Merge Engine, implements different deduplication methods for KV tables. Currently, it supports <strong>FirstRow Merge Engine</strong> (the first row [...]
+<h4 class="anchor anchorWithStickyNavbar_LWe7" id="evolution-of-dual-stream-join-jobs">Evolution of Dual-Stream Join Jobs<a href="https://fluss.apache.org/blog/taobao-practice/#evolution-of-dual-stream-join-jobs" class="hash-link" aria-label="Direct link to Evolution of Dual-Stream Join Jobs" title="Direct link to Evolution of Dual-Stream Join Jobs"></a></h4>
+<p><img decoding="async" loading="lazy" src="https://fluss.apache.org/assets/images/dual_stream_jobs_evolution-1cbe65429b071d1f1bb6b2497f491599.png" width="904" height="558" class="img_ev3q"></p>
+<p>After the Fluss remodeling, the Dual-Stream Join of the Taobao transaction attributed job has been enhanced with the following upgrade points:</p>
+<ul>
+<li><strong>Column pruning</strong> is truly pre-positioned to Source consumption, avoiding IO consumption of useless columns.</li>
+<li><strong>Introduce Fluss KV table & Merge Engines</strong> to implement data sorting and eliminate the dependency on Flink sorting State.</li>
+<li><strong>Refactor the Dual-Stream Join into FlussDeltaJoin</strong>, using stream reading and index point query, and externalize the Flink Dual-Stream JoinState.</li>
+</ul>
+<p>A comprehensive comparison between traditional Dual-Stream Join and the new Fluss-based architecture reveals the following advantages and disadvantages of the two:</p>
+<table><thead><tr><th>Job Type</th><th>Advantages</th><th>Disadvantages</th></tr></thead><tbody><tr><td>Traditional MQ & Dual-Stream Join</td><td>One job can implement the Join business logic.</td><td>1. Data is consumed row by row, resulting in wasted IO resources for useless columns.2. The Join State of the dual-stream is too large, making job maintenance difficult.3. State Black box, difficult to probe internal state. 4. If the resource plan does not match after modifying the job, [...]
+<h4 class="anchor anchorWithStickyNavbar_LWe7" id="evolution-of-lake-jobs">Evolution of Lake Jobs<a href="https://fluss.apache.org/blog/taobao-practice/#evolution-of-lake-jobs" class="hash-link" aria-label="Direct link to Evolution of Lake Jobs" title="Direct link to Evolution of Lake Jobs"></a></h4>
+<p><img decoding="async" loading="lazy" src="https://fluss.apache.org/assets/images/lake_jobs_evolution-4c8a2cfd7386d4b16ba1b474fa554b3b.png" width="904" height="470" class="img_ev3q"></p>
+<p>Under the Fluss lake-stream integrated architecture, Fluss provides a <strong>fully managed</strong> unified data service. Fluss and Paimon store stream and lake data respectively, output a Catalog to the computing engine (such as Flink), and the data is output externally in the form of a unified table. Consumers can directly access the data in Fluss and lake storage in the form of Union Read.</p>
+<h3 class="anchor anchorWithStickyNavbar_LWe7" id="implementation-of-core-competencies">Implementation of Core Competencies<a href="https://fluss.apache.org/blog/taobao-practice/#implementation-of-core-competencies" class="hash-link" aria-label="Direct link to Implementation of Core Competencies" title="Direct link to Implementation of Core Competencies"></a></h3>
+<h4 class="anchor anchorWithStickyNavbar_LWe7" id="column-pruning-capability">Column Pruning Capability<a href="https://fluss.apache.org/blog/taobao-practice/#column-pruning-capability" class="hash-link" aria-label="Direct link to Column Pruning Capability" title="Direct link to Column Pruning Capability"></a></h4>
+<p>In the job of consuming message queues, consumers typically only consume a portion of the data, but Flink jobs still need to read data from all columns, resulting in significant waste in Flink Source IO. Fundamentally, existing message queues are all row-based storage, and for scenarios that need to process large-scale data, the efficiency of row-based storage format appears insufficient. The underlying storage needs to have powerful Data Skipping capabilities and support features suc [...]
+<p><img decoding="async" loading="lazy" src="https://fluss.apache.org/assets/images/fluss_column_pruning_evolution-d062e069bcd12155c2dd8bdf8c7c226d.png" width="904" height="302" class="img_ev3q"></p>
+<p>In our real-time data warehouse, 70% of jobs only consume partial columns of Source. Taking the Taobao recommendation clicks job as an example, out of the 43 fields in Source, we only need 13. Additional operator resources are required to trim the entire row of data, wasting more than 20% of IO resources. After using Fluss, it directly consumes the required columns, avoiding additional IO waste and reducing the additional resources brought by Flink column pruning operators. To date, m [...]
+<p><img decoding="async" loading="lazy" src="https://fluss.apache.org/assets/images/comparison_of_fluss_and_mq_column_pruning-9b1ea19ec04baad6b5790dfba8fd5ae6.png" width="904" height="334" class="img_ev3q"></p>
+<h4 class="anchor anchorWithStickyNavbar_LWe7" id="real-time-data-profiling">Real-time Data Profiling<a href="https://fluss.apache.org/blog/taobao-practice/#real-time-data-profiling" class="hash-link" aria-label="Direct link to Real-time Data Profiling" title="Direct link to Real-time Data Profiling"></a></h4>
+<p><strong>Lookup Queries</strong></p>
+<p>Whether troubleshooting issues or conducting data exploration, data queries are necessary. However, the message queue only supports sampling queries in the interface and queries of synchronized data in additional storage. In sampling queries, it is not possible to query specified data; only a batch of output can be retrieved for display and inspection. Using the method of synchronizing additional storage, on the other hand, incurs minute-level latency as well as additional storage and [...]
+<p><img decoding="async" loading="lazy" src="https://fluss.apache.org/assets/images/comparison_of_fulss_and_mq_data_profiling-6edbee5cf60680f5a15c8dac1ccb1db5.png" width="904" height="536" class="img_ev3q"></p>
+<p>In Fluss KV Table, a KV index is built, so it can support high-performance primary key point queries, directly probe Fluss data through point query statements, and also support query functions such as LIMIT and COUNT to meet daily Data Profiling requirements. An example is as follows:</p>
+<p><img decoding="async" loading="lazy" src="https://fluss.apache.org/assets/images/fluss_query_example1-7f2a861db777f647bfe3ad322307452d.png" width="904" height="204" class="img_ev3q"></p>
+<p><strong>Flink State Query</strong></p>
+<p>Flink's State mechanism (such as KeyedState or OperatorState) provides efficient state management capabilities, but its internal implementation is a "Black box" to developers. Developers cannot directly query, analyze, or debug the data in State, resulting in a strong coupling between business logic and state management, making it difficult to dynamically adjust or expand. When data anomalies occur, developers can only infer the content in State from the result data, unable to directl [...]
+<p><img decoding="async" loading="lazy" src="https://fluss.apache.org/assets/images/flink_state_evolution-2fc62883cca1013c9dfe5d774a085a5a.png" width="904" height="270" class="img_ev3q"></p>
+<p>We externalize Flink State into Fluss, such as states for duak-stream join, data deduplication, etc. Based on Fluss's KV index, we provide State exploration capabilities, white-box the internal data of State, and efficiently locate issues.</p>
+<p><img decoding="async" loading="lazy" src="https://fluss.apache.org/assets/images/fluss_query_example2-2e75b06cea33441f0183914d6a049103.png" width="904" height="270" class="img_ev3q"></p>
+<h4 class="anchor anchorWithStickyNavbar_LWe7" id="merge-engine--delta-join">Merge Engine & Delta Join<a href="https://fluss.apache.org/blog/taobao-practice/#merge-engine--delta-join" class="hash-link" aria-label="Direct link to Merge Engine & Delta Join" title="Direct link to Merge Engine & Delta Join"></a></h4>
+<p>In the current real-time data warehouse, the transaction attribution task is a job that heavily relies on State, with State <strong>reaching up to 100TB</strong> , which includes operations such as sorting and Dual-Stream Join. After consuming TT data, we first perform data sorting and then conduct a Dual-Stream Join to attribute order data.</p>
+<p><img decoding="async" loading="lazy" src="https://fluss.apache.org/assets/images/transaction_attribution_state_size-c2ef4c0431192100599996d24ff10627.png" width="904" height="178" class="img_ev3q"></p>
+<p>As shown in the figure, in the first attribution logic implementation of the attribution job, the State of the sorting operator is as high as <strong>90TB</strong> , and that of the Dual-Stream Join operator is <strong>10TB</strong> . Large State jobs bring many problems, including high costs, job instability, long CP time, etc.</p>
+<p><strong>Sorting optimization, Merge Engine</strong></p>
+<p><img decoding="async" loading="lazy" src="https://fluss.apache.org/assets/images/fluss_sort_tunning-da4fccacf7bce9e94414c36eebd66e86.png" width="904" height="362" class="img_ev3q"></p>
+<p>In the implementation of the Merge Engine, it mainly relies on Fluss's KV table. The Changelog generated by KV can be read by Flink streams without additional deduplication operations, saving Flink's computing resources and achieving business reuse of data. Through Fluss's KV table, the sorting logic in our jobs is implemented, and there is no longer a need to maintain the state of the sorting operator in the jobs.</p>
+<p><strong>Join Optimization, Dual Sides Driving</strong></p>
+<p><img decoding="async" loading="lazy" src="https://fluss.apache.org/assets/images/comparison_of_dual_stream_join_and_delta_join-08049759413e940eb71f99d45449f52f.png" width="904" height="390" class="img_ev3q"></p>
+<p>The jobs of Delta Join are as described above. The original job, after consuming data, sorts it according to business requirements, performs Dual-Stream Join after sorting, and saves the state for 24 hours. This results in issues such as long CP time, poor job maintainability, and the need to rerun when modifying the job state. In Fluss, data sorting is completed through the Merge Engine of the KV table, and through Delta Join, the job and state are decoupled, eliminating the need to [...]
+<p>We use the transaction attribution job as an example. It should be noted that both sides of DeltaJoin need to be KV tables.</p>
+<div class="language-SQL language-sql codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#9CDCFE;--prism-background-color:#1E1E1E"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-sql codeBlock_bY9V thin-scrollbar" style="color:#9CDCFE;background-color:#1E1E1E"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#9CDCFE"><span class="token comment" style="color:rgb(106, 153, 85)">-- Create left table</span><span class="token [...]
+<p>Some operations are shown in the above code. After migrating from the Dual-Stream Join to Merge Engine & Delta Join, large states were successfully reduced, making the job run more stably and eliminating CP timeouts. Meanwhile, the actual usage of CPU and Memory also decreased.</p>
+<p>In addition to resource reduction and performance improvement, there is also an enhancement in flexibility for our benefits. The state of traditional stream-to-stream connections is tightly coupled with Flink jobs, like an opaque "black box". When the job is modified, it is found that the historical resource plan is incompatible with the current job, and the State can only be rerun from scratch, which is time-consuming and labor-intensive. After using Delta Join, it is equivalent to d [...]
+<p><img decoding="async" loading="lazy" src="https://fluss.apache.org/assets/images/fluss_historical_data_consumption-c36e04f8f69fcfd14eb3370abebf3e96.png" width="904" height="298" class="img_ev3q"></p>
+<p>Meanwhile, Fluss maintains a Tiering Service to synchronize Fluss data to Paimon, with the latest data stored in Fluss and historical data in Paimon. Flink can support Union Read, which combines the data in Fluss and Paimon to achieve second-level freshness analysis.</p>
+<p><img decoding="async" loading="lazy" src="https://fluss.apache.org/assets/images/join_jobs_evolution-db92bbdb4894edfcdb28009b081b687a.png" width="904" height="394" class="img_ev3q"></p>
+<p>In addition, Data Join also addresses the scenario of backtracking data. In the case of Dual-Stream Join, if a job modification causes the Operating Plan verification to fail, only data backfilling can be performed. During the Fluss backtracking process, the Paimon table archived by the unified lake-stream architecture combined with Flink Batch Join can be used to accelerate data backfilling.</p>
+<h4 class="anchor anchorWithStickyNavbar_LWe7" id="lake-stream-evolution">Lake-Stream Evolution<a href="https://fluss.apache.org/blog/taobao-practice/#lake-stream-evolution" class="hash-link" aria-label="Direct link to Lake-Stream Evolution" title="Direct link to Lake-Stream Evolution"></a></h4>
+<p>Fluss provides high compatibility with Data lake warehouses. Through the underlying service, it automatically converts Fluss data into Paimon format data, enabling real-time data to be ingested into the lake with a single click, while ensuring consistent data partitioning and bucketing on both the lake and stream sides.</p>
+<p><img decoding="async" loading="lazy" src="https://fluss.apache.org/assets/images/lake_stream_evolution-1828502586ada6555bb15cd4719ccf5f.png" width="904" height="294" class="img_ev3q"></p>
+<p>After having <strong>lake</strong> and <strong>stream</strong> two levels of data, Fluss has the key characteristic of sharing data. Paimon stores long-period, minute-level latency data; Fluss stores short-period, millisecond-level latency data, and the data of both can be shared with each other.</p>
+<p>When performing Fluss stream reads, Paimon can provide efficient backtracking capabilities as historical data. After backtracking to the current checkpoint, the system will automatically switch to stream storage to continue reading and ensure that no duplicate data is read. In batch query analysis, Fluss stream storage can supplement Paimon with real-time data, thereby enabling analysis with second-level freshness. This feature is called Union Read.</p>
+<h2 class="anchor anchorWithStickyNavbar_LWe7" id="benefits-and-summary">Benefits and Summary<a href="https://fluss.apache.org/blog/taobao-practice/#benefits-and-summary" class="hash-link" aria-label="Direct link to Benefits and Summary" title="Direct link to Benefits and Summary"></a></h2>
+<p>After a period of in-depth research, comprehensive testing, and smooth launch of Fluss, we successfully completed the evolution of the technical architecture based on Fluss as a solution. Among them, we conducted comprehensive tests on core capabilities such as Fluss column pruning and Delta Join to ensure the stability and performance of the solution met the standards.</p>
+<h3 class="anchor anchorWithStickyNavbar_LWe7" id="performance-test">Performance Test<a href="https://fluss.apache.org/blog/taobao-practice/#performance-test" class="hash-link" aria-label="Direct link to Performance Test" title="Direct link to Performance Test"></a></h3>
+<h4 class="anchor anchorWithStickyNavbar_LWe7" id="read-and-write-performance">Read and Write Performance<a href="https://fluss.apache.org/blog/taobao-practice/#read-and-write-performance" class="hash-link" aria-label="Direct link to Read and Write Performance" title="Direct link to Read and Write Performance"></a></h4>
+<p>We tested the read-write and column pruning capabilities of Fluss. Among them, in terms of read-write performance, we conducted tests with the same traffic. While maintaining the input <strong>RPS at 800 w/s</strong> and the output <strong>RPS at 44 w/s</strong> , we compared the actual CPU and Memory usage of Flink jobs. The details are as follows:</p>
+<p><img decoding="async" loading="lazy" src="https://fluss.apache.org/assets/images/performance_write-27292f1029f6a85e421735a04a2b4a75.png" width="698" height="402" class="img_ev3q"></p>
+<p><img decoding="async" loading="lazy" src="https://fluss.apache.org/assets/images/performance_read-f565578d7f2a84163de5e0663147c105.png" width="698" height="402" class="img_ev3q"></p>
+<h4 class="anchor anchorWithStickyNavbar_LWe7" id="column-pruning-performance">Column Pruning Performance<a href="https://fluss.apache.org/blog/taobao-practice/#column-pruning-performance" class="hash-link" aria-label="Direct link to Column Pruning Performance" title="Direct link to Column Pruning Performance"></a></h4>
+<p>Regarding column pruning capabilities, we also tested TT, Fluss, and different numbers of columns in Fluss to explore the consumption of CPU, Memory, and IO. With the input <strong>RPS maintained at 25 w/s</strong>, the specific test results are as follows:</p>
+<p><img decoding="async" loading="lazy" src="https://fluss.apache.org/assets/images/performance_column_pruning2-9187374565daf3d3a14757c8444a7371.png" width="698" height="402" class="img_ev3q"></p>
+<p><img decoding="async" loading="lazy" src="https://fluss.apache.org/assets/images/performance_column_pruning1-e4c22dae4b6104713ce26f5a370b36a8.png" width="698" height="402" class="img_ev3q"></p>
+<p>At this point, we will find a problem: as the number of columns decreases (a total of 13 columns out of 43 columns are consumed), IO does not show a linear decrease. After verification, the storage of each column in the source is not evenly distributed, and the storage of some required columns <strong>accounts for 72%</strong> . It can be seen that the input IO traffic <strong>decreases by 20%</strong> , which is consistent with the expected proportion of the storage of the read columns.</p>
+<h4 class="anchor anchorWithStickyNavbar_LWe7" id="delta-join-performance">Delta Join Performance<a href="https://fluss.apache.org/blog/taobao-practice/#delta-join-performance" class="hash-link" aria-label="Direct link to Delta Join Performance" title="Direct link to Delta Join Performance"></a></h4>
+<p>We also tested and compared the resources and performance of the above <strong>Dual-Stream Join and Fluss Delta Join</strong> , and under the condition of maintaining the <strong>input RPS of the left table at 68,000/s</strong> and the <strong>input RPS of the right table at 1,700/s</strong> , all jobs ran for 24 hours.</p>
+<p><img decoding="async" loading="lazy" src="https://fluss.apache.org/assets/images/performance_delta1-76e0c23013cbefdb8bf9f76980497d38.png" width="904" height="246" class="img_ev3q"></p>
+<p><img decoding="async" loading="lazy" src="https://fluss.apache.org/assets/images/performance_delta2-db0bb3f31808d421f8e516221d44c29d.png" width="904" height="246" class="img_ev3q"></p>
+<p>After actual testing, after migrating from the Dual-Stream Join to Merge Engine + Delta Join, it successfully <strong>reduced 95TB</strong> of large state, making the job run more stably and significantly shortening the CP time. Meanwhile, the actual usage of CPU and Memory also <strong>decreased by more than 80%</strong> .</p>
+<h4 class="anchor anchorWithStickyNavbar_LWe7" id="data-backfilling-performance">Data Backfilling Performance<a href="https://fluss.apache.org/blog/taobao-practice/#data-backfilling-performance" class="hash-link" aria-label="Direct link to Data Backfilling Performance" title="Direct link to Data Backfilling Performance"></a></h4>
+<p>Since Delta Join <strong>does not need to maintain state</strong> , it can use batch mode <strong>Batch Join</strong> to catch up. After catching up, it switches back to stream mode Delta Join. During this process, a small amount of data will be reprocessed, and the end-to-end consistency is ensured through the idempotence update mechanism of the result table. We <strong>performed a test comparison on the data catch-up of the above</strong> Dual-Stream Join and Batch Join <strong>for [...]
+<p><img decoding="async" loading="lazy" src="https://fluss.apache.org/assets/images/performance_data_backtracking1-25192a04f93b0cc734d0dae30744a7fc.png" width="698" height="402" class="img_ev3q"></p>
+<p><img decoding="async" loading="lazy" src="https://fluss.apache.org/assets/images/performance_data_backtracking2-74113a436a7f89f34f7405490b5bffc9.png" width="698" height="402" class="img_ev3q"></p>
+<p>After actual testing, the batch mode Batch Join backtracking for one day (24H) takes <strong>70%+ less time</strong> compared to the Dual-Stream Join backtracking.</p>
+<h3 class="anchor anchorWithStickyNavbar_LWe7" id="summary">Summary<a href="https://fluss.apache.org/blog/taobao-practice/#summary" class="hash-link" aria-label="Direct link to Summary" title="Direct link to Summary"></a></h3>
+<p>Fluss has core features such as columnar pruning, streaming updates, real-time point queries, and lake-stream integration. At the same time, it innovatively integrates columnar storage format and real-time update capabilities into stream storage, and deeply integrates with Flink and Paimon to build a lake warehouse with high throughput, low latency, and low cost. Just as the original intention of Fluss: <strong>Real-time stream storage for analytics.</strong></p>
+<p>After nearly three months of exploration, Fluss has been implemented in <strong>Taobao's core search and recommendation scenarios</strong> , built a unified lake-stream A/B data warehouse, and continuously served internal business through Taobao's A/B Experiment Platform. In practical applications, the following results have been achieved:</p>
+<ul>
+<li>
+<p><strong>Scenarios are widely implemented:</strong> covering core Taobao business such as search and recommendation, and successfully passing the test of Taobao's 618 Grand Promotion <strong>,</strong> with peak traffic reaching tens of millions and average latency <strong>within 1 second</strong> .</p>
+</li>
+<li>
+<p><strong>Column Pruning Resource Optimization</strong> : The column pruning feature has been implemented in all Fluss real-time jobs. When the consumption of columnar storage accounts for 75% of the source data, the average IO <strong>is reduced by 25%</strong> , and the average job resource consumption <strong>is reduced by 30%</strong> .</p>
+</li>
+<li>
+<p><strong>Big State job optimization:</strong> Taking transaction attribution job as an example, the Delta Join & Merge Engine is applied to reconstruct the first and last attribution. State is externally implemented, and the actual usage of CPU and Memory is <strong>reduced by 80% +</strong> . The state of Flink is <strong>decoupled</strong> from the job, and the <strong>100TB +</strong> big state is successfully reduced, making the job more stable.</p>
+</li>
+<li>
+<p><strong>Data Profiling:</strong> Implemented capabilities including message queue profiling and State profiling, supports query operators such as LIMIT and COUNT, achieved white-boxing of State for sorting and Dual-Stream Join, with higher flexibility and more efficient problem location.</p>
+</li>
+</ul>
+<h2 class="anchor anchorWithStickyNavbar_LWe7" id="planning">Planning<a href="https://fluss.apache.org/blog/taobao-practice/#planning" class="hash-link" aria-label="Direct link to Planning" title="Direct link to Planning"></a></h2>
+<p><img decoding="async" loading="lazy" src="https://fluss.apache.org/assets/images/future_plans-1828502586ada6555bb15cd4719ccf5f.png" width="904" height="294" class="img_ev3q"></p>
+<p>In the upcoming work, we will develop a new generation of lakehouse data architecture and continue to explore in Data & AI scenarios.</p>
+<ul>
+<li>
+<p><strong>Scenario Inclusiveness:</strong> In the second-level data warehouse, switch the whole-pipeline and all scenarios of the consumption message queue to the Fluss pipeline. Based on the Fluss lake-stream capabilities, provide corresponding Paimon minute-level data.</p>
+</li>
+<li>
+<p><strong>AI Empowerment:</strong> Attempt to implement scenarios of MultiModal Machine Learning data pipelines, Agents, and model pre-training, and add AI-enhanced analytics.</p>
+</li>
+<li>
+<p><strong>Capability Exploration:</strong> Explore more Fluss capabilities and empower business operations, optimizing more jobs through Fluss Aggregate Merge Engine and Partial Update capabilities.</p>
+</li>
+</ul>
+<h2 class="anchor anchorWithStickyNavbar_LWe7" id="references">References<a href="https://fluss.apache.org/blog/taobao-practice/#references" class="hash-link" aria-label="Direct link to References" title="Direct link to References"></a></h2>
+<p>[1] <a href="https://fluss.apache.org/" target="_blank" rel="noopener noreferrer">Fluss Official Documentation</a></p>
+<p>[2] <a href="https://mp.weixin.qq.com/s?__biz=MzU3Mzg4OTMyNQ==&mid=2247512207&idx=1&sn=e25320a020d7b20e25be8fd614e9f46b&chksm=fd383ecdca4fb7dbf9a37e9c3840699ba8b1b2c57868db028f995c3bc7bcf6a0340e396d87c4&scene=178&cur_album_id=3764887437743669257&search_click_id=#rd" target="_blank" rel="noopener noreferrer">Fluss: Next-Generation Stream Storage Designed for Real-Time Analysis</a></p>]]></content:encoded>
+ </item>
<item>
<title><![CDATA[From Stream to Lake: Hands-On with Fluss Tiering into Paimon on Minio]]></title>
<link>https://fluss.apache.org/blog/hands-on-fluss-lakehouse/</link>
diff --git a/blog/tags/index.html b/blog/tags/index.html
index 38ecaff4..8c9e2613 100644
--- a/blog/tags/index.html
+++ b/blog/tags/index.html
@@ -15,14 +15,14 @@
<link rel="icon" href="/img/logo.svg">
<link rel="manifest" href="/manifest.json">
<meta name="theme-color" content="#0071e3"><link rel="stylesheet" href="/assets/css/styles.53ed9f81.css">
-<script src="/assets/js/runtime~main.87feb3cc.js" defer="defer"></script>
-<script src="/assets/js/main.d75df03d.js" defer="defer"></script>
+<script src="/assets/js/runtime~main.93b61691.js" defer="defer"></script>
+<script src="/assets/js/main.9636bb89.js" defer="defer"></script>
</head>
<body class="navigation-with-keyboard">
<svg xmlns="http://www.w3.org/2000/svg" style="display: none;"><defs>
<symbol id="theme-svg-external-link" viewBox="0 0 24 24"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"/></symbol>
</defs></svg>
-<script>!function(){var t="light";var e=function(){try{return new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}}()||function(){try{return window.localStorage.getItem("theme")}catch(t){}}();document.documentElement.setAttribute("data-theme",e||t),document.documentElement.setAttribute("data-theme-choice",e||t)}(),function(){try{const c=new URLSearchParams(window.location.search).entries();for(var[t,e]of c)if(t.startsWith("docusaurus-data-")){var a=t.replace("do [...]
+<script>!function(){var t="light";var e=function(){try{return new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}}()||function(){try{return window.localStorage.getItem("theme")}catch(t){}}();document.documentElement.setAttribute("data-theme",e||t),document.documentElement.setAttribute("data-theme-choice",e||t)}(),function(){try{const c=new URLSearchParams(window.location.search).entries();for(var[t,e]of c)if(t.startsWith("docusaurus-data-")){var a=t.replace("do [...]
<p>Copyright © 2025 The Apache Software Foundation, Licensed under the Apache License, Version 2.0.</p>
<p>Apache, the names of Apache projects, and the feather logo are either registered trademarks or trademarks of the Apache Software Foundation in the United States and/or other countries. All other marks mentioned may be trademarks or registered trademarks of their respective owners.</p></div></div></div></footer></div>
</body>
diff --git a/blog/tags/releases/index.html b/blog/tags/releases/index.html
index 76ce9383..5bf64eea 100644
--- a/blog/tags/releases/index.html
+++ b/blog/tags/releases/index.html
@@ -15,14 +15,14 @@
<link rel="icon" href="/img/logo.svg">
<link rel="manifest" href="/manifest.json">
<meta name="theme-color" content="#0071e3"><link rel="stylesheet" href="/assets/css/styles.53ed9f81.css">
-<script src="/assets/js/runtime~main.87feb3cc.js" defer="defer"></script>
-<script src="/assets/js/main.d75df03d.js" defer="defer"></script>
+<script src="/assets/js/runtime~main.93b61691.js" defer="defer"></script>
+<script src="/assets/js/main.9636bb89.js" defer="defer"></script>
</head>
<body class="navigation-with-keyboard">
<svg xmlns="http://www.w3.org/2000/svg" style="display: none;"><defs>
<symbol id="theme-svg-external-link" viewBox="0 0 24 24"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"/></symbol>
</defs></svg>
-<script>!function(){var t="light";var e=function(){try{return new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}}()||function(){try{return window.localStorage.getItem("theme")}catch(t){}}();document.documentElement.setAttribute("data-theme",e||t),document.documentElement.setAttribute("data-theme-choice",e||t)}(),function(){try{const c=new URLSearchParams(window.location.search).entries();for(var[t,e]of c)if(t.startsWith("docusaurus-data-")){var a=t.replace("do [...]
+<script>!function(){var t="light";var e=function(){try{return new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}}()||function(){try{return window.localStorage.getItem("theme")}catch(t){}}();document.documentElement.setAttribute("data-theme",e||t),document.documentElement.setAttribute("data-theme-choice",e||t)}(),function(){try{const c=new URLSearchParams(window.location.search).entries();for(var[t,e]of c)if(t.startsWith("docusaurus-data-")){var a=t.replace("do [...]
<p>🌊 We are excited to announce the official release of <strong>Fluss 0.7</strong>!</p>
<p>This version has undergone extensive improvements in <strong>stability</strong>, <strong>architecture</strong>, <strong>performance optimization</strong>, and <strong>security</strong>, further enhancing its readiness for <strong>production environments</strong>. Over the past three months, we have completed more than <strong>250 commits</strong>, making this release a significant milestone toward becoming a mature, production-grade streaming storage platform.</p></div><footer class=" [...]
three months of intensive development, bringing together the expertise and efforts of 45 contributors worldwide,
diff --git a/blog/taobao-practice/index.html b/blog/taobao-practice/index.html
new file mode 100644
index 00000000..7a9318f7
--- /dev/null
+++ b/blog/taobao-practice/index.html
@@ -0,0 +1,272 @@
+<!doctype html>
+<html lang="en" dir="ltr" class="blog-wrapper blog-post-page plugin-blog plugin-id-default" data-has-hydrated="false">
+<head>
+<meta charset="UTF-8">
+<meta name="generator" content="Docusaurus v3.8.1">
+<title data-rh="true">How Taobao uses Apache Fluss (Incubating) for Real-Time Processing in Search and RecSys | Apache Fluss™ (Incubating)</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:image" content="https://fluss.apache.org/img/logo/png/colored_logo.png"><meta data-rh="true" name="twitter:image" content="https://fluss.apache.org/img/logo/pn [...]
+<link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache Fluss™ (Incubating) Atom Feed">
+
+
+
+
+<link rel="search" type="application/opensearchdescription+xml" title="Apache Fluss™ (Incubating)" href="/opensearch.xml">
+
+
+<link rel="icon" href="/img/logo.svg">
+<link rel="manifest" href="/manifest.json">
+<meta name="theme-color" content="#0071e3"><link rel="stylesheet" href="/assets/css/styles.53ed9f81.css">
+<script src="/assets/js/runtime~main.93b61691.js" defer="defer"></script>
+<script src="/assets/js/main.9636bb89.js" defer="defer"></script>
+</head>
+<body class="navigation-with-keyboard">
+<svg xmlns="http://www.w3.org/2000/svg" style="display: none;"><defs>
+<symbol id="theme-svg-external-link" viewBox="0 0 24 24"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"/></symbol>
+</defs></svg>
+<script>!function(){var t="light";var e=function(){try{return new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}}()||function(){try{return window.localStorage.getItem("theme")}catch(t){}}();document.documentElement.setAttribute("data-theme",e||t),document.documentElement.setAttribute("data-theme-choice",e||t)}(),function(){try{const c=new URLSearchParams(window.location.search).entries();for(var[t,e]of c)if(t.startsWith("docusaurus-data-")){var a=t.replace("do [...]
+<h3 class="anchor anchorWithStickyNavbar_LWe7" id="introduction">Introduction<a href="#introduction" class="hash-link" aria-label="Direct link to Introduction" title="Direct link to Introduction"></a></h3>
+<p>The Data Development Team of Taobao has built a new <strong>generation of real-time data warehouse</strong> based on Apache Fluss.
+Fluss solves the problems of redundant data transfer, difficulties in data profiling, and challenges in large scale stateful workload operations and maintenance.
+By combining columnar storage with real-time update capabilities, Fluss supports column pruning, key-value point lookups, Delta Join, and seamless lake–stream integration, thereby <strong>cutting I/O and compute overhead</strong> while enhancing job stability and profiling efficiency.</p>
+<p>Already deployed on Taobao’s A/B-testing platform for critical services such as search and recommendation, the system proved its resilience during the 618 Grand Promotion:
+<strong>it handled tens of millions of requests with sub-second latency</strong>, lowered resource usage by <strong>30%</strong>, and removed more than 100 TB from state storage.
+Looking ahead, the team will continue to extend Fluss within a <strong>Lakehouse architecture</strong> and broaden its use across <strong>AI-driven</strong> workloads.</p>
+<h3 class="anchor anchorWithStickyNavbar_LWe7" id="business-background">Business Background<a href="#business-background" class="hash-link" aria-label="Direct link to Business Background" title="Direct link to Business Background"></a></h3>
+<p><img decoding="async" loading="lazy" src="/assets/images/ab_experiment_platform_arch-0b365a2892747d8d709efae2a20eb810.png" width="904" height="346" class="img_ev3q"></p>
+<p>Taobao A/B testing Analysis Platform, mainly focuses on A/B data of Taobao's C-end algorithms, aiming to promote scientific decision-making activities through the construction of generalized A/B data capabilities.
+Since its inception in <strong>2015</strong> , it has continuously and effectively supported the analysis of Taobao's algorithm A/B data for <strong>10 years</strong> .
+Currently, it is applied to <strong>over 100</strong> A/B testing scenarios across various business areas, including <strong>search, recommendation, content,</strong> <strong>user growth</strong>, and <strong>marketing</strong>.</p>
+<p><img decoding="async" loading="lazy" src="/assets/images/realtime_data_warehouse_arch-10cb25ecf32a9a576b09f081953aeb6d.png" width="904" height="364" class="img_ev3q"></p>
+<p>Taobao provides the following capabilities:</p>
+<ul>
+<li>
+<p><strong>A/B Data Public Data Warehouse:</strong> Serves various data applications of downstream algorithms, including: <code>online traffic splitting</code>, <code>distribution alignment</code>, <code>general features</code>, <code>scenario labels</code>, and other application scenarios.</p>
+</li>
+<li>
+<p><strong>Scientific Experiment Evaluation:</strong> Implement mature scientific evaluation solutions in the industry, conduct long-term tracking of the effects of A/B testing, and help businesses obtain real and reliable experimental evaluation results.</p>
+</li>
+<li>
+<p><strong>Multidimensional Ad Hoc OLAP Self-Service Analysis:</strong> Through mature data solutions, it supports multidimensional and ad hoc OLAP queries, serving data effectiveness analysis across all clients, businesses, and scenarios.</p>
+</li>
+</ul>
+<h2 class="anchor anchorWithStickyNavbar_LWe7" id="business-pain-points">Business Pain Points<a href="#business-pain-points" class="hash-link" aria-label="Direct link to Business Pain Points" title="Direct link to Business Pain Points"></a></h2>
+<p>Currently, the real-time data warehouse of Taobao is based on technology stacks such as Flink, message queue, OLAP engine, etc., where the message queue is TT (Kafka-like architecture MQ) within Taobao, and the OLAP engine is Alibaba Cloud Hologres.</p>
+<p><img decoding="async" loading="lazy" src="/assets/images/origin_data_pipeline-eebb499bcdba0e096585e5febad7ad99.png" width="904" height="328" class="img_ev3q"></p>
+<p>After ingesting access log data from the message queue, we execute business logic within Apache Flink.
+However, as SQL complexity increases - particularly in the presence of <code>ORDER BY</code> and <code>JOIN</code> operations - the resulting retraction streams significantly expand.</p>
+<p>This leads to a substantial increase in Flink state size, which in turn drives up the consumption of compute resources.
+Such scenarios introduce notable challenges in both job development and ongoing maintenance. Additionally, the development lifecycle for these real-time jobs tends to be considerably longer compared to equivalent offline solutions.</p>
+<p>Currently, the message queue still has some limitations, and the main problems encountered are as follows:</p>
+<h3 class="anchor anchorWithStickyNavbar_LWe7" id="redundant-data-transfer">Redundant Data Transfer<a href="#redundant-data-transfer" class="hash-link" aria-label="Direct link to Redundant Data Transfer" title="Direct link to Redundant Data Transfer"></a></h3>
+<p>In traditional data warehouse environments, <strong>write-once</strong>, <strong>read-many</strong> is the prevailing access pattern, where each downstream consumer typically reads only a subset of the available data.
+For example, in the exposure job for Taobao, the message queue provides 44 fields per record, yet the job only requires 13 of them.
+However, due to the row-based nature of the message queue storage format, all 44 fields must still be read and transmitted during consumption.</p>
+<p>This results in significant <strong>I/O inefficiency; approximately 70% of the network throughput</strong> is wasted on reading unused columns.
+Consumers bear the full cost of data transfer, even though only a fraction of the data is relevant to their processing logic.
+This contributes to <strong>excessive resource utilization</strong>, especially at scale.</p>
+<p>Attempts at Optimization with Flink
+To mitigate this, we explored column pruning within <strong>Apache Flink</strong> by explicitly defining the schema in the Source and introducing a UDF to drop unused columns early in the pipeline.
+While this approach aimed to reduce data ingestion costs, its <strong>practical impact was minimal</strong>.
+The performance gains were negligible, and the added complexity in pipeline design and maintenance introduced new operational challenges.</p>
+<p><img decoding="async" loading="lazy" src="/assets/images/column_pruning_operator-9f8fb7ad0280354e1561b63a6615b357.png" width="754" height="478" class="img_ev3q"></p>
+<h3 class="anchor anchorWithStickyNavbar_LWe7" id="challenges-in-data-profiling--debugging">Challenges In Data Profiling & Debugging<a href="#challenges-in-data-profiling--debugging" class="hash-link" aria-label="Direct link to Challenges In Data Profiling & Debugging" title="Direct link to Challenges In Data Profiling & Debugging"></a></h3>
+<h4 class="anchor anchorWithStickyNavbar_LWe7" id="message-queues-are-not-designed-for-random-access-or-key-value-lookups">Message queues are not designed for random access or key-value lookups<a href="#message-queues-are-not-designed-for-random-access-or-key-value-lookups" class="hash-link" aria-label="Direct link to Message queues are not designed for random access or key-value lookups" title="Direct link to Message queues are not designed for random access or key-value lookups"></a></h4>
+<p>In modern data warehouse architecture, <strong>data profiling is a foundational capability</strong>, essential for tasks such as issue diagnosis, anomaly detection, and case-specific troubleshooting. To meet these needs, two distinct data profiling approaches for message queues have been evaluated in production environments.</p>
+<p>While each method offers unique benefits, <strong>both exhibit trade-offs and limitations</strong> that prevent them from fully addressing the breadth of business requirements. Neither approach provides a comprehensive solution for profiling within the constraints and characteristics of message queue systems, such as their lack of random access and stateless consumption model.</p>
+<table><thead><tr><th>Query Type</th><th>Query Method</th><th>Advantages</th><th>Disadvantages</th></tr></thead><tbody><tr><td>Sampling query</td><td>Randomly query according to time slices.</td><td>High timeliness</td><td>Unable to query the specified data.</td></tr><tr><td>Synchronize additional storage query</td><td>Synchronize the data in the message queue to additional storage and then perform queries.</td><td>Can query specified data</td><td>1. Additional synchronization, storage, [...]
+<p><img decoding="async" loading="lazy" src="/assets/images/mq_profiling-80b5d670d20dccdfa5bd96aad32f47f5.png" width="904" height="374" class="img_ev3q"></p>
+<h4 class="anchor anchorWithStickyNavbar_LWe7" id="challenges-with-state-visibility-in-flink">Challenges with State Visibility in Flink<a href="#challenges-with-state-visibility-in-flink" class="hash-link" aria-label="Direct link to Challenges with State Visibility in Flink" title="Direct link to Challenges with State Visibility in Flink"></a></h4>
+<p>In e-commerce analytics, identifying the <strong>first and last user interaction channels within the same day</strong> is a critical metric for evaluating both <strong>user acquisition performance</strong> and <strong>channel effectiveness</strong>.
+To ensure accurate computation of this metric, the processing engine must perform <strong>sorting and deduplication</strong>, which inherently requires <strong>materializing all relevant upstream data into Flink State</strong>.</p>
+<p>However, Flink’s managed state is inherently opaque;it functions as a high-performance internal component designed for scalability and fault tolerance, but it does not provide native visibility or introspection tools. This "black-box" nature of state introduces substantial challenges when attempting to <strong>debug</strong>, <strong>verify</strong>, or <strong>modify</strong> streaming jobs, especially in production environments. The lack of transparency significantly compl [...]
+<p>As a result, teams may encounter <strong>increased operational overhead</strong> and <strong>longer development cycles</strong>, particularly when dealing with stateful streaming jobs that require precise control over historical data.</p>
+<p><img decoding="async" loading="lazy" src="/assets/images/flink_sorting_job-b9edc790b2248e8d51e27ee15777781f.png" width="904" height="398" class="img_ev3q"></p>
+<h3 class="anchor anchorWithStickyNavbar_LWe7" id="operational-challenges-of-large-flink-state-in-stateful-jobs">Operational Challenges of Large Flink State in Stateful Jobs<a href="#operational-challenges-of-large-flink-state-in-stateful-jobs" class="hash-link" aria-label="Direct link to Operational Challenges of Large Flink State in Stateful Jobs" title="Direct link to Operational Challenges of Large Flink State in Stateful Jobs"></a></h3>
+<p>In many Flink jobs, maintaining intermediate result sets in state is essential to support operations such as sorting and joining. When modifying a job, Flink attempts to reuse the previous state by validating the updated execution plan against the existing state schema. If the plan verification succeeds, the job can resume from the latest checkpoint. However, if the verification fails, the system is forced to <strong>reinitialize the entire state from scratch (epoch 0)</strong>, a pro [...]
+<p><img decoding="async" loading="lazy" src="/assets/images/transaction_attribution_state-d6c2a559f0ec205036782549c3e1434c.png" width="904" height="210" class="img_ev3q"></p>
+<p>In our current scenario, each incoming record triggers updates to both Sort State and Join State. These states have grown significantly in size, with the sort operator's state reaching up to <strong>90 TB</strong> and the join operator's state peaking at <strong>10 TB</strong>. Managing such large-scale state introduces a number of serious challenges:</p>
+<ul>
+<li><strong>High infrastructure costs</strong> due to the volume of state data.</li>
+<li><strong>Increased risk of checkpoint timeouts</strong>, especially under load.</li>
+<li><strong>Degraded job stability</strong>, with failures more likely during recovery or scaling events.</li>
+<li><strong>Slow job restart and recovery times</strong>, making operational troubleshooting difficult.</li>
+<li><strong>Development inefficiency</strong>, as state schema changes often require full state resets.</li>
+</ul>
+<p>This highlights the need for <strong>more efficient state management strategies</strong>, such as state compaction, state TTLs, or alternative storage architectures, to support large-scale, high-throughput streaming workloads with minimal operational burden.</p>
+<p><img decoding="async" loading="lazy" src="/assets/images/transaction_attribution_flink_job-f9515c01b5423520775b54a66b57deeb.png" width="904" height="392" class="img_ev3q"></p>
+<h2 class="anchor anchorWithStickyNavbar_LWe7" id="apache-fluss-key-advantages">Apache Fluss Key Advantages<a href="#apache-fluss-key-advantages" class="hash-link" aria-label="Direct link to Apache Fluss Key Advantages" title="Direct link to Apache Fluss Key Advantages"></a></h2>
+<h3 class="anchor anchorWithStickyNavbar_LWe7" id="what-is-apache-fluss">What is Apache Fluss?<a href="#what-is-apache-fluss" class="hash-link" aria-label="Direct link to What is Apache Fluss?" title="Direct link to What is Apache Fluss?"></a></h3>
+<blockquote>
+<p>Fluss Official Documentation: <a href="https://fluss.apache.org/" target="_blank" rel="noopener noreferrer">https://fluss.apache.org/</a></p>
+</blockquote>
+<blockquote>
+<p>GitHub: <a href="https://github.com/apache/fluss" target="_blank" rel="noopener noreferrer">https://github.com/apache/fluss</a></p>
+</blockquote>
+<p><img decoding="async" loading="lazy" src="/assets/images/fulss_arch-9347738f0d221a64c79f1a2c735b1210.png" width="904" height="242" class="img_ev3q"></p>
+<p>Fluss, developed by the Flink team, is the next-generation stream storage for stream analysis, a stream storage built for real-time analysis. Fluss innovatively integrates columnar storage format and real-time update capabilities into stream storage, and is deeply integrated with Flink to help users build a streaming data warehouse with high throughput, low latency, and low cost. It has the following core features:</p>
+<ul>
+<li><strong>Real-time reads and writes:</strong> Supports millisecond-level streaming read and write capabilities.</li>
+<li><strong>Columnar pruning:</strong> Store real-time stream data in columnar format. Column pruning can improve read performance by 10 times and reduce network costs.</li>
+<li><strong>Streaming Update:</strong> Supports real-time streaming updates for large-scale data. Supports partial column updates to achieve low-cost wide table stitching.</li>
+<li><strong>CDC Subscription:</strong> Updates will generate a complete Change Log (CDC), and by consuming CDC through Flink streaming, real-time data flow across the whole-pipeline of the data warehouse can be achieved.</li>
+<li><strong>Real-time Lookup Queries:</strong> Supports high-performance primary key point query and can be used as a dimension table association for real-time processing links.</li>
+<li><strong>Unified Lake and Stream:</strong> Seamlessly integrates Lakehouse and provides a real-time data layer for Lakehouse. This not only brings low-latency data to Lakehouse analytics but also endows stream storage with powerful analytical capabilities.</li>
+</ul>
+<h3 class="anchor anchorWithStickyNavbar_LWe7" id="table-types">Table Types<a href="#table-types" class="hash-link" aria-label="Direct link to Table Types" title="Direct link to Table Types"></a></h3>
+<p><img decoding="async" loading="lazy" src="/assets/images/fulss_underlying_arch-a7af63a1ea8c1b9d495ba3ae2b4d5100.png" width="904" height="594" class="img_ev3q"></p>
+<p><strong>Type:</strong> Divided into log tables and primary key tables. Log tables are columnar MQs that only support insert operations, while primary key tables can be updated according to the primary key and specified merge engine.</p>
+<p><strong>Partition:</strong> Divides data into smaller, more manageable subsets according to specified columns. Fluss supports more diverse partitioning strategies, such as Dynamic create partitions. For the latest documentation on partitioning, please refer to: <a href="https://fluss.apache.org/docs/table-design/data-distribution/partitioning/" target="_blank" rel="noopener noreferrer">https://fluss.apache.org/docs/table-design/data-distribution/partitioning/</a> . Note that the parti [...]
+<div class="language-SQL language-sql codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#9CDCFE;--prism-background-color:#1E1E1E"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-sql codeBlock_bY9V thin-scrollbar" style="color:#9CDCFE;background-color:#1E1E1E"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#9CDCFE"><span class="token keyword" style="color:rgb(86, 156, 214)">CREATE</span><span class="token plain"> </span [...]
+<p><strong>Bucket:</strong> The smallest unit of read and write operations. For a primary key table, the bucket to which each piece of data belongs is determined based on the hash value of the primary key of each piece of data. For a log table, the configuration of column hashing can be specified in the with parameter when creating the table; otherwise, it will be randomly scattered.</p>
+<h4 class="anchor anchorWithStickyNavbar_LWe7" id="log-table">Log Table<a href="#log-table" class="hash-link" aria-label="Direct link to Log Table" title="Direct link to Log Table"></a></h4>
+<p>The log table is a commonly used table in Fluss, which writes data in the order of writing, only supports insert operations, and does not support update/delete operations, similar to MQ systems such as Kafka and TT. For the log tables, currently most of the data will be uploaded to a remote location, and only a portion of the data will be stored locally. For example, a log table has 128 buckets, only 128 * 2 (number of segments retained locally) * 1 (size of one segment) * 3 (number o [...]
+<div class="language-SQL language-sql codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#9CDCFE;--prism-background-color:#1E1E1E"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-sql codeBlock_bY9V thin-scrollbar" style="color:#9CDCFE;background-color:#1E1E1E"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#9CDCFE"><span class="token keyword" style="color:rgb(86, 156, 214)">CREATE</span><span class="token plain"> </span [...]
+<p>In Fluss, the log table is stored in Apache Arrow columnar format by default. This format stores data column by column rather than row by row, thereby enabling <strong>column pruning</strong>. This ensures that only the required columns are consumed during real-time consumption, thereby reducing IO overhead, improving performance, and reducing resource usage.</p>
+<h4 class="anchor anchorWithStickyNavbar_LWe7" id="primarykey-table">PrimaryKey Table<a href="#primarykey-table" class="hash-link" aria-label="Direct link to PrimaryKey Table" title="Direct link to PrimaryKey Table"></a></h4>
+<p>Compared to the log table, the primary key table supports insert, update, and delete operations, and different merge methods are implemented by specifying the Merge Engine. It should be noted that <code>bucket.key</code> and <code>partitioned.key</code> need to be subsets of <code>primary.key</code>, and if this KV table is used for DeltaJoin, <code>bucket.key</code> needs to be a prefix of <code>primary.key</code>. The table creation statement is as follows:</p>
+<div class="language-SQL language-sql codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#9CDCFE;--prism-background-color:#1E1E1E"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-sql codeBlock_bY9V thin-scrollbar" style="color:#9CDCFE;background-color:#1E1E1E"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#9CDCFE"><span class="token keyword" style="color:rgb(86, 156, 214)">CREATE</span><span class="token plain"> </span [...]
+<p>Among them, merge-engine supports versioned and first_row; after using versioned, it is necessary to limit the ver-column for sorting, currently only supporting types such as INT, BIGINT, and TIMESTAMP, and not supporting STRING; after using first_row, it only supports retaining the first record of each primary key and does not support sorting by column.</p>
+<h3 class="anchor anchorWithStickyNavbar_LWe7" id="core-functions">Core Functions<a href="#core-functions" class="hash-link" aria-label="Direct link to Core Functions" title="Direct link to Core Functions"></a></h3>
+<h4 class="anchor anchorWithStickyNavbar_LWe7" id="tailorable-columnar-storage">Tailorable Columnar Storage<a href="#tailorable-columnar-storage" class="hash-link" aria-label="Direct link to Tailorable Columnar Storage" title="Direct link to Tailorable Columnar Storage"></a></h4>
+<p>Fluss is a column-based streaming storage, with its underlying file storage adopting the Apache Arrow IPC streaming format. This enables Fluss to achieve efficient column pruning while maintaining millisecond-level streaming read and write capabilities.</p>
+<p>A key advantage of Fluss is that column pruning is performed at the server level, and <strong>only the necessary columns are transferred to the Client</strong>. This architecture not only improves performance but also reduces network costs and resource consumption.</p>
+<p><img decoding="async" loading="lazy" src="/assets/images/comparison_of_row_and_column_storage_consumption-f4d5fcfb658e670c290ab2be2e504718.png" width="904" height="238" class="img_ev3q"></p>
+<h4 class="anchor anchorWithStickyNavbar_LWe7" id="fluss-key-value-storage-architecture-and-benefits">Fluss Key-Value Storage Architecture and Benefits<a href="#fluss-key-value-storage-architecture-and-benefits" class="hash-link" aria-label="Direct link to Fluss Key-Value Storage Architecture and Benefits" title="Direct link to Fluss Key-Value Storage Architecture and Benefits"></a></h4>
+<p>Fluss’s <strong>Key-Value (KV) storage engine</strong> is built atop a high-performance <strong>log-structured table</strong>, where a KV index is constructed directly over the log stream. This index leverages an <strong>LSM-tree (Log-Structured Merge Tree)</strong> design, enabling high-throughput real-time updates and partial record modifications—making it particularly well-suited for building and maintaining wide tables at scale.</p>
+<p>One of the standout advantages of this architecture is that the <strong>changelog</strong> produced by the KV store is <strong>natively consumable by Apache Flink</strong>. Unlike traditional message queues or log-based systems that require expensive post-processing and deduplication, Fluss’s integration avoids these overheads entirely. This results in <strong>significant reductions in compute cost</strong>, <strong>latency</strong>, and <strong>complexity</strong> across the data pip [...]
+<p>Fluss’s built-in KV index supports <strong>low-latency primary key lookups</strong>, making it ideal for operational queries, streaming joins, and dimension table enrichment. Beyond real-time ingestion and processing, Fluss also supports <strong>ad-hoc data exploration</strong>, with efficient execution of queries involving operations like <code>LIMIT</code> and <code>COUNT</code>. This allows users to <strong>debug</strong> and <strong>inspect live data</strong> within Fluss quickly [...]
+<p><img decoding="async" loading="lazy" src="/assets/images/fluss_kv_store_point_query-c1e70c05f23eeded2188aaa233d74efa.png" width="904" height="376" class="img_ev3q"></p>
+<h4 class="anchor anchorWithStickyNavbar_LWe7" id="dual-stream-join--delta-join">Dual-Stream Join → Delta Join<a href="#dual-stream-join--delta-join" class="hash-link" aria-label="Direct link to Dual-Stream Join → Delta Join" title="Direct link to Dual-Stream Join → Delta Join"></a></h4>
+<p>In Flink, Dual-Stream Join is a very fundamental function, often used to build wide tables. However, it is also a function that often gives developers headaches. This is because Dual-Stream Join needs to maintain the full amount of upstream data in State, which results in its state usually being very large. This brings about many problems, including high costs, unstable jobs, checkpoint timeouts, slow restart recovery, and so on.</p>
+<p>Fluss has developed a brand-new Flink join operator implementation called Delta Join, which fully leverages Fluss's streaming read and Prefix Lookup capabilities. Delta Join can be simply understood as "<strong>dual-sided driven dimension table join</strong>". When data arrives on the left side, it performs a point query on the right table based on the Join Key; when data arrives on the right side, it performs a point query on the left table based on the Join Key. Throu [...]
+<p><img decoding="async" loading="lazy" src="/assets/images/dual_stream_join2delta_join-5082dd8b7403c88c6e19e6cbeefca6ee.png" width="904" height="152" class="img_ev3q"></p>
+<h4 class="anchor anchorWithStickyNavbar_LWe7" id="lake-stream-integration">Lake-Stream Integration<a href="#lake-stream-integration" class="hash-link" aria-label="Direct link to Lake-Stream Integration" title="Direct link to Lake-Stream Integration"></a></h4>
+<p>In the Kappa architecture, due to differences in production pipelines, data is stored separately in streams and lakes, resulting in cost waste. At the same time, additional data services need to be defined to unify data consumption. The goal of lake-stream integration is to enable <strong>Lakehouse data</strong>" and <strong>streaming data</strong> to be stored, managed, and consumed as a unified whole, thereby avoiding data redundancy and metadata inconsistency issues.</p>
+<p><img decoding="async" loading="lazy" src="/assets/images/lake_stream_integration-8ba3bec3161e76abfcdf7c82f2392bc1.png" width="904" height="386" class="img_ev3q"></p>
+<p>Fluss introduces <strong>Union Reads</strong> to fully support the unified data access layer required by <strong>Kappa architecture</strong> principles. This functionality enables seamless access to both real-time streaming data and historical batch data through a consistent abstraction, ensuring a <strong>fully managed, end-to-end unified data service</strong>.</p>
+<p>To maintain alignment between streaming and lakehouse storage, Fluss operates a <strong>built-in Tiering Service</strong>. This service automatically transforms raw Fluss data into a lake-friendly format (e.g., columnar files), while <strong>preserving metadata consistency between stream and lake</strong>. This tight integration eliminates the need for external tooling to reconcile stream processing with downstream analytics systems.</p>
+<p>Fluss also introduces <strong>partition and bucket alignment mechanisms</strong>, which ensure that data layout remains consistent across streaming and lakehouse layers. These alignment strategies allow for <strong>direct conversion of Arrow files to Parquet</strong> without <strong>triggering network shuffling or repartitioning</strong>, significantly reducing I/O overhead and improving performance across the data pipeline.</p>
+<p>Together, these capabilities enable Fluss to function as a <strong>next-generation streaming storage layer</strong>, bridging the gap between low-latency stream processing and scalable lakehouse analytics—while optimizing cost, consistency, and operational simplicity.</p>
+<h2 class="anchor anchorWithStickyNavbar_LWe7" id="architecture-evolution-and-capability-implementation">Architecture Evolution and Capability Implementation<a href="#architecture-evolution-and-capability-implementation" class="hash-link" aria-label="Direct link to Architecture Evolution and Capability Implementation" title="Direct link to Architecture Evolution and Capability Implementation"></a></h2>
+<h3 class="anchor anchorWithStickyNavbar_LWe7" id="architecture-evolution">Architecture Evolution<a href="#architecture-evolution" class="hash-link" aria-label="Direct link to Architecture Evolution" title="Direct link to Architecture Evolution"></a></h3>
+<p>Fluss innovatively integrates columnar storage format and real-time update capabilities into stream storage and deeply integrates with Flink. Based on Fluss's core capabilities, we further enhance the real-time architecture, building a high-throughput, low-latency, and low-cost lakehouse through Fluss.</p>
+<p>The following takes the typical upgrade scenario of the Taobao as an example to introduce the implementation practice of Fluss.</p>
+<h4 class="anchor anchorWithStickyNavbar_LWe7" id="evolution-of-regular-jobs">Evolution of Regular Jobs<a href="#evolution-of-regular-jobs" class="hash-link" aria-label="Direct link to Evolution of Regular Jobs" title="Direct link to Evolution of Regular Jobs"></a></h4>
+<p><img decoding="async" loading="lazy" src="/assets/images/regular_jobs_evolution-03d7f2ae3f29d7190bf343b71e1f995d.png" width="904" height="136" class="img_ev3q"></p>
+<p>The above is the architecture before and after the job upgrade. For routine jobs such as <code>Source -> ETL cleaning -> Sink</code>, since the message queue is row-based storage, when consuming, Flink first loads the entire row of data into memory and then filters the required columns, resulting in a significant waste of Source IO.</p>
+<p>After upgrading to Fluss, due to the columnar storage at the bottom of Fluss, column pruning in Fluss is performed at the server level, which means that the <strong>data sent to the client has already been pruned</strong>, thus saving a large amount of network costs.</p>
+<h4 class="anchor anchorWithStickyNavbar_LWe7" id="evolution-of-sorting-jobs">Evolution of Sorting Jobs<a href="#evolution-of-sorting-jobs" class="hash-link" aria-label="Direct link to Evolution of Sorting Jobs" title="Direct link to Evolution of Sorting Jobs"></a></h4>
+<p><img decoding="async" loading="lazy" src="/assets/images/sorting_jobs_evolution-840cd946cecc1efed58ce5a0f7ab8dfa.png" width="904" height="246" class="img_ev3q"></p>
+<p>In Flink, the implementation of sorting relies on Flink explicitly computing and using State to store the intermediate state of data. This model incurs significant business overhead and extremely low business reusability. The introduction of Fluss pushes this computation and storage down to the Sink side, and in conjunction with the Fluss Merge Engine, implements different deduplication methods for KV tables. Currently, it supports <strong>FirstRow Merge Engine</strong> (the first row [...]
+<h4 class="anchor anchorWithStickyNavbar_LWe7" id="evolution-of-dual-stream-join-jobs">Evolution of Dual-Stream Join Jobs<a href="#evolution-of-dual-stream-join-jobs" class="hash-link" aria-label="Direct link to Evolution of Dual-Stream Join Jobs" title="Direct link to Evolution of Dual-Stream Join Jobs"></a></h4>
+<p><img decoding="async" loading="lazy" src="/assets/images/dual_stream_jobs_evolution-1cbe65429b071d1f1bb6b2497f491599.png" width="904" height="558" class="img_ev3q"></p>
+<p>After the Fluss remodeling, the Dual-Stream Join of the Taobao transaction attributed job has been enhanced with the following upgrade points:</p>
+<ul>
+<li><strong>Column pruning</strong> is truly pre-positioned to Source consumption, avoiding IO consumption of useless columns.</li>
+<li><strong>Introduce Fluss KV table & Merge Engines</strong> to implement data sorting and eliminate the dependency on Flink sorting State.</li>
+<li><strong>Refactor the Dual-Stream Join into FlussDeltaJoin</strong>, using stream reading and index point query, and externalize the Flink Dual-Stream JoinState.</li>
+</ul>
+<p>A comprehensive comparison between traditional Dual-Stream Join and the new Fluss-based architecture reveals the following advantages and disadvantages of the two:</p>
+<table><thead><tr><th>Job Type</th><th>Advantages</th><th>Disadvantages</th></tr></thead><tbody><tr><td>Traditional MQ & Dual-Stream Join</td><td>One job can implement the Join business logic.</td><td>1. Data is consumed row by row, resulting in wasted IO resources for useless columns.2. The Join State of the dual-stream is too large, making job maintenance difficult.3. State Black box, difficult to probe internal state. 4. If the resource plan does not match after modifying the job, [...]
+<h4 class="anchor anchorWithStickyNavbar_LWe7" id="evolution-of-lake-jobs">Evolution of Lake Jobs<a href="#evolution-of-lake-jobs" class="hash-link" aria-label="Direct link to Evolution of Lake Jobs" title="Direct link to Evolution of Lake Jobs"></a></h4>
+<p><img decoding="async" loading="lazy" src="/assets/images/lake_jobs_evolution-4c8a2cfd7386d4b16ba1b474fa554b3b.png" width="904" height="470" class="img_ev3q"></p>
+<p>Under the Fluss lake-stream integrated architecture, Fluss provides a <strong>fully managed</strong> unified data service. Fluss and Paimon store stream and lake data respectively, output a Catalog to the computing engine (such as Flink), and the data is output externally in the form of a unified table. Consumers can directly access the data in Fluss and lake storage in the form of Union Read.</p>
+<h3 class="anchor anchorWithStickyNavbar_LWe7" id="implementation-of-core-competencies">Implementation of Core Competencies<a href="#implementation-of-core-competencies" class="hash-link" aria-label="Direct link to Implementation of Core Competencies" title="Direct link to Implementation of Core Competencies"></a></h3>
+<h4 class="anchor anchorWithStickyNavbar_LWe7" id="column-pruning-capability">Column Pruning Capability<a href="#column-pruning-capability" class="hash-link" aria-label="Direct link to Column Pruning Capability" title="Direct link to Column Pruning Capability"></a></h4>
+<p>In the job of consuming message queues, consumers typically only consume a portion of the data, but Flink jobs still need to read data from all columns, resulting in significant waste in Flink Source IO. Fundamentally, existing message queues are all row-based storage, and for scenarios that need to process large-scale data, the efficiency of row-based storage format appears insufficient. The underlying storage needs to have powerful Data Skipping capabilities and support features suc [...]
+<p><img decoding="async" loading="lazy" src="/assets/images/fluss_column_pruning_evolution-d062e069bcd12155c2dd8bdf8c7c226d.png" width="904" height="302" class="img_ev3q"></p>
+<p>In our real-time data warehouse, 70% of jobs only consume partial columns of Source. Taking the Taobao recommendation clicks job as an example, out of the 43 fields in Source, we only need 13. Additional operator resources are required to trim the entire row of data, wasting more than 20% of IO resources. After using Fluss, it directly consumes the required columns, avoiding additional IO waste and reducing the additional resources brought by Flink column pruning operators. To date, m [...]
+<p><img decoding="async" loading="lazy" src="/assets/images/comparison_of_fluss_and_mq_column_pruning-9b1ea19ec04baad6b5790dfba8fd5ae6.png" width="904" height="334" class="img_ev3q"></p>
+<h4 class="anchor anchorWithStickyNavbar_LWe7" id="real-time-data-profiling">Real-time Data Profiling<a href="#real-time-data-profiling" class="hash-link" aria-label="Direct link to Real-time Data Profiling" title="Direct link to Real-time Data Profiling"></a></h4>
+<p><strong>Lookup Queries</strong></p>
+<p>Whether troubleshooting issues or conducting data exploration, data queries are necessary. However, the message queue only supports sampling queries in the interface and queries of synchronized data in additional storage. In sampling queries, it is not possible to query specified data; only a batch of output can be retrieved for display and inspection. Using the method of synchronizing additional storage, on the other hand, incurs minute-level latency as well as additional storage and [...]
+<p><img decoding="async" loading="lazy" src="/assets/images/comparison_of_fulss_and_mq_data_profiling-6edbee5cf60680f5a15c8dac1ccb1db5.png" width="904" height="536" class="img_ev3q"></p>
+<p>In Fluss KV Table, a KV index is built, so it can support high-performance primary key point queries, directly probe Fluss data through point query statements, and also support query functions such as LIMIT and COUNT to meet daily Data Profiling requirements. An example is as follows:</p>
+<p><img decoding="async" loading="lazy" src="/assets/images/fluss_query_example1-7f2a861db777f647bfe3ad322307452d.png" width="904" height="204" class="img_ev3q"></p>
+<p><strong>Flink State Query</strong></p>
+<p>Flink's State mechanism (such as KeyedState or OperatorState) provides efficient state management capabilities, but its internal implementation is a "Black box" to developers. Developers cannot directly query, analyze, or debug the data in State, resulting in a strong coupling between business logic and state management, making it difficult to dynamically adjust or expand. When data anomalies occur, developers can only infer the content in State from the result data, un [...]
+<p><img decoding="async" loading="lazy" src="/assets/images/flink_state_evolution-2fc62883cca1013c9dfe5d774a085a5a.png" width="904" height="270" class="img_ev3q"></p>
+<p>We externalize Flink State into Fluss, such as states for duak-stream join, data deduplication, etc. Based on Fluss's KV index, we provide State exploration capabilities, white-box the internal data of State, and efficiently locate issues.</p>
+<p><img decoding="async" loading="lazy" src="/assets/images/fluss_query_example2-2e75b06cea33441f0183914d6a049103.png" width="904" height="270" class="img_ev3q"></p>
+<h4 class="anchor anchorWithStickyNavbar_LWe7" id="merge-engine--delta-join">Merge Engine & Delta Join<a href="#merge-engine--delta-join" class="hash-link" aria-label="Direct link to Merge Engine & Delta Join" title="Direct link to Merge Engine & Delta Join"></a></h4>
+<p>In the current real-time data warehouse, the transaction attribution task is a job that heavily relies on State, with State <strong>reaching up to 100TB</strong> , which includes operations such as sorting and Dual-Stream Join. After consuming TT data, we first perform data sorting and then conduct a Dual-Stream Join to attribute order data.</p>
+<p><img decoding="async" loading="lazy" src="/assets/images/transaction_attribution_state_size-c2ef4c0431192100599996d24ff10627.png" width="904" height="178" class="img_ev3q"></p>
+<p>As shown in the figure, in the first attribution logic implementation of the attribution job, the State of the sorting operator is as high as <strong>90TB</strong> , and that of the Dual-Stream Join operator is <strong>10TB</strong> . Large State jobs bring many problems, including high costs, job instability, long CP time, etc.</p>
+<p><strong>Sorting optimization, Merge Engine</strong></p>
+<p><img decoding="async" loading="lazy" src="/assets/images/fluss_sort_tunning-da4fccacf7bce9e94414c36eebd66e86.png" width="904" height="362" class="img_ev3q"></p>
+<p>In the implementation of the Merge Engine, it mainly relies on Fluss's KV table. The Changelog generated by KV can be read by Flink streams without additional deduplication operations, saving Flink's computing resources and achieving business reuse of data. Through Fluss's KV table, the sorting logic in our jobs is implemented, and there is no longer a need to maintain the state of the sorting operator in the jobs.</p>
+<p><strong>Join Optimization, Dual Sides Driving</strong></p>
+<p><img decoding="async" loading="lazy" src="/assets/images/comparison_of_dual_stream_join_and_delta_join-08049759413e940eb71f99d45449f52f.png" width="904" height="390" class="img_ev3q"></p>
+<p>The jobs of Delta Join are as described above. The original job, after consuming data, sorts it according to business requirements, performs Dual-Stream Join after sorting, and saves the state for 24 hours. This results in issues such as long CP time, poor job maintainability, and the need to rerun when modifying the job state. In Fluss, data sorting is completed through the Merge Engine of the KV table, and through Delta Join, the job and state are decoupled, eliminating the need to [...]
+<p>We use the transaction attribution job as an example. It should be noted that both sides of DeltaJoin need to be KV tables.</p>
+<div class="language-SQL language-sql codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#9CDCFE;--prism-background-color:#1E1E1E"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-sql codeBlock_bY9V thin-scrollbar" style="color:#9CDCFE;background-color:#1E1E1E"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#9CDCFE"><span class="token comment" style="color:rgb(106, 153, 85)">-- Create left table</span><span class="token [...]
+<p>Some operations are shown in the above code. After migrating from the Dual-Stream Join to Merge Engine & Delta Join, large states were successfully reduced, making the job run more stably and eliminating CP timeouts. Meanwhile, the actual usage of CPU and Memory also decreased.</p>
+<p>In addition to resource reduction and performance improvement, there is also an enhancement in flexibility for our benefits. The state of traditional stream-to-stream connections is tightly coupled with Flink jobs, like an opaque "black box". When the job is modified, it is found that the historical resource plan is incompatible with the current job, and the State can only be rerun from scratch, which is time-consuming and labor-intensive. After using Delta Join, it is equiv [...]
+<p><img decoding="async" loading="lazy" src="/assets/images/fluss_historical_data_consumption-c36e04f8f69fcfd14eb3370abebf3e96.png" width="904" height="298" class="img_ev3q"></p>
+<p>Meanwhile, Fluss maintains a Tiering Service to synchronize Fluss data to Paimon, with the latest data stored in Fluss and historical data in Paimon. Flink can support Union Read, which combines the data in Fluss and Paimon to achieve second-level freshness analysis.</p>
+<p><img decoding="async" loading="lazy" src="/assets/images/join_jobs_evolution-db92bbdb4894edfcdb28009b081b687a.png" width="904" height="394" class="img_ev3q"></p>
+<p>In addition, Data Join also addresses the scenario of backtracking data. In the case of Dual-Stream Join, if a job modification causes the Operating Plan verification to fail, only data backfilling can be performed. During the Fluss backtracking process, the Paimon table archived by the unified lake-stream architecture combined with Flink Batch Join can be used to accelerate data backfilling.</p>
+<h4 class="anchor anchorWithStickyNavbar_LWe7" id="lake-stream-evolution">Lake-Stream Evolution<a href="#lake-stream-evolution" class="hash-link" aria-label="Direct link to Lake-Stream Evolution" title="Direct link to Lake-Stream Evolution"></a></h4>
+<p>Fluss provides high compatibility with Data lake warehouses. Through the underlying service, it automatically converts Fluss data into Paimon format data, enabling real-time data to be ingested into the lake with a single click, while ensuring consistent data partitioning and bucketing on both the lake and stream sides.</p>
+<p><img decoding="async" loading="lazy" src="/assets/images/lake_stream_evolution-1828502586ada6555bb15cd4719ccf5f.png" width="904" height="294" class="img_ev3q"></p>
+<p>After having <strong>lake</strong> and <strong>stream</strong> two levels of data, Fluss has the key characteristic of sharing data. Paimon stores long-period, minute-level latency data; Fluss stores short-period, millisecond-level latency data, and the data of both can be shared with each other.</p>
+<p>When performing Fluss stream reads, Paimon can provide efficient backtracking capabilities as historical data. After backtracking to the current checkpoint, the system will automatically switch to stream storage to continue reading and ensure that no duplicate data is read. In batch query analysis, Fluss stream storage can supplement Paimon with real-time data, thereby enabling analysis with second-level freshness. This feature is called Union Read.</p>
+<h2 class="anchor anchorWithStickyNavbar_LWe7" id="benefits-and-summary">Benefits and Summary<a href="#benefits-and-summary" class="hash-link" aria-label="Direct link to Benefits and Summary" title="Direct link to Benefits and Summary"></a></h2>
+<p>After a period of in-depth research, comprehensive testing, and smooth launch of Fluss, we successfully completed the evolution of the technical architecture based on Fluss as a solution. Among them, we conducted comprehensive tests on core capabilities such as Fluss column pruning and Delta Join to ensure the stability and performance of the solution met the standards.</p>
+<h3 class="anchor anchorWithStickyNavbar_LWe7" id="performance-test">Performance Test<a href="#performance-test" class="hash-link" aria-label="Direct link to Performance Test" title="Direct link to Performance Test"></a></h3>
+<h4 class="anchor anchorWithStickyNavbar_LWe7" id="read-and-write-performance">Read and Write Performance<a href="#read-and-write-performance" class="hash-link" aria-label="Direct link to Read and Write Performance" title="Direct link to Read and Write Performance"></a></h4>
+<p>We tested the read-write and column pruning capabilities of Fluss. Among them, in terms of read-write performance, we conducted tests with the same traffic. While maintaining the input <strong>RPS at 800 w/s</strong> and the output <strong>RPS at 44 w/s</strong> , we compared the actual CPU and Memory usage of Flink jobs. The details are as follows:</p>
+<p><img decoding="async" loading="lazy" src="/assets/images/performance_write-27292f1029f6a85e421735a04a2b4a75.png" width="698" height="402" class="img_ev3q"></p>
+<p><img decoding="async" loading="lazy" src="/assets/images/performance_read-f565578d7f2a84163de5e0663147c105.png" width="698" height="402" class="img_ev3q"></p>
+<h4 class="anchor anchorWithStickyNavbar_LWe7" id="column-pruning-performance">Column Pruning Performance<a href="#column-pruning-performance" class="hash-link" aria-label="Direct link to Column Pruning Performance" title="Direct link to Column Pruning Performance"></a></h4>
+<p>Regarding column pruning capabilities, we also tested TT, Fluss, and different numbers of columns in Fluss to explore the consumption of CPU, Memory, and IO. With the input <strong>RPS maintained at 25 w/s</strong>, the specific test results are as follows:</p>
+<p><img decoding="async" loading="lazy" src="/assets/images/performance_column_pruning2-9187374565daf3d3a14757c8444a7371.png" width="698" height="402" class="img_ev3q"></p>
+<p><img decoding="async" loading="lazy" src="/assets/images/performance_column_pruning1-e4c22dae4b6104713ce26f5a370b36a8.png" width="698" height="402" class="img_ev3q"></p>
+<p>At this point, we will find a problem: as the number of columns decreases (a total of 13 columns out of 43 columns are consumed), IO does not show a linear decrease. After verification, the storage of each column in the source is not evenly distributed, and the storage of some required columns <strong>accounts for 72%</strong> . It can be seen that the input IO traffic <strong>decreases by 20%</strong> , which is consistent with the expected proportion of the storage of the read columns.</p>
+<h4 class="anchor anchorWithStickyNavbar_LWe7" id="delta-join-performance">Delta Join Performance<a href="#delta-join-performance" class="hash-link" aria-label="Direct link to Delta Join Performance" title="Direct link to Delta Join Performance"></a></h4>
+<p>We also tested and compared the resources and performance of the above <strong>Dual-Stream Join and Fluss Delta Join</strong> , and under the condition of maintaining the <strong>input RPS of the left table at 68,000/s</strong> and the <strong>input RPS of the right table at 1,700/s</strong> , all jobs ran for 24 hours.</p>
+<p><img decoding="async" loading="lazy" src="/assets/images/performance_delta1-76e0c23013cbefdb8bf9f76980497d38.png" width="904" height="246" class="img_ev3q"></p>
+<p><img decoding="async" loading="lazy" src="/assets/images/performance_delta2-db0bb3f31808d421f8e516221d44c29d.png" width="904" height="246" class="img_ev3q"></p>
+<p>After actual testing, after migrating from the Dual-Stream Join to Merge Engine + Delta Join, it successfully <strong>reduced 95TB</strong> of large state, making the job run more stably and significantly shortening the CP time. Meanwhile, the actual usage of CPU and Memory also <strong>decreased by more than 80%</strong> .</p>
+<h4 class="anchor anchorWithStickyNavbar_LWe7" id="data-backfilling-performance">Data Backfilling Performance<a href="#data-backfilling-performance" class="hash-link" aria-label="Direct link to Data Backfilling Performance" title="Direct link to Data Backfilling Performance"></a></h4>
+<p>Since Delta Join <strong>does not need to maintain state</strong> , it can use batch mode <strong>Batch Join</strong> to catch up. After catching up, it switches back to stream mode Delta Join. During this process, a small amount of data will be reprocessed, and the end-to-end consistency is ensured through the idempotence update mechanism of the result table. We <strong>performed a test comparison on the data catch-up of the above</strong> Dual-Stream Join and Batch Join <strong>for [...]
+<p><img decoding="async" loading="lazy" src="/assets/images/performance_data_backtracking1-25192a04f93b0cc734d0dae30744a7fc.png" width="698" height="402" class="img_ev3q"></p>
+<p><img decoding="async" loading="lazy" src="/assets/images/performance_data_backtracking2-74113a436a7f89f34f7405490b5bffc9.png" width="698" height="402" class="img_ev3q"></p>
+<p>After actual testing, the batch mode Batch Join backtracking for one day (24H) takes <strong>70%+ less time</strong> compared to the Dual-Stream Join backtracking.</p>
+<h3 class="anchor anchorWithStickyNavbar_LWe7" id="summary">Summary<a href="#summary" class="hash-link" aria-label="Direct link to Summary" title="Direct link to Summary"></a></h3>
+<p>Fluss has core features such as columnar pruning, streaming updates, real-time point queries, and lake-stream integration. At the same time, it innovatively integrates columnar storage format and real-time update capabilities into stream storage, and deeply integrates with Flink and Paimon to build a lake warehouse with high throughput, low latency, and low cost. Just as the original intention of Fluss: <strong>Real-time stream storage for analytics.</strong></p>
+<p>After nearly three months of exploration, Fluss has been implemented in <strong>Taobao's core search and recommendation scenarios</strong> , built a unified lake-stream A/B data warehouse, and continuously served internal business through Taobao's A/B Experiment Platform. In practical applications, the following results have been achieved:</p>
+<ul>
+<li>
+<p><strong>Scenarios are widely implemented:</strong> covering core Taobao business such as search and recommendation, and successfully passing the test of Taobao's 618 Grand Promotion <strong>,</strong> with peak traffic reaching tens of millions and average latency <strong>within 1 second</strong> .</p>
+</li>
+<li>
+<p><strong>Column Pruning Resource Optimization</strong> : The column pruning feature has been implemented in all Fluss real-time jobs. When the consumption of columnar storage accounts for 75% of the source data, the average IO <strong>is reduced by 25%</strong> , and the average job resource consumption <strong>is reduced by 30%</strong> .</p>
+</li>
+<li>
+<p><strong>Big State job optimization:</strong> Taking transaction attribution job as an example, the Delta Join & Merge Engine is applied to reconstruct the first and last attribution. State is externally implemented, and the actual usage of CPU and Memory is <strong>reduced by 80% +</strong> . The state of Flink is <strong>decoupled</strong> from the job, and the <strong>100TB +</strong> big state is successfully reduced, making the job more stable.</p>
+</li>
+<li>
+<p><strong>Data Profiling:</strong> Implemented capabilities including message queue profiling and State profiling, supports query operators such as LIMIT and COUNT, achieved white-boxing of State for sorting and Dual-Stream Join, with higher flexibility and more efficient problem location.</p>
+</li>
+</ul>
+<h2 class="anchor anchorWithStickyNavbar_LWe7" id="planning">Planning<a href="#planning" class="hash-link" aria-label="Direct link to Planning" title="Direct link to Planning"></a></h2>
+<p><img decoding="async" loading="lazy" src="/assets/images/future_plans-1828502586ada6555bb15cd4719ccf5f.png" width="904" height="294" class="img_ev3q"></p>
+<p>In the upcoming work, we will develop a new generation of lakehouse data architecture and continue to explore in Data & AI scenarios.</p>
+<ul>
+<li>
+<p><strong>Scenario Inclusiveness:</strong> In the second-level data warehouse, switch the whole-pipeline and all scenarios of the consumption message queue to the Fluss pipeline. Based on the Fluss lake-stream capabilities, provide corresponding Paimon minute-level data.</p>
+</li>
+<li>
+<p><strong>AI Empowerment:</strong> Attempt to implement scenarios of MultiModal Machine Learning data pipelines, Agents, and model pre-training, and add AI-enhanced analytics.</p>
+</li>
+<li>
+<p><strong>Capability Exploration:</strong> Explore more Fluss capabilities and empower business operations, optimizing more jobs through Fluss Aggregate Merge Engine and Partial Update capabilities.</p>
+</li>
+</ul>
+<h2 class="anchor anchorWithStickyNavbar_LWe7" id="references">References<a href="#references" class="hash-link" aria-label="Direct link to References" title="Direct link to References"></a></h2>
+<p>[1] <a href="https://fluss.apache.org/" target="_blank" rel="noopener noreferrer">Fluss Official Documentation</a></p>
+<p>[2] <a href="https://mp.weixin.qq.com/s?__biz=MzU3Mzg4OTMyNQ==&mid=2247512207&idx=1&sn=e25320a020d7b20e25be8fd614e9f46b&chksm=fd383ecdca4fb7dbf9a37e9c3840699ba8b1b2c57868db028f995c3bc7bcf6a0340e396d87c4&scene=178&cur_album_id=3764887437743669257&search_click_id=#rd" target="_blank" rel="noopener noreferrer">Fluss: Next-Generation Stream Storage Designed for Real-Time Analysis</a></p></div></article><nav class="pagination-nav docusaurus-mt-lg" aria-label="Bl [...]
+ <p>Copyright © 2025 The Apache Software Foundation, Licensed under the Apache License, Version 2.0.</p>
+ <p>Apache, the names of Apache projects, and the feather logo are either registered trademarks or trademarks of the Apache Software Foundation in the United States and/or other countries. All other marks mentioned may be trademarks or registered trademarks of their respective owners.</p></div></div></div></footer></div>
+</body>
+</html>
\ No newline at end of file
diff --git a/blog/tiering-service/index.html b/blog/tiering-service/index.html
index 4be8d95e..2a136a5c 100644
--- a/blog/tiering-service/index.html
+++ b/blog/tiering-service/index.html
@@ -15,14 +15,14 @@
<link rel="icon" href="/img/logo.svg">
<link rel="manifest" href="/manifest.json">
<meta name="theme-color" content="#0071e3"><link rel="stylesheet" href="/assets/css/styles.53ed9f81.css">
-<script src="/assets/js/runtime~main.87feb3cc.js" defer="defer"></script>
-<script src="/assets/js/main.d75df03d.js" defer="defer"></script>
+<script src="/assets/js/runtime~main.93b61691.js" defer="defer"></script>
+<script src="/assets/js/main.9636bb89.js" defer="defer"></script>
</head>
<body class="navigation-with-keyboard">
<svg xmlns="http://www.w3.org/2000/svg" style="display: none;"><defs>
<symbol id="theme-svg-external-link" viewBox="0 0 24 24"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"/></symbol>
</defs></svg>
-<script>!function(){var t="light";var e=function(){try{return new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}}()||function(){try{return window.localStorage.getItem("theme")}catch(t){}}();document.documentElement.setAttribute("data-theme",e||t),document.documentElement.setAttribute("data-theme-choice",e||t)}(),function(){try{const c=new URLSearchParams(window.location.search).entries();for(var[t,e]of c)if(t.startsWith("docusaurus-data-")){var a=t.replace("do [...]
+<script>!function(){var t="light";var e=function(){try{return new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}}()||function(){try{return window.localStorage.getItem("theme")}catch(t){}}();document.documentElement.setAttribute("data-theme",e||t),document.documentElement.setAttribute("data-theme-choice",e||t)}(),function(){try{const c=new URLSearchParams(window.location.search).entries();for(var[t,e]of c)if(t.startsWith("docusaurus-data-")){var a=t.replace("do [...]
<p><img decoding="async" loading="lazy" src="/assets/images/background-8a1ebc79c438a3deabba060edf8eaa0b.png" width="2036" height="924" class="img_ev3q"></p>
<p>At the core of Fluss’s Lakehouse architecture sits the <strong>Tiering Service:</strong> a smart,
policy-driven data pipeline that seamlessly bridges your real-time Fluss cluster and your cost-efficient lakehouse storage. It continuously ingests fresh events from the fluss cluster, automatically migrating older or less-frequently accessed data into colder storage tiers without interrupting ongoing queries. By balancing hot, warm, and cold storage according to configurable rules, the Tiering Service ensures that recent data remains instantly queryable while historical records are arch [...]
diff --git a/blog/unified-streaming-lakehouse/index.html b/blog/unified-streaming-lakehouse/index.html
index e7cdca0a..d4bd9061 100644
--- a/blog/unified-streaming-lakehouse/index.html
+++ b/blog/unified-streaming-lakehouse/index.html
@@ -15,14 +15,14 @@
<link rel="icon" href="/img/logo.svg">
<link rel="manifest" href="/manifest.json">
<meta name="theme-color" content="#0071e3"><link rel="stylesheet" href="/assets/css/styles.53ed9f81.css">
-<script src="/assets/js/runtime~main.87feb3cc.js" defer="defer"></script>
-<script src="/assets/js/main.d75df03d.js" defer="defer"></script>
+<script src="/assets/js/runtime~main.93b61691.js" defer="defer"></script>
+<script src="/assets/js/main.9636bb89.js" defer="defer"></script>
</head>
<body class="navigation-with-keyboard">
<svg xmlns="http://www.w3.org/2000/svg" style="display: none;"><defs>
<symbol id="theme-svg-external-link" viewBox="0 0 24 24"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"/></symbol>
</defs></svg>
-<script>!function(){var t="light";var e=function(){try{return new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}}()||function(){try{return window.localStorage.getItem("theme")}catch(t){}}();document.documentElement.setAttribute("data-theme",e||t),document.documentElement.setAttribute("data-theme-choice",e||t)}(),function(){try{const c=new URLSearchParams(window.location.search).entries();for(var[t,e]of c)if(t.startsWith("docusaurus-data-")){var a=t.replace("do [...]
+<script>!function(){var t="light";var e=function(){try{return new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}}()||function(){try{return window.localStorage.getItem("theme")}catch(t){}}();document.documentElement.setAttribute("data-theme",e||t),document.documentElement.setAttribute("data-theme-choice",e||t)}(),function(){try{const c=new URLSearchParams(window.location.search).entries();for(var[t,e]of c)if(t.startsWith("docusaurus-data-")){var a=t.replace("do [...]
<p>Fluss is designed to address the demands of real-time analytics with the following key capabilities:</p>
<ul>
<li><strong>Real-Time Stream Reading and Writing:</strong> Supports millisecond-level end-to-end latency.</li>
diff --git a/blog/unveil-fluss-logo/index.html b/blog/unveil-fluss-logo/index.html
index 2d42a7f0..4fc757a9 100644
--- a/blog/unveil-fluss-logo/index.html
+++ b/blog/unveil-fluss-logo/index.html
@@ -15,14 +15,14 @@
<link rel="icon" href="/img/logo.svg">
<link rel="manifest" href="/manifest.json">
<meta name="theme-color" content="#0071e3"><link rel="stylesheet" href="/assets/css/styles.53ed9f81.css">
-<script src="/assets/js/runtime~main.87feb3cc.js" defer="defer"></script>
-<script src="/assets/js/main.d75df03d.js" defer="defer"></script>
+<script src="/assets/js/runtime~main.93b61691.js" defer="defer"></script>
+<script src="/assets/js/main.9636bb89.js" defer="defer"></script>
</head>
<body class="navigation-with-keyboard">
<svg xmlns="http://www.w3.org/2000/svg" style="display: none;"><defs>
<symbol id="theme-svg-external-link" viewBox="0 0 24 24"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"/></symbol>
</defs></svg>
-<script>!function(){var t="light";var e=function(){try{return new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}}()||function(){try{return window.localStorage.getItem("theme")}catch(t){}}();document.documentElement.setAttribute("data-theme",e||t),document.documentElement.setAttribute("data-theme-choice",e||t)}(),function(){try{const c=new URLSearchParams(window.location.search).entries();for(var[t,e]of c)if(t.startsWith("docusaurus-data-")){var a=t.replace("do [...]
+<script>!function(){var t="light";var e=function(){try{return new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}}()||function(){try{return window.localStorage.getItem("theme")}catch(t){}}();document.documentElement.setAttribute("data-theme",e||t),document.documentElement.setAttribute("data-theme-choice",e||t)}(),function(){try{const c=new URLSearchParams(window.location.search).entries();for(var[t,e]of c)if(t.startsWith("docusaurus-data-")){var a=t.replace("do [...]
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="introducing-the-little-otter">Introducing the Little Otter<a href="#introducing-the-little-otter" class="hash-link" aria-label="Direct link to Introducing the Little Otter" title="Direct link to Introducing the Little Otter"></a></h2>
<p>Today is <a href="https://www.otter.org/world-otter-day" target="_blank" rel="noopener noreferrer">World Otter Day</a>, and we are thrilled to introduce the little otter to the Fluss community! 🎉</p>
<p>Since open-sourced half a year ago, many community members and friends have asked us:
diff --git a/blog/why-fluss/index.html b/blog/why-fluss/index.html
index f33764da..17299ccd 100644
--- a/blog/why-fluss/index.html
+++ b/blog/why-fluss/index.html
@@ -15,14 +15,14 @@
<link rel="icon" href="/img/logo.svg">
<link rel="manifest" href="/manifest.json">
<meta name="theme-color" content="#0071e3"><link rel="stylesheet" href="/assets/css/styles.53ed9f81.css">
-<script src="/assets/js/runtime~main.87feb3cc.js" defer="defer"></script>
-<script src="/assets/js/main.d75df03d.js" defer="defer"></script>
+<script src="/assets/js/runtime~main.93b61691.js" defer="defer"></script>
+<script src="/assets/js/main.9636bb89.js" defer="defer"></script>
</head>
<body class="navigation-with-keyboard">
<svg xmlns="http://www.w3.org/2000/svg" style="display: none;"><defs>
<symbol id="theme-svg-external-link" viewBox="0 0 24 24"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"/></symbol>
</defs></svg>
-<script>!function(){var t="light";var e=function(){try{return new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}}()||function(){try{return window.localStorage.getItem("theme")}catch(t){}}();document.documentElement.setAttribute("data-theme",e||t),document.documentElement.setAttribute("data-theme-choice",e||t)}(),function(){try{const c=new URLSearchParams(window.location.search).entries();for(var[t,e]of c)if(t.startsWith("docusaurus-data-")){var a=t.replace("do [...]
+<script>!function(){var t="light";var e=function(){try{return new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}}()||function(){try{return window.localStorage.getItem("theme")}catch(t){}}();document.documentElement.setAttribute("data-theme",e||t),document.documentElement.setAttribute("data-theme-choice",e||t)}(),function(){try{const c=new URLSearchParams(window.location.search).entries();for(var[t,e]of c)if(t.startsWith("docusaurus-data-")){var a=t.replace("do [...]
This transition is revolutionizing various sectors, including the E-commerce, automotive networking, finance, and beyond,
where real-time data applications are becoming integral to operations. This evolution enables organizations to unlock greater
value by leveraging real-time insights to drive business impact and enhance decision-making.</p>
diff --git a/community/dev/building/index.html b/community/dev/building/index.html
index b5b38b24..25872f89 100644
--- a/community/dev/building/index.html
+++ b/community/dev/building/index.html
@@ -15,8 +15,8 @@
<link rel="icon" href="/img/logo.svg">
<link rel="manifest" href="/manifest.json">
<meta name="theme-color" content="#0071e3"><link rel="stylesheet" href="/assets/css/styles.53ed9f81.css">
-<script src="/assets/js/runtime~main.87feb3cc.js" defer="defer"></script>
-<script src="/assets/js/main.d75df03d.js" defer="defer"></script>
+<script src="/assets/js/runtime~main.93b61691.js" defer="defer"></script>
+<script src="/assets/js/main.9636bb89.js" defer="defer"></script>
</head>
<body class="navigation-with-keyboard">
<svg xmlns="http://www.w3.org/2000/svg" style="display: none;"><defs>
diff --git a/community/dev/ide-setup/index.html b/community/dev/ide-setup/index.html
index 5336c489..e185e4fd 100644
--- a/community/dev/ide-setup/index.html
+++ b/community/dev/ide-setup/index.html
@@ -15,8 +15,8 @@
<link rel="icon" href="/img/logo.svg">
<link rel="manifest" href="/manifest.json">
<meta name="theme-color" content="#0071e3"><link rel="stylesheet" href="/assets/css/styles.53ed9f81.css">
-<script src="/assets/js/runtime~main.87feb3cc.js" defer="defer"></script>
-<script src="/assets/js/main.d75df03d.js" defer="defer"></script>
+<script src="/assets/js/runtime~main.93b61691.js" defer="defer"></script>
+<script src="/assets/js/main.9636bb89.js" defer="defer"></script>
</head>
<body class="navigation-with-keyboard">
<svg xmlns="http://www.w3.org/2000/svg" style="display: none;"><defs>
diff --git a/community/fluss-logos/index.html b/community/fluss-logos/index.html
index 97874bfb..40594f05 100644
--- a/community/fluss-logos/index.html
+++ b/community/fluss-logos/index.html
@@ -15,8 +15,8 @@
<link rel="icon" href="/img/logo.svg">
<link rel="manifest" href="/manifest.json">
<meta name="theme-color" content="#0071e3"><link rel="stylesheet" href="/assets/css/styles.53ed9f81.css">
-<script src="/assets/js/runtime~main.87feb3cc.js" defer="defer"></script>
-<script src="/assets/js/main.d75df03d.js" defer="defer"></script>
+<script src="/assets/js/runtime~main.93b61691.js" defer="defer"></script>
+<script src="/assets/js/main.9636bb89.js" defer="defer"></script>
</head>
<body class="navigation-with-keyboard">
<svg xmlns="http://www.w3.org/2000/svg" style="display: none;"><defs>
diff --git a/community/how-to-contribute/bug-reports-feature-requests/index.html b/community/how-to-contribute/bug-reports-feature-requests/index.html
index cece27d0..995664db 100644
--- a/community/how-to-contribute/bug-reports-feature-requests/index.html
+++ b/community/how-to-contribute/bug-reports-feature-requests/index.html
@@ -15,8 +15,8 @@
<link rel="icon" href="/img/logo.svg">
<link rel="manifest" href="/manifest.json">
<meta name="theme-color" content="#0071e3"><link rel="stylesheet" href="/assets/css/styles.53ed9f81.css">
-<script src="/assets/js/runtime~main.87feb3cc.js" defer="defer"></script>
-<script src="/assets/js/main.d75df03d.js" defer="defer"></script>
+<script src="/assets/js/runtime~main.93b61691.js" defer="defer"></script>
+<script src="/assets/js/main.9636bb89.js" defer="defer"></script>
</head>
<body class="navigation-with-keyboard">
<svg xmlns="http://www.w3.org/2000/svg" style="display: none;"><defs>
diff --git a/community/how-to-contribute/contribute-code/index.html b/community/how-to-contribute/contribute-code/index.html
index 2a3956c8..4380d8be 100644
--- a/community/how-to-contribute/contribute-code/index.html
+++ b/community/how-to-contribute/contribute-code/index.html
@@ -15,8 +15,8 @@
<link rel="icon" href="/img/logo.svg">
<link rel="manifest" href="/manifest.json">
<meta name="theme-color" content="#0071e3"><link rel="stylesheet" href="/assets/css/styles.53ed9f81.css">
-<script src="/assets/js/runtime~main.87feb3cc.js" defer="defer"></script>
-<script src="/assets/js/main.d75df03d.js" defer="defer"></script>
+<script src="/assets/js/runtime~main.93b61691.js" defer="defer"></script>
+<script src="/assets/js/main.9636bb89.js" defer="defer"></script>
</head>
<body class="navigation-with-keyboard">
<svg xmlns="http://www.w3.org/2000/svg" style="display: none;"><defs>
diff --git a/community/how-to-contribute/contribute-docs/index.html b/community/how-to-contribute/contribute-docs/index.html
index f533a146..03e2342f 100644
--- a/community/how-to-contribute/contribute-docs/index.html
+++ b/community/how-to-contribute/contribute-docs/index.html
@@ -15,8 +15,8 @@
<link rel="icon" href="/img/logo.svg">
<link rel="manifest" href="/manifest.json">
<meta name="theme-color" content="#0071e3"><link rel="stylesheet" href="/assets/css/styles.53ed9f81.css">
-<script src="/assets/js/runtime~main.87feb3cc.js" defer="defer"></script>
-<script src="/assets/js/main.d75df03d.js" defer="defer"></script>
+<script src="/assets/js/runtime~main.93b61691.js" defer="defer"></script>
+<script src="/assets/js/main.9636bb89.js" defer="defer"></script>
</head>
<body class="navigation-with-keyboard">
<svg xmlns="http://www.w3.org/2000/svg" style="display: none;"><defs>
diff --git a/community/how-to-contribute/review-pull-requests/index.html b/community/how-to-contribute/review-pull-requests/index.html
index c4308972..53cb1970 100644
--- a/community/how-to-contribute/review-pull-requests/index.html
+++ b/community/how-to-contribute/review-pull-requests/index.html
@@ -15,8 +15,8 @@
<link rel="icon" href="/img/logo.svg">
<link rel="manifest" href="/manifest.json">
<meta name="theme-color" content="#0071e3"><link rel="stylesheet" href="/assets/css/styles.53ed9f81.css">
-<script src="/assets/js/runtime~main.87feb3cc.js" defer="defer"></script>
-<script src="/assets/js/main.d75df03d.js" defer="defer"></script>
+<script src="/assets/js/runtime~main.93b61691.js" defer="defer"></script>
+<script src="/assets/js/main.9636bb89.js" defer="defer"></script>
</head>
<body class="navigation-with-keyboard">
<svg xmlns="http://www.w3.org/2000/svg" style="display: none;"><defs>
diff --git a/community/how-to-release/creating-a-fluss-shaded-release/index.html b/community/how-to-release/creating-a-fluss-shaded-release/index.html
index cf49f668..c3adc632 100644
--- a/community/how-to-release/creating-a-fluss-shaded-release/index.html
+++ b/community/how-to-release/creating-a-fluss-shaded-release/index.html
@@ -15,8 +15,8 @@
<link rel="icon" href="/img/logo.svg">
<link rel="manifest" href="/manifest.json">
<meta name="theme-color" content="#0071e3"><link rel="stylesheet" href="/assets/css/styles.53ed9f81.css">
-<script src="/assets/js/runtime~main.87feb3cc.js" defer="defer"></script>
-<script src="/assets/js/main.d75df03d.js" defer="defer"></script>
+<script src="/assets/js/runtime~main.93b61691.js" defer="defer"></script>
+<script src="/assets/js/main.9636bb89.js" defer="defer"></script>
</head>
<body class="navigation-with-keyboard">
<svg xmlns="http://www.w3.org/2000/svg" style="display: none;"><defs>
diff --git a/community/how-to-release/release-manager-preparation/index.html b/community/how-to-release/release-manager-preparation/index.html
index 757121b8..266ac8e4 100644
--- a/community/how-to-release/release-manager-preparation/index.html
+++ b/community/how-to-release/release-manager-preparation/index.html
@@ -15,8 +15,8 @@
<link rel="icon" href="/img/logo.svg">
<link rel="manifest" href="/manifest.json">
<meta name="theme-color" content="#0071e3"><link rel="stylesheet" href="/assets/css/styles.53ed9f81.css">
-<script src="/assets/js/runtime~main.87feb3cc.js" defer="defer"></script>
-<script src="/assets/js/main.d75df03d.js" defer="defer"></script>
+<script src="/assets/js/runtime~main.93b61691.js" defer="defer"></script>
+<script src="/assets/js/main.9636bb89.js" defer="defer"></script>
</head>
<body class="navigation-with-keyboard">
<svg xmlns="http://www.w3.org/2000/svg" style="display: none;"><defs>
diff --git a/community/how-to-release/verifying-a-fluss-shaded-release/index.html b/community/how-to-release/verifying-a-fluss-shaded-release/index.html
index 21eb7359..e052f552 100644
--- a/community/how-to-release/verifying-a-fluss-shaded-release/index.html
+++ b/community/how-to-release/verifying-a-fluss-shaded-release/index.html
@@ -15,8 +15,8 @@
<link rel="icon" href="/img/logo.svg">
<link rel="manifest" href="/manifest.json">
<meta name="theme-color" content="#0071e3"><link rel="stylesheet" href="/assets/css/styles.53ed9f81.css">
-<script src="/assets/js/runtime~main.87feb3cc.js" defer="defer"></script>
-<script src="/assets/js/main.d75df03d.js" defer="defer"></script>
+<script src="/assets/js/runtime~main.93b61691.js" defer="defer"></script>
+<script src="/assets/js/main.9636bb89.js" defer="defer"></script>
</head>
<body class="navigation-with-keyboard">
<svg xmlns="http://www.w3.org/2000/svg" style="display: none;"><defs>
diff --git a/community/welcome/index.html b/community/welcome/index.html
index e4021609..cd86a0cf 100644
--- a/community/welcome/index.html
+++ b/community/welcome/index.html
@@ -15,8 +15,8 @@
<link rel="icon" href="/img/logo.svg">
<link rel="manifest" href="/manifest.json">
<meta name="theme-color" content="#0071e3"><link rel="stylesheet" href="/assets/css/styles.53ed9f81.css">
-<script src="/assets/js/runtime~main.87feb3cc.js" defer="defer"></script>
-<script src="/assets/js/main.d75df03d.js" defer="defer"></script>
+<script src="/assets/js/runtime~main.93b61691.js" defer="defer"></script>
+<script src="/assets/js/main.9636bb89.js" defer="defer"></script>
</head>
<body class="navigation-with-keyboard">
<svg xmlns="http://www.w3.org/2000/svg" style="display: none;"><defs>
diff --git a/docs/0.5/concepts/architecture/index.html b/docs/0.5/concepts/architecture/index.html
index 49f9b94f..64818465 100644
--- a/docs/0.5/concepts/architecture/index.html
+++ b/docs/0.5/concepts/architecture/index.html
@@ -15,8 +15,8 @@
<link rel="icon" href="/img/logo.svg">
<link rel="manifest" href="/manifest.json">
<meta name="theme-color" content="#0071e3"><link rel="stylesheet" href="/assets/css/styles.53ed9f81.css">
-<script src="/assets/js/runtime~main.87feb3cc.js" defer="defer"></script>
-<script src="/assets/js/main.d75df03d.js" defer="defer"></script>
+<script src="/assets/js/runtime~main.93b61691.js" defer="defer"></script>
+<script src="/assets/js/main.9636bb89.js" defer="defer"></script>
</head>
<body class="navigation-with-keyboard">
<svg xmlns="http://www.w3.org/2000/svg" style="display: none;"><defs>
diff --git a/docs/0.5/dev/building/index.html b/docs/0.5/dev/building/index.html
index db102efc..88ada1a1 100644
--- a/docs/0.5/dev/building/index.html
+++ b/docs/0.5/dev/building/index.html
@@ -15,8 +15,8 @@
<link rel="icon" href="/img/logo.svg">
<link rel="manifest" href="/manifest.json">
<meta name="theme-color" content="#0071e3"><link rel="stylesheet" href="/assets/css/styles.53ed9f81.css">
-<script src="/assets/js/runtime~main.87feb3cc.js" defer="defer"></script>
-<script src="/assets/js/main.d75df03d.js" defer="defer"></script>
+<script src="/assets/js/runtime~main.93b61691.js" defer="defer"></script>
+<script src="/assets/js/main.9636bb89.js" defer="defer"></script>
</head>
<body class="navigation-with-keyboard">
<svg xmlns="http://www.w3.org/2000/svg" style="display: none;"><defs>
diff --git a/docs/0.5/dev/ide-setup/index.html b/docs/0.5/dev/ide-setup/index.html
index 6fd0143d..859607f4 100644
--- a/docs/0.5/dev/ide-setup/index.html
+++ b/docs/0.5/dev/ide-setup/index.html
@@ -15,8 +15,8 @@
<link rel="icon" href="/img/logo.svg">
<link rel="manifest" href="/manifest.json">
<meta name="theme-color" content="#0071e3"><link rel="stylesheet" href="/assets/css/styles.53ed9f81.css">
-<script src="/assets/js/runtime~main.87feb3cc.js" defer="defer"></script>
-<script src="/assets/js/main.d75df03d.js" defer="defer"></script>
+<script src="/assets/js/runtime~main.93b61691.js" defer="defer"></script>
+<script src="/assets/js/main.9636bb89.js" defer="defer"></script>
</head>
<body class="navigation-with-keyboard">
<svg xmlns="http://www.w3.org/2000/svg" style="display: none;"><defs>
diff --git a/docs/0.5/engine-flink/ddl/index.html b/docs/0.5/engine-flink/ddl/index.html
index bf6991d9..7fcbd5e6 100644
--- a/docs/0.5/engine-flink/ddl/index.html
+++ b/docs/0.5/engine-flink/ddl/index.html
@@ -15,8 +15,8 @@
<link rel="icon" href="/img/logo.svg">
<link rel="manifest" href="/manifest.json">
<meta name="theme-color" content="#0071e3"><link rel="stylesheet" href="/assets/css/styles.53ed9f81.css">
-<script src="/assets/js/runtime~main.87feb3cc.js" defer="defer"></script>
-<script src="/assets/js/main.d75df03d.js" defer="defer"></script>
+<script src="/assets/js/runtime~main.93b61691.js" defer="defer"></script>
+<script src="/assets/js/main.9636bb89.js" defer="defer"></script>
</head>
<body class="navigation-with-keyboard">
<svg xmlns="http://www.w3.org/2000/svg" style="display: none;"><defs>
diff --git a/docs/0.5/engine-flink/getting-started/index.html b/docs/0.5/engine-flink/getting-started/index.html
index 6c77cc2b..b44cc754 100644
--- a/docs/0.5/engine-flink/getting-started/index.html
+++ b/docs/0.5/engine-flink/getting-started/index.html
@@ -15,8 +15,8 @@
<link rel="icon" href="/img/logo.svg">
<link rel="manifest" href="/manifest.json">
<meta name="theme-color" content="#0071e3"><link rel="stylesheet" href="/assets/css/styles.53ed9f81.css">
-<script src="/assets/js/runtime~main.87feb3cc.js" defer="defer"></script>
-<script src="/assets/js/main.d75df03d.js" defer="defer"></script>
+<script src="/assets/js/runtime~main.93b61691.js" defer="defer"></script>
+<script src="/assets/js/main.9636bb89.js" defer="defer"></script>
</head>
<body class="navigation-with-keyboard">
<svg xmlns="http://www.w3.org/2000/svg" style="display: none;"><defs>
diff --git a/docs/0.5/engine-flink/lookups/index.html b/docs/0.5/engine-flink/lookups/index.html
index fea1227b..b9b6b641 100644
--- a/docs/0.5/engine-flink/lookups/index.html
+++ b/docs/0.5/engine-flink/lookups/index.html
@@ -15,8 +15,8 @@
<link rel="icon" href="/img/logo.svg">
<link rel="manifest" href="/manifest.json">
<meta name="theme-color" content="#0071e3"><link rel="stylesheet" href="/assets/css/styles.53ed9f81.css">
-<script src="/assets/js/runtime~main.87feb3cc.js" defer="defer"></script>
-<script src="/assets/js/main.d75df03d.js" defer="defer"></script>
+<script src="/assets/js/runtime~main.93b61691.js" defer="defer"></script>
+<script src="/assets/js/main.9636bb89.js" defer="defer"></script>
</head>
<body class="navigation-with-keyboard">
<svg xmlns="http://www.w3.org/2000/svg" style="display: none;"><defs>
diff --git a/docs/0.5/engine-flink/reads/index.html b/docs/0.5/engine-flink/reads/index.html
index 006f06ac..f8f1ebfa 100644
--- a/docs/0.5/engine-flink/reads/index.html
+++ b/docs/0.5/engine-flink/reads/index.html
@@ -15,8 +15,8 @@
<link rel="icon" href="/img/logo.svg">
<link rel="manifest" href="/manifest.json">
<meta name="theme-color" content="#0071e3"><link rel="stylesheet" href="/assets/css/styles.53ed9f81.css">
-<script src="/assets/js/runtime~main.87feb3cc.js" defer="defer"></script>
-<script src="/assets/js/main.d75df03d.js" defer="defer"></script>
+<script src="/assets/js/runtime~main.93b61691.js" defer="defer"></script>
+<script src="/assets/js/main.9636bb89.js" defer="defer"></script>
</head>
<body class="navigation-with-keyboard">
<svg xmlns="http://www.w3.org/2000/svg" style="display: none;"><defs>
diff --git a/docs/0.5/engine-flink/writes/index.html b/docs/0.5/engine-flink/writes/index.html
index 61ae4b4c..09ff63e7 100644
--- a/docs/0.5/engine-flink/writes/index.html
+++ b/docs/0.5/engine-flink/writes/index.html
@@ -15,8 +15,8 @@
<link rel="icon" href="/img/logo.svg">
<link rel="manifest" href="/manifest.json">
<meta name="theme-color" content="#0071e3"><link rel="stylesheet" href="/assets/css/styles.53ed9f81.css">
-<script src="/assets/js/runtime~main.87feb3cc.js" defer="defer"></script>
-<script src="/assets/js/main.d75df03d.js" defer="defer"></script>
+<script src="/assets/js/runtime~main.93b61691.js" defer="defer"></script>
+<script src="/assets/js/main.9636bb89.js" defer="defer"></script>
</head>
<body class="navigation-with-keyboard">
<svg xmlns="http://www.w3.org/2000/svg" style="display: none;"><defs>
diff --git a/docs/0.5/index.html b/docs/0.5/index.html
index 73c335a1..3dc14bbb 100644
--- a/docs/0.5/index.html
+++ b/docs/0.5/index.html
@@ -15,8 +15,8 @@
<link rel="icon" href="/img/logo.svg">
<link rel="manifest" href="/manifest.json">
<meta name="theme-color" content="#0071e3"><link rel="stylesheet" href="/assets/css/styles.53ed9f81.css">
-<script src="/assets/js/runtime~main.87feb3cc.js" defer="defer"></script>
-<script src="/assets/js/main.d75df03d.js" defer="defer"></script>
+<script src="/assets/js/runtime~main.93b61691.js" defer="defer"></script>
+<script src="/assets/js/main.9636bb89.js" defer="defer"></script>
</head>
<body class="navigation-with-keyboard">
<svg xmlns="http://www.w3.org/2000/svg" style="display: none;"><defs>
diff --git a/docs/0.5/install-deploy/deploying-distributed-cluster/index.html b/docs/0.5/install-deploy/deploying-distributed-cluster/index.html
index 9ad32c98..132b94f9 100644
--- a/docs/0.5/install-deploy/deploying-distributed-cluster/index.html
+++ b/docs/0.5/install-deploy/deploying-distributed-cluster/index.html
@@ -15,8 +15,8 @@
<link rel="icon" href="/img/logo.svg">
<link rel="manifest" href="/manifest.json">
<meta name="theme-color" content="#0071e3"><link rel="stylesheet" href="/assets/css/styles.53ed9f81.css">
-<script src="/assets/js/runtime~main.87feb3cc.js" defer="defer"></script>
-<script src="/assets/js/main.d75df03d.js" defer="defer"></script>
+<script src="/assets/js/runtime~main.93b61691.js" defer="defer"></script>
+<script src="/assets/js/main.9636bb89.js" defer="defer"></script>
</head>
<body class="navigation-with-keyboard">
<svg xmlns="http://www.w3.org/2000/svg" style="display: none;"><defs>
diff --git a/docs/0.5/install-deploy/deploying-local-cluster/index.html b/docs/0.5/install-deploy/deploying-local-cluster/index.html
index 2093b6a8..edca7f38 100644
--- a/docs/0.5/install-deploy/deploying-local-cluster/index.html
+++ b/docs/0.5/install-deploy/deploying-local-cluster/index.html
@@ -15,8 +15,8 @@
<link rel="icon" href="/img/logo.svg">
<link rel="manifest" href="/manifest.json">
<meta name="theme-color" content="#0071e3"><link rel="stylesheet" href="/assets/css/styles.53ed9f81.css">
-<script src="/assets/js/runtime~main.87feb3cc.js" defer="defer"></script>
-<script src="/assets/js/main.d75df03d.js" defer="defer"></script>
+<script src="/assets/js/runtime~main.93b61691.js" defer="defer"></script>
+<script src="/assets/js/main.9636bb89.js" defer="defer"></script>
</head>
<body class="navigation-with-keyboard">
<svg xmlns="http://www.w3.org/2000/svg" style="display: none;"><defs>
diff --git a/docs/0.5/install-deploy/deploying-with-docker/index.html b/docs/0.5/install-deploy/deploying-with-docker/index.html
index 2b3a189b..da959bee 100644
--- a/docs/0.5/install-deploy/deploying-with-docker/index.html
+++ b/docs/0.5/install-deploy/deploying-with-docker/index.html
@@ -15,8 +15,8 @@
<link rel="icon" href="/img/logo.svg">
<link rel="manifest" href="/manifest.json">
<meta name="theme-color" content="#0071e3"><link rel="stylesheet" href="/assets/css/styles.53ed9f81.css">
-<script src="/assets/js/runtime~main.87feb3cc.js" defer="defer"></script>
-<script src="/assets/js/main.d75df03d.js" defer="defer"></script>
+<script src="/assets/js/runtime~main.93b61691.js" defer="defer"></script>
+<script src="/assets/js/main.9636bb89.js" defer="defer"></script>
</head>
<body class="navigation-with-keyboard">
<svg xmlns="http://www.w3.org/2000/svg" style="display: none;"><defs>
diff --git a/docs/0.5/install-deploy/overview/index.html b/docs/0.5/install-deploy/overview/index.html
index 049e0145..6008d5e7 100644
--- a/docs/0.5/install-deploy/overview/index.html
+++ b/docs/0.5/install-deploy/overview/index.html
@@ -15,8 +15,8 @@
<link rel="icon" href="/img/logo.svg">
<link rel="manifest" href="/manifest.json">
<meta name="theme-color" content="#0071e3"><link rel="stylesheet" href="/assets/css/styles.53ed9f81.css">
-<script src="/assets/js/runtime~main.87feb3cc.js" defer="defer"></script>
-<script src="/assets/js/main.d75df03d.js" defer="defer"></script>
+<script src="/assets/js/runtime~main.93b61691.js" defer="defer"></script>
+<script src="/assets/js/main.9636bb89.js" defer="defer"></script>
</head>
<body class="navigation-with-keyboard">
<svg xmlns="http://www.w3.org/2000/svg" style="display: none;"><defs>
diff --git a/docs/0.5/maintenance/configuration/index.html b/docs/0.5/maintenance/configuration/index.html
index 4afa1fe1..13637f04 100644
--- a/docs/0.5/maintenance/configuration/index.html
+++ b/docs/0.5/maintenance/configuration/index.html
@@ -15,8 +15,8 @@
<link rel="icon" href="/img/logo.svg">
<link rel="manifest" href="/manifest.json">
<meta name="theme-color" content="#0071e3"><link rel="stylesheet" href="/assets/css/styles.53ed9f81.css">
-<script src="/assets/js/runtime~main.87feb3cc.js" defer="defer"></script>
-<script src="/assets/js/main.d75df03d.js" defer="defer"></script>
+<script src="/assets/js/runtime~main.93b61691.js" defer="defer"></script>
+<script src="/assets/js/main.9636bb89.js" defer="defer"></script>
</head>
<body class="navigation-with-keyboard">
<svg xmlns="http://www.w3.org/2000/svg" style="display: none;"><defs>
diff --git a/docs/0.5/maintenance/filesystems/hdfs/index.html b/docs/0.5/maintenance/filesystems/hdfs/index.html
index 2e2742e2..2da40614 100644
--- a/docs/0.5/maintenance/filesystems/hdfs/index.html
+++ b/docs/0.5/maintenance/filesystems/hdfs/index.html
@@ -15,8 +15,8 @@
<link rel="icon" href="/img/logo.svg">
<link rel="manifest" href="/manifest.json">
<meta name="theme-color" content="#0071e3"><link rel="stylesheet" href="/assets/css/styles.53ed9f81.css">
-<script src="/assets/js/runtime~main.87feb3cc.js" defer="defer"></script>
-<script src="/assets/js/main.d75df03d.js" defer="defer"></script>
+<script src="/assets/js/runtime~main.93b61691.js" defer="defer"></script>
+<script src="/assets/js/main.9636bb89.js" defer="defer"></script>
</head>
<body class="navigation-with-keyboard">
<svg xmlns="http://www.w3.org/2000/svg" style="display: none;"><defs>
diff --git a/docs/0.5/maintenance/filesystems/oss/index.html b/docs/0.5/maintenance/filesystems/oss/index.html
index 31e00333..06c203b1 100644
--- a/docs/0.5/maintenance/filesystems/oss/index.html
+++ b/docs/0.5/maintenance/filesystems/oss/index.html
@@ -15,8 +15,8 @@
<link rel="icon" href="/img/logo.svg">
<link rel="manifest" href="/manifest.json">
<meta name="theme-color" content="#0071e3"><link rel="stylesheet" href="/assets/css/styles.53ed9f81.css">
-<script src="/assets/js/runtime~main.87feb3cc.js" defer="defer"></script>
-<script src="/assets/js/main.d75df03d.js" defer="defer"></script>
+<script src="/assets/js/runtime~main.93b61691.js" defer="defer"></script>
+<script src="/assets/js/main.9636bb89.js" defer="defer"></script>
</head>
<body class="navigation-with-keyboard">
<svg xmlns="http://www.w3.org/2000/svg" style="display: none;"><defs>
diff --git a/docs/0.5/maintenance/filesystems/overview/index.html b/docs/0.5/maintenance/filesystems/overview/index.html
index fdf45692..9bb8671c 100644
--- a/docs/0.5/maintenance/filesystems/overview/index.html
+++ b/docs/0.5/maintenance/filesystems/overview/index.html
@@ -15,8 +15,8 @@
<link rel="icon" href="/img/logo.svg">
<link rel="manifest" href="/manifest.json">
<meta name="theme-color" content="#0071e3"><link rel="stylesheet" href="/assets/css/styles.53ed9f81.css">
-<script src="/assets/js/runtime~main.87feb3cc.js" defer="defer"></script>
-<script src="/assets/js/main.d75df03d.js" defer="defer"></script>
+<script src="/assets/js/runtime~main.93b61691.js" defer="defer"></script>
+<script src="/assets/js/main.9636bb89.js" defer="defer"></script>
</head>
<body class="navigation-with-keyboard">
<svg xmlns="http://www.w3.org/2000/svg" style="display: none;"><defs>
diff --git a/docs/0.5/maintenance/filesystems/s3/index.html b/docs/0.5/maintenance/filesystems/s3/index.html
index 7cb02548..ca022d04 100644
--- a/docs/0.5/maintenance/filesystems/s3/index.html
+++ b/docs/0.5/maintenance/filesystems/s3/index.html
@@ -15,8 +15,8 @@
<link rel="icon" href="/img/logo.svg">
<link rel="manifest" href="/manifest.json">
<meta name="theme-color" content="#0071e3"><link rel="stylesheet" href="/assets/css/styles.53ed9f81.css">
-<script src="/assets/js/runtime~main.87feb3cc.js" defer="defer"></script>
-<script src="/assets/js/main.d75df03d.js" defer="defer"></script>
+<script src="/assets/js/runtime~main.93b61691.js" defer="defer"></script>
+<script src="/assets/js/main.9636bb89.js" defer="defer"></script>
</head>
<body class="navigation-with-keyboard">
<svg xmlns="http://www.w3.org/2000/svg" style="display: none;"><defs>
diff --git a/docs/0.5/maintenance/logging/index.html b/docs/0.5/maintenance/logging/index.html
index 17e21550..82b8e25a 100644
--- a/docs/0.5/maintenance/logging/index.html
+++ b/docs/0.5/maintenance/logging/index.html
@@ -15,8 +15,8 @@
<link rel="icon" href="/img/logo.svg">
<link rel="manifest" href="/manifest.json">
<meta name="theme-color" content="#0071e3"><link rel="stylesheet" href="/assets/css/styles.53ed9f81.css">
-<script src="/assets/js/runtime~main.87feb3cc.js" defer="defer"></script>
-<script src="/assets/js/main.d75df03d.js" defer="defer"></script>
+<script src="/assets/js/runtime~main.93b61691.js" defer="defer"></script>
+<script src="/assets/js/main.9636bb89.js" defer="defer"></script>
</head>
<body class="navigation-with-keyboard">
<svg xmlns="http://www.w3.org/2000/svg" style="display: none;"><defs>
diff --git a/docs/0.5/maintenance/metric-reporters/index.html b/docs/0.5/maintenance/metric-reporters/index.html
index 60b2bbe4..8c529532 100644
--- a/docs/0.5/maintenance/metric-reporters/index.html
+++ b/docs/0.5/maintenance/metric-reporters/index.html
@@ -15,8 +15,8 @@
<link rel="icon" href="/img/logo.svg">
<link rel="manifest" href="/manifest.json">
<meta name="theme-color" content="#0071e3"><link rel="stylesheet" href="/assets/css/styles.53ed9f81.css">
-<script src="/assets/js/runtime~main.87feb3cc.js" defer="defer"></script>
-<script src="/assets/js/main.d75df03d.js" defer="defer"></script>
+<script src="/assets/js/runtime~main.93b61691.js" defer="defer"></script>
+<script src="/assets/js/main.9636bb89.js" defer="defer"></script>
</head>
<body class="navigation-with-keyboard">
<svg xmlns="http://www.w3.org/2000/svg" style="display: none;"><defs>
diff --git a/docs/0.5/maintenance/monitor-metrics/index.html b/docs/0.5/maintenance/monitor-metrics/index.html
index ff5654d3..d176461d 100644
--- a/docs/0.5/maintenance/monitor-metrics/index.html
+++ b/docs/0.5/maintenance/monitor-metrics/index.html
@@ -15,8 +15,8 @@
<link rel="icon" href="/img/logo.svg">
<link rel="manifest" href="/manifest.json">
<meta name="theme-color" content="#0071e3"><link rel="stylesheet" href="/assets/css/styles.53ed9f81.css">
-<script src="/assets/js/runtime~main.87feb3cc.js" defer="defer"></script>
-<script src="/assets/js/main.d75df03d.js" defer="defer"></script>
+<script src="/assets/js/runtime~main.93b61691.js" defer="defer"></script>
+<script src="/assets/js/main.9636bb89.js" defer="defer"></script>
</head>
<body class="navigation-with-keyboard">
<svg xmlns="http://www.w3.org/2000/svg" style="display: none;"><defs>
diff --git a/docs/0.5/maintenance/tiered-storage/lakehouse-storage/index.html b/docs/0.5/maintenance/tiered-storage/lakehouse-storage/index.html
index 5a8b03cd..e2da19f2 100644
--- a/docs/0.5/maintenance/tiered-storage/lakehouse-storage/index.html
+++ b/docs/0.5/maintenance/tiered-storage/lakehouse-storage/index.html
@@ -15,8 +15,8 @@
<link rel="icon" href="/img/logo.svg">
<link rel="manifest" href="/manifest.json">
<meta name="theme-color" content="#0071e3"><link rel="stylesheet" href="/assets/css/styles.53ed9f81.css">
-<script src="/assets/js/runtime~main.87feb3cc.js" defer="defer"></script>
-<script src="/assets/js/main.d75df03d.js" defer="defer"></script>
+<script src="/assets/js/runtime~main.93b61691.js" defer="defer"></script>
+<script src="/assets/js/main.9636bb89.js" defer="defer"></script>
</head>
<body class="navigation-with-keyboard">
<svg xmlns="http://www.w3.org/2000/svg" style="display: none;"><defs>
diff --git a/docs/0.5/maintenance/tiered-storage/overview/index.html b/docs/0.5/maintenance/tiered-storage/overview/index.html
index 91df47ca..8413a20e 100644
--- a/docs/0.5/maintenance/tiered-storage/overview/index.html
+++ b/docs/0.5/maintenance/tiered-storage/overview/index.html
@@ -15,8 +15,8 @@
<link rel="icon" href="/img/logo.svg">
<link rel="manifest" href="/manifest.json">
<meta name="theme-color" content="#0071e3"><link rel="stylesheet" href="/assets/css/styles.53ed9f81.css">
-<script src="/assets/js/runtime~main.87feb3cc.js" defer="defer"></script>
-<script src="/assets/js/main.d75df03d.js" defer="defer"></script>
+<script src="/assets/js/runtime~main.93b61691.js" defer="defer"></script>
+<script src="/assets/js/main.9636bb89.js" defer="defer"></script>
</head>
<body class="navigation-with-keyboard">
<svg xmlns="http://www.w3.org/2000/svg" style="display: none;"><defs>
diff --git a/docs/0.5/maintenance/tiered-storage/remote-storage/index.html b/docs/0.5/maintenance/tiered-storage/remote-storage/index.html
index 8f2042d9..d69a2e1e 100644
--- a/docs/0.5/maintenance/tiered-storage/remote-storage/index.html
+++ b/docs/0.5/maintenance/tiered-storage/remote-storage/index.html
@@ -15,8 +15,8 @@
<link rel="icon" href="/img/logo.svg">
<link rel="manifest" href="/manifest.json">
<meta name="theme-color" content="#0071e3"><link rel="stylesheet" href="/assets/css/styles.53ed9f81.css">
-<script src="/assets/js/runtime~main.87feb3cc.js" defer="defer"></script>
-<script src="/assets/js/main.d75df03d.js" defer="defer"></script>
+<script src="/assets/js/runtime~main.93b61691.js" defer="defer"></script>
+<script src="/assets/js/main.9636bb89.js" defer="defer"></script>
</head>
<body class="navigation-with-keyboard">
<svg xmlns="http://www.w3.org/2000/svg" style="display: none;"><defs>
diff --git a/docs/0.5/quickstart/flink/index.html b/docs/0.5/quickstart/flink/index.html
index e4e8050d..50eb307f 100644
--- a/docs/0.5/quickstart/flink/index.html
+++ b/docs/0.5/quickstart/flink/index.html
@@ -15,8 +15,8 @@
<link rel="icon" href="/img/logo.svg">
<link rel="manifest" href="/manifest.json">
<meta name="theme-color" content="#0071e3"><link rel="stylesheet" href="/assets/css/styles.53ed9f81.css">
-<script src="/assets/js/runtime~main.87feb3cc.js" defer="defer"></script>
-<script src="/assets/js/main.d75df03d.js" defer="defer"></script>
+<script src="/assets/js/runtime~main.93b61691.js" defer="defer"></script>
+<script src="/assets/js/main.9636bb89.js" defer="defer"></script>
</head>
<body class="navigation-with-keyboard">
<svg xmlns="http://www.w3.org/2000/svg" style="display: none;"><defs>
diff --git a/docs/0.5/streaming-lakehouse/integrate-data-lakes/paimon/index.html b/docs/0.5/streaming-lakehouse/integrate-data-lakes/paimon/index.html
index 77121f81..d4921d43 100644
--- a/docs/0.5/streaming-lakehouse/integrate-data-lakes/paimon/index.html
+++ b/docs/0.5/streaming-lakehouse/integrate-data-lakes/paimon/index.html
@@ -15,8 +15,8 @@
<link rel="icon" href="/img/logo.svg">
<link rel="manifest" href="/manifest.json">
<meta name="theme-color" content="#0071e3"><link rel="stylesheet" href="/assets/css/styles.53ed9f81.css">
-<script src="/assets/js/runtime~main.87feb3cc.js" defer="defer"></script>
-<script src="/assets/js/main.d75df03d.js" defer="defer"></script>
+<script src="/assets/js/runtime~main.93b61691.js" defer="defer"></script>
+<script src="/assets/js/main.9636bb89.js" defer="defer"></script>
</head>
<body class="navigation-with-keyboard">
<svg xmlns="http://www.w3.org/2000/svg" style="display: none;"><defs>
diff --git a/docs/0.5/streaming-lakehouse/overview/index.html b/docs/0.5/streaming-lakehouse/overview/index.html
index ff87c290..b88bd057 100644
--- a/docs/0.5/streaming-lakehouse/overview/index.html
+++ b/docs/0.5/streaming-lakehouse/overview/index.html
@@ -15,8 +15,8 @@
<link rel="icon" href="/img/logo.svg">
<link rel="manifest" href="/manifest.json">
<meta name="theme-color" content="#0071e3"><link rel="stylesheet" href="/assets/css/styles.53ed9f81.css">
-<script src="/assets/js/runtime~main.87feb3cc.js" defer="defer"></script>
-<script src="/assets/js/main.d75df03d.js" defer="defer"></script>
+<script src="/assets/js/runtime~main.93b61691.js" defer="defer"></script>
+<script src="/assets/js/main.9636bb89.js" defer="defer"></script>
</head>
<body class="navigation-with-keyboard">
<svg xmlns="http://www.w3.org/2000/svg" style="display: none;"><defs>
diff --git a/docs/0.5/table-design/data-distribution/bucketing/index.html b/docs/0.5/table-design/data-distribution/bucketing/index.html
index 5894aa76..326bcf30 100644
--- a/docs/0.5/table-design/data-distribution/bucketing/index.html
+++ b/docs/0.5/table-design/data-distribution/bucketing/index.html
@@ -15,8 +15,8 @@
<link rel="icon" href="/img/logo.svg">
<link rel="manifest" href="/manifest.json">
<meta name="theme-color" content="#0071e3"><link rel="stylesheet" href="/assets/css/styles.53ed9f81.css">
-<script src="/assets/js/runtime~main.87feb3cc.js" defer="defer"></script>
-<script src="/assets/js/main.d75df03d.js" defer="defer"></script>
+<script src="/assets/js/runtime~main.93b61691.js" defer="defer"></script>
+<script src="/assets/js/main.9636bb89.js" defer="defer"></script>
</head>
<body class="navigation-with-keyboard">
<svg xmlns="http://www.w3.org/2000/svg" style="display: none;"><defs>
diff --git a/docs/0.5/table-design/data-distribution/partitioning/index.html b/docs/0.5/table-design/data-distribution/partitioning/index.html
index 84db0606..a5b21234 100644
--- a/docs/0.5/table-design/data-distribution/partitioning/index.html
+++ b/docs/0.5/table-design/data-distribution/partitioning/index.html
@@ -15,8 +15,8 @@
<link rel="icon" href="/img/logo.svg">
<link rel="manifest" href="/manifest.json">
<meta name="theme-color" content="#0071e3"><link rel="stylesheet" href="/assets/css/styles.53ed9f81.css">
-<script src="/assets/js/runtime~main.87feb3cc.js" defer="defer"></script>
-<script src="/assets/js/main.d75df03d.js" defer="defer"></script>
+<script src="/assets/js/runtime~main.93b61691.js" defer="defer"></script>
+<script src="/assets/js/main.9636bb89.js" defer="defer"></script>
</head>
<body class="navigation-with-keyboard">
<svg xmlns="http://www.w3.org/2000/svg" style="display: none;"><defs>
diff --git a/docs/0.5/table-design/data-distribution/ttl/index.html b/docs/0.5/table-design/data-distribution/ttl/index.html
index a4519017..28c4ace0 100644
--- a/docs/0.5/table-design/data-distribution/ttl/index.html
+++ b/docs/0.5/table-design/data-distribution/ttl/index.html
@@ -15,8 +15,8 @@
<link rel="icon" href="/img/logo.svg">
<link rel="manifest" href="/manifest.json">
<meta name="theme-color" content="#0071e3"><link rel="stylesheet" href="/assets/css/styles.53ed9f81.css">
-<script src="/assets/js/runtime~main.87feb3cc.js" defer="defer"></script>
-<script src="/assets/js/main.d75df03d.js" defer="defer"></script>
+<script src="/assets/js/runtime~main.93b61691.js" defer="defer"></script>
+<script src="/assets/js/main.9636bb89.js" defer="defer"></script>
</head>
<body class="navigation-with-keyboard">
<svg xmlns="http://www.w3.org/2000/svg" style="display: none;"><defs>
diff --git a/docs/0.5/table-design/data-types/index.html b/docs/0.5/table-design/data-types/index.html
index 8cdc1e5d..712baaa8 100644
--- a/docs/0.5/table-design/data-types/index.html
+++ b/docs/0.5/table-design/data-types/index.html
@@ -15,8 +15,8 @@
<link rel="icon" href="/img/logo.svg">
<link rel="manifest" href="/manifest.json">
<meta name="theme-color" content="#0071e3"><link rel="stylesheet" href="/assets/css/styles.53ed9f81.css">
-<script src="/assets/js/runtime~main.87feb3cc.js" defer="defer"></script>
-<script src="/assets/js/main.d75df03d.js" defer="defer"></script>
+<script src="/assets/js/runtime~main.93b61691.js" defer="defer"></script>
+<script src="/assets/js/main.9636bb89.js" defer="defer"></script>
</head>
<body class="navigation-with-keyboard">
<svg xmlns="http://www.w3.org/2000/svg" style="display: none;"><defs>
diff --git a/docs/0.5/table-design/overview/index.html b/docs/0.5/table-design/overview/index.html
index 671f340f..1126a59e 100644
--- a/docs/0.5/table-design/overview/index.html
+++ b/docs/0.5/table-design/overview/index.html
@@ -15,8 +15,8 @@
<link rel="icon" href="/img/logo.svg">
<link rel="manifest" href="/manifest.json">
<meta name="theme-color" content="#0071e3"><link rel="stylesheet" href="/assets/css/styles.53ed9f81.css">
-<script src="/assets/js/runtime~main.87feb3cc.js" defer="defer"></script>
-<script src="/assets/js/main.d75df03d.js" defer="defer"></script>
+<script src="/assets/js/runtime~main.93b61691.js" defer="defer"></script>
+<script src="/assets/js/main.9636bb89.js" defer="defer"></script>
</head>
<body class="navigation-with-keyboard">
<svg xmlns="http://www.w3.org/2000/svg" style="display: none;"><defs>
diff --git a/docs/0.5/table-design/table-types/log-table/index.html b/docs/0.5/table-design/table-types/log-table/index.html
index a4177ab3..c9090fba 100644
--- a/docs/0.5/table-design/table-types/log-table/index.html
+++ b/docs/0.5/table-design/table-types/log-table/index.html
@@ -15,8 +15,8 @@
<link rel="icon" href="/img/logo.svg">
<link rel="manifest" href="/manifest.json">
<meta name="theme-color" content="#0071e3"><link rel="stylesheet" href="/assets/css/styles.53ed9f81.css">
-<script src="/assets/js/runtime~main.87feb3cc.js" defer="defer"></script>
-<script src="/assets/js/main.d75df03d.js" defer="defer"></script>
+<script src="/assets/js/runtime~main.93b61691.js" defer="defer"></script>
+<script src="/assets/js/main.9636bb89.js" defer="defer"></script>
</head>
<body class="navigation-with-keyboard">
<svg xmlns="http://www.w3.org/2000/svg" style="display: none;"><defs>
diff --git a/docs/0.5/table-design/table-types/pk-table/index.html b/docs/0.5/table-design/table-types/pk-table/index.html
index 452dfe40..edf4bee0 100644
--- a/docs/0.5/table-design/table-types/pk-table/index.html
+++ b/docs/0.5/table-design/table-types/pk-table/index.html
@@ -15,8 +15,8 @@
<link rel="icon" href="/img/logo.svg">
<link rel="manifest" href="/manifest.json">
<meta name="theme-color" content="#0071e3"><link rel="stylesheet" href="/assets/css/styles.53ed9f81.css">
-<script src="/assets/js/runtime~main.87feb3cc.js" defer="defer"></script>
-<script src="/assets/js/main.d75df03d.js" defer="defer"></script>
+<script src="/assets/js/runtime~main.93b61691.js" defer="defer"></script>
+<script src="/assets/js/main.9636bb89.js" defer="defer"></script>
</head>
<body class="navigation-with-keyboard">
<svg xmlns="http://www.w3.org/2000/svg" style="display: none;"><defs>
diff --git a/docs/0.6/concepts/architecture/index.html b/docs/0.6/concepts/architecture/index.html
index 7a2f959a..c9e9862d 100644
--- a/docs/0.6/concepts/architecture/index.html
+++ b/docs/0.6/concepts/architecture/index.html
@@ -15,8 +15,8 @@
<link rel="icon" href="/img/logo.svg">
<link rel="manifest" href="/manifest.json">
<meta name="theme-color" content="#0071e3"><link rel="stylesheet" href="/assets/css/styles.53ed9f81.css">
-<script src="/assets/js/runtime~main.87feb3cc.js" defer="defer"></script>
-<script src="/assets/js/main.d75df03d.js" defer="defer"></script>
+<script src="/assets/js/runtime~main.93b61691.js" defer="defer"></script>
+<script src="/assets/js/main.9636bb89.js" defer="defer"></script>
</head>
<body class="navigation-with-keyboard">
<svg xmlns="http://www.w3.org/2000/svg" style="display: none;"><defs>
diff --git a/docs/0.6/engine-flink/ddl/index.html b/docs/0.6/engine-flink/ddl/index.html
index b133fe23..f6422151 100644
--- a/docs/0.6/engine-flink/ddl/index.html
+++ b/docs/0.6/engine-flink/ddl/index.html
@@ -15,8 +15,8 @@
<link rel="icon" href="/img/logo.svg">
<link rel="manifest" href="/manifest.json">
<meta name="theme-color" content="#0071e3"><link rel="stylesheet" href="/assets/css/styles.53ed9f81.css">
-<script src="/assets/js/runtime~main.87feb3cc.js" defer="defer"></script>
-<script src="/assets/js/main.d75df03d.js" defer="defer"></script>
+<script src="/assets/js/runtime~main.93b61691.js" defer="defer"></script>
+<script src="/assets/js/main.9636bb89.js" defer="defer"></script>
</head>
<body class="navigation-with-keyboard">
<svg xmlns="http://www.w3.org/2000/svg" style="display: none;"><defs>
diff --git a/docs/0.6/engine-flink/getting-started/index.html b/docs/0.6/engine-flink/getting-started/index.html
index 3883c351..5c54406b 100644
--- a/docs/0.6/engine-flink/getting-started/index.html
+++ b/docs/0.6/engine-flink/getting-started/index.html
@@ -15,8 +15,8 @@
<link rel="icon" href="/img/logo.svg">
<link rel="manifest" href="/manifest.json">
<meta name="theme-color" content="#0071e3"><link rel="stylesheet" href="/assets/css/styles.53ed9f81.css">
-<script src="/assets/js/runtime~main.87feb3cc.js" defer="defer"></script>
-<script src="/assets/js/main.d75df03d.js" defer="defer"></script>
+<script src="/assets/js/runtime~main.93b61691.js" defer="defer"></script>
+<script src="/assets/js/main.9636bb89.js" defer="defer"></script>
</head>
<body class="navigation-with-keyboard">
<svg xmlns="http://www.w3.org/2000/svg" style="display: none;"><defs>
diff --git a/docs/0.6/engine-flink/lookups/index.html b/docs/0.6/engine-flink/lookups/index.html
index 3b791c36..0aaf74f8 100644
--- a/docs/0.6/engine-flink/lookups/index.html
+++ b/docs/0.6/engine-flink/lookups/index.html
@@ -15,8 +15,8 @@
<link rel="icon" href="/img/logo.svg">
<link rel="manifest" href="/manifest.json">
<meta name="theme-color" content="#0071e3"><link rel="stylesheet" href="/assets/css/styles.53ed9f81.css">
-<script src="/assets/js/runtime~main.87feb3cc.js" defer="defer"></script>
-<script src="/assets/js/main.d75df03d.js" defer="defer"></script>
+<script src="/assets/js/runtime~main.93b61691.js" defer="defer"></script>
+<script src="/assets/js/main.9636bb89.js" defer="defer"></script>
</head>
<body class="navigation-with-keyboard">
<svg xmlns="http://www.w3.org/2000/svg" style="display: none;"><defs>
diff --git a/docs/0.6/engine-flink/options/index.html b/docs/0.6/engine-flink/options/index.html
index 3d5c6c32..35e8ebe5 100644
--- a/docs/0.6/engine-flink/options/index.html
+++ b/docs/0.6/engine-flink/options/index.html
@@ -15,8 +15,8 @@
<link rel="icon" href="/img/logo.svg">
<link rel="manifest" href="/manifest.json">
<meta name="theme-color" content="#0071e3"><link rel="stylesheet" href="/assets/css/styles.53ed9f81.css">
-<script src="/assets/js/runtime~main.87feb3cc.js" defer="defer"></script>
-<script src="/assets/js/main.d75df03d.js" defer="defer"></script>
+<script src="/assets/js/runtime~main.93b61691.js" defer="defer"></script>
+<script src="/assets/js/main.9636bb89.js" defer="defer"></script>
</head>
<body class="navigation-with-keyboard">
<svg xmlns="http://www.w3.org/2000/svg" style="display: none;"><defs>
diff --git a/docs/0.6/engine-flink/reads/index.html b/docs/0.6/engine-flink/reads/index.html
index 174c9139..baa75e73 100644
--- a/docs/0.6/engine-flink/reads/index.html
+++ b/docs/0.6/engine-flink/reads/index.html
@@ -15,8 +15,8 @@
<link rel="icon" href="/img/logo.svg">
<link rel="manifest" href="/manifest.json">
<meta name="theme-color" content="#0071e3"><link rel="stylesheet" href="/assets/css/styles.53ed9f81.css">
-<script src="/assets/js/runtime~main.87feb3cc.js" defer="defer"></script>
-<script src="/assets/js/main.d75df03d.js" defer="defer"></script>
+<script src="/assets/js/runtime~main.93b61691.js" defer="defer"></script>
+<script src="/assets/js/main.9636bb89.js" defer="defer"></script>
</head>
<body class="navigation-with-keyboard">
<svg xmlns="http://www.w3.org/2000/svg" style="display: none;"><defs>
diff --git a/docs/0.6/engine-flink/writes/index.html b/docs/0.6/engine-flink/writes/index.html
index c1130b30..7a3990e1 100644
--- a/docs/0.6/engine-flink/writes/index.html
+++ b/docs/0.6/engine-flink/writes/index.html
@@ -15,8 +15,8 @@
<link rel="icon" href="/img/logo.svg">
<link rel="manifest" href="/manifest.json">
<meta name="theme-color" content="#0071e3"><link rel="stylesheet" href="/assets/css/styles.53ed9f81.css">
-<script src="/assets/js/runtime~main.87feb3cc.js" defer="defer"></script>
-<script src="/assets/js/main.d75df03d.js" defer="defer"></script>
+<script src="/assets/js/runtime~main.93b61691.js" defer="defer"></script>
+<script src="/assets/js/main.9636bb89.js" defer="defer"></script>
</head>
<body class="navigation-with-keyboard">
<svg xmlns="http://www.w3.org/2000/svg" style="display: none;"><defs>
diff --git a/docs/0.6/index.html b/docs/0.6/index.html
index 5b71e8b0..d84b001c 100644
--- a/docs/0.6/index.html
+++ b/docs/0.6/index.html
@@ -15,8 +15,8 @@
<link rel="icon" href="/img/logo.svg">
<link rel="manifest" href="/manifest.json">
<meta name="theme-color" content="#0071e3"><link rel="stylesheet" href="/assets/css/styles.53ed9f81.css">
-<script src="/assets/js/runtime~main.87feb3cc.js" defer="defer"></script>
-<script src="/assets/js/main.d75df03d.js" defer="defer"></script>
+<script src="/assets/js/runtime~main.93b61691.js" defer="defer"></script>
+<script src="/assets/js/main.9636bb89.js" defer="defer"></script>
</head>
<body class="navigation-with-keyboard">
<svg xmlns="http://www.w3.org/2000/svg" style="display: none;"><defs>
diff --git a/docs/0.6/install-deploy/deploying-distributed-cluster/index.html b/docs/0.6/install-deploy/deploying-distributed-cluster/index.html
index 25eaf5ba..e0e1163e 100644
--- a/docs/0.6/install-deploy/deploying-distributed-cluster/index.html
+++ b/docs/0.6/install-deploy/deploying-distributed-cluster/index.html
@@ -15,8 +15,8 @@
<link rel="icon" href="/img/logo.svg">
<link rel="manifest" href="/manifest.json">
<meta name="theme-color" content="#0071e3"><link rel="stylesheet" href="/assets/css/styles.53ed9f81.css">
-<script src="/assets/js/runtime~main.87feb3cc.js" defer="defer"></script>
-<script src="/assets/js/main.d75df03d.js" defer="defer"></script>
+<script src="/assets/js/runtime~main.93b61691.js" defer="defer"></script>
+<script src="/assets/js/main.9636bb89.js" defer="defer"></script>
</head>
<body class="navigation-with-keyboard">
<svg xmlns="http://www.w3.org/2000/svg" style="display: none;"><defs>
diff --git a/docs/0.6/install-deploy/deploying-local-cluster/index.html b/docs/0.6/install-deploy/deploying-local-cluster/index.html
index 95968c6d..22525b40 100644
--- a/docs/0.6/install-deploy/deploying-local-cluster/index.html
+++ b/docs/0.6/install-deploy/deploying-local-cluster/index.html
@@ -15,8 +15,8 @@
<link rel="icon" href="/img/logo.svg">
<link rel="manifest" href="/manifest.json">
<meta name="theme-color" content="#0071e3"><link rel="stylesheet" href="/assets/css/styles.53ed9f81.css">
-<script src="/assets/js/runtime~main.87feb3cc.js" defer="defer"></script>
-<script src="/assets/js/main.d75df03d.js" defer="defer"></script>
+<script src="/assets/js/runtime~main.93b61691.js" defer="defer"></script>
+<script src="/assets/js/main.9636bb89.js" defer="defer"></script>
</head>
<body class="navigation-with-keyboard">
<svg xmlns="http://www.w3.org/2000/svg" style="display: none;"><defs>
diff --git a/docs/0.6/install-deploy/deploying-with-docker/index.html b/docs/0.6/install-deploy/deploying-with-docker/index.html
index 441cbf51..f65aeb67 100644
--- a/docs/0.6/install-deploy/deploying-with-docker/index.html
+++ b/docs/0.6/install-deploy/deploying-with-docker/index.html
@@ -15,8 +15,8 @@
<link rel="icon" href="/img/logo.svg">
<link rel="manifest" href="/manifest.json">
<meta name="theme-color" content="#0071e3"><link rel="stylesheet" href="/assets/css/styles.53ed9f81.css">
-<script src="/assets/js/runtime~main.87feb3cc.js" defer="defer"></script>
-<script src="/assets/js/main.d75df03d.js" defer="defer"></script>
+<script src="/assets/js/runtime~main.93b61691.js" defer="defer"></script>
+<script src="/assets/js/main.9636bb89.js" defer="defer"></script>
</head>
<body class="navigation-with-keyboard">
<svg xmlns="http://www.w3.org/2000/svg" style="display: none;"><defs>
diff --git a/docs/0.6/install-deploy/overview/index.html b/docs/0.6/install-deploy/overview/index.html
index 92bb41de..05a6535d 100644
--- a/docs/0.6/install-deploy/overview/index.html
+++ b/docs/0.6/install-deploy/overview/index.html
@@ -15,8 +15,8 @@
<link rel="icon" href="/img/logo.svg">
<link rel="manifest" href="/manifest.json">
<meta name="theme-color" content="#0071e3"><link rel="stylesheet" href="/assets/css/styles.53ed9f81.css">
-<script src="/assets/js/runtime~main.87feb3cc.js" defer="defer"></script>
-<script src="/assets/js/main.d75df03d.js" defer="defer"></script>
+<script src="/assets/js/runtime~main.93b61691.js" defer="defer"></script>
+<script src="/assets/js/main.9636bb89.js" defer="defer"></script>
</head>
<body class="navigation-with-keyboard">
<svg xmlns="http://www.w3.org/2000/svg" style="display: none;"><defs>
diff --git a/docs/0.6/maintenance/configuration/index.html b/docs/0.6/maintenance/configuration/index.html
index 275f2bb8..b20bfdc5 100644
--- a/docs/0.6/maintenance/configuration/index.html
+++ b/docs/0.6/maintenance/configuration/index.html
@@ -15,8 +15,8 @@
<link rel="icon" href="/img/logo.svg">
<link rel="manifest" href="/manifest.json">
<meta name="theme-color" content="#0071e3"><link rel="stylesheet" href="/assets/css/styles.53ed9f81.css">
-<script src="/assets/js/runtime~main.87feb3cc.js" defer="defer"></script>
-<script src="/assets/js/main.d75df03d.js" defer="defer"></script>
+<script src="/assets/js/runtime~main.93b61691.js" defer="defer"></script>
+<script src="/assets/js/main.9636bb89.js" defer="defer"></script>
</head>
<body class="navigation-with-keyboard">
<svg xmlns="http://www.w3.org/2000/svg" style="display: none;"><defs>
diff --git a/docs/0.6/maintenance/filesystems/hdfs/index.html b/docs/0.6/maintenance/filesystems/hdfs/index.html
index 25798ef6..5a286e58 100644
--- a/docs/0.6/maintenance/filesystems/hdfs/index.html
+++ b/docs/0.6/maintenance/filesystems/hdfs/index.html
@@ -15,8 +15,8 @@
<link rel="icon" href="/img/logo.svg">
<link rel="manifest" href="/manifest.json">
<meta name="theme-color" content="#0071e3"><link rel="stylesheet" href="/assets/css/styles.53ed9f81.css">
-<script src="/assets/js/runtime~main.87feb3cc.js" defer="defer"></script>
-<script src="/assets/js/main.d75df03d.js" defer="defer"></script>
+<script src="/assets/js/runtime~main.93b61691.js" defer="defer"></script>
+<script src="/assets/js/main.9636bb89.js" defer="defer"></script>
</head>
<body class="navigation-with-keyboard">
<svg xmlns="http://www.w3.org/2000/svg" style="display: none;"><defs>
diff --git a/docs/0.6/maintenance/filesystems/oss/index.html b/docs/0.6/maintenance/filesystems/oss/index.html
index 5a423944..2eb6617c 100644
--- a/docs/0.6/maintenance/filesystems/oss/index.html
+++ b/docs/0.6/maintenance/filesystems/oss/index.html
@@ -15,8 +15,8 @@
<link rel="icon" href="/img/logo.svg">
<link rel="manifest" href="/manifest.json">
<meta name="theme-color" content="#0071e3"><link rel="stylesheet" href="/assets/css/styles.53ed9f81.css">
-<script src="/assets/js/runtime~main.87feb3cc.js" defer="defer"></script>
-<script src="/assets/js/main.d75df03d.js" defer="defer"></script>
+<script src="/assets/js/runtime~main.93b61691.js" defer="defer"></script>
+<script src="/assets/js/main.9636bb89.js" defer="defer"></script>
</head>
<body class="navigation-with-keyboard">
<svg xmlns="http://www.w3.org/2000/svg" style="display: none;"><defs>
diff --git a/docs/0.6/maintenance/filesystems/overview/index.html b/docs/0.6/maintenance/filesystems/overview/index.html
index e2bcd2e8..7a7149d2 100644
--- a/docs/0.6/maintenance/filesystems/overview/index.html
+++ b/docs/0.6/maintenance/filesystems/overview/index.html
@@ -15,8 +15,8 @@
<link rel="icon" href="/img/logo.svg">
<link rel="manifest" href="/manifest.json">
<meta name="theme-color" content="#0071e3"><link rel="stylesheet" href="/assets/css/styles.53ed9f81.css">
-<script src="/assets/js/runtime~main.87feb3cc.js" defer="defer"></script>
-<script src="/assets/js/main.d75df03d.js" defer="defer"></script>
+<script src="/assets/js/runtime~main.93b61691.js" defer="defer"></script>
+<script src="/assets/js/main.9636bb89.js" defer="defer"></script>
</head>
<body class="navigation-with-keyboard">
<svg xmlns="http://www.w3.org/2000/svg" style="display: none;"><defs>
diff --git a/docs/0.6/maintenance/filesystems/s3/index.html b/docs/0.6/maintenance/filesystems/s3/index.html
index d155515c..d950309b 100644
--- a/docs/0.6/maintenance/filesystems/s3/index.html
+++ b/docs/0.6/maintenance/filesystems/s3/index.html
@@ -15,8 +15,8 @@
<link rel="icon" href="/img/logo.svg">
<link rel="manifest" href="/manifest.json">
<meta name="theme-color" content="#0071e3"><link rel="stylesheet" href="/assets/css/styles.53ed9f81.css">
-<script src="/assets/js/runtime~main.87feb3cc.js" defer="defer"></script>
-<script src="/assets/js/main.d75df03d.js" defer="defer"></script>
+<script src="/assets/js/runtime~main.93b61691.js" defer="defer"></script>
+<script src="/assets/js/main.9636bb89.js" defer="defer"></script>
</head>
<body class="navigation-with-keyboard">
<svg xmlns="http://www.w3.org/2000/svg" style="display: none;"><defs>
diff --git a/docs/0.6/maintenance/observability/logging/index.html b/docs/0.6/maintenance/observability/logging/index.html
index 6ead5e89..442bc9c1 100644
--- a/docs/0.6/maintenance/observability/logging/index.html
+++ b/docs/0.6/maintenance/observability/logging/index.html
@@ -15,8 +15,8 @@
<link rel="icon" href="/img/logo.svg">
<link rel="manifest" href="/manifest.json">
<meta name="theme-color" content="#0071e3"><link rel="stylesheet" href="/assets/css/styles.53ed9f81.css">
-<script src="/assets/js/runtime~main.87feb3cc.js" defer="defer"></script>
-<script src="/assets/js/main.d75df03d.js" defer="defer"></script>
+<script src="/assets/js/runtime~main.93b61691.js" defer="defer"></script>
+<script src="/assets/js/main.9636bb89.js" defer="defer"></script>
</head>
<body class="navigation-with-keyboard">
<svg xmlns="http://www.w3.org/2000/svg" style="display: none;"><defs>
diff --git a/docs/0.6/maintenance/observability/metric-reporters/index.html b/docs/0.6/maintenance/observability/metric-reporters/index.html
index 2889536f..2e22b301 100644
--- a/docs/0.6/maintenance/observability/metric-reporters/index.html
+++ b/docs/0.6/maintenance/observability/metric-reporters/index.html
@@ -15,8 +15,8 @@
<link rel="icon" href="/img/logo.svg">
<link rel="manifest" href="/manifest.json">
<meta name="theme-color" content="#0071e3"><link rel="stylesheet" href="/assets/css/styles.53ed9f81.css">
-<script src="/assets/js/runtime~main.87feb3cc.js" defer="defer"></script>
-<script src="/assets/js/main.d75df03d.js" defer="defer"></script>
+<script src="/assets/js/runtime~main.93b61691.js" defer="defer"></script>
+<script src="/assets/js/main.9636bb89.js" defer="defer"></script>
</head>
<body class="navigation-with-keyboard">
<svg xmlns="http://www.w3.org/2000/svg" style="display: none;"><defs>
diff --git a/docs/0.6/maintenance/observability/monitor-metrics/index.html b/docs/0.6/maintenance/observability/monitor-metrics/index.html
index f3aa5ac2..4d525d42 100644
--- a/docs/0.6/maintenance/observability/monitor-metrics/index.html
+++ b/docs/0.6/maintenance/observability/monitor-metrics/index.html
@@ -15,8 +15,8 @@
<link rel="icon" href="/img/logo.svg">
<link rel="manifest" href="/manifest.json">
<meta name="theme-color" content="#0071e3"><link rel="stylesheet" href="/assets/css/styles.53ed9f81.css">
-<script src="/assets/js/runtime~main.87feb3cc.js" defer="defer"></script>
-<script src="/assets/js/main.d75df03d.js" defer="defer"></script>
+<script src="/assets/js/runtime~main.93b61691.js" defer="defer"></script>
+<script src="/assets/js/main.9636bb89.js" defer="defer"></script>
</head>
<body class="navigation-with-keyboard">
<svg xmlns="http://www.w3.org/2000/svg" style="display: none;"><defs>
diff --git a/docs/0.6/maintenance/observability/quickstart/index.html b/docs/0.6/maintenance/observability/quickstart/index.html
index 3899de9f..5b462db0 100644
--- a/docs/0.6/maintenance/observability/quickstart/index.html
+++ b/docs/0.6/maintenance/observability/quickstart/index.html
@@ -15,8 +15,8 @@
<link rel="icon" href="/img/logo.svg">
<link rel="manifest" href="/manifest.json">
<meta name="theme-color" content="#0071e3"><link rel="stylesheet" href="/assets/css/styles.53ed9f81.css">
-<script src="/assets/js/runtime~main.87feb3cc.js" defer="defer"></script>
-<script src="/assets/js/main.d75df03d.js" defer="defer"></script>
+<script src="/assets/js/runtime~main.93b61691.js" defer="defer"></script>
+<script src="/assets/js/main.9636bb89.js" defer="defer"></script>
</head>
<body class="navigation-with-keyboard">
<svg xmlns="http://www.w3.org/2000/svg" style="display: none;"><defs>
diff --git a/docs/0.6/maintenance/tiered-storage/lakehouse-storage/index.html b/docs/0.6/maintenance/tiered-storage/lakehouse-storage/index.html
index c8032e07..bcef929a 100644
--- a/docs/0.6/maintenance/tiered-storage/lakehouse-storage/index.html
+++ b/docs/0.6/maintenance/tiered-storage/lakehouse-storage/index.html
@@ -15,8 +15,8 @@
<link rel="icon" href="/img/logo.svg">
<link rel="manifest" href="/manifest.json">
<meta name="theme-color" content="#0071e3"><link rel="stylesheet" href="/assets/css/styles.53ed9f81.css">
-<script src="/assets/js/runtime~main.87feb3cc.js" defer="defer"></script>
-<script src="/assets/js/main.d75df03d.js" defer="defer"></script>
+<script src="/assets/js/runtime~main.93b61691.js" defer="defer"></script>
+<script src="/assets/js/main.9636bb89.js" defer="defer"></script>
</head>
<body class="navigation-with-keyboard">
<svg xmlns="http://www.w3.org/2000/svg" style="display: none;"><defs>
diff --git a/docs/0.6/maintenance/tiered-storage/overview/index.html b/docs/0.6/maintenance/tiered-storage/overview/index.html
index 410acd44..2398abf4 100644
--- a/docs/0.6/maintenance/tiered-storage/overview/index.html
+++ b/docs/0.6/maintenance/tiered-storage/overview/index.html
@@ -15,8 +15,8 @@
<link rel="icon" href="/img/logo.svg">
<link rel="manifest" href="/manifest.json">
<meta name="theme-color" content="#0071e3"><link rel="stylesheet" href="/assets/css/styles.53ed9f81.css">
-<script src="/assets/js/runtime~main.87feb3cc.js" defer="defer"></script>
-<script src="/assets/js/main.d75df03d.js" defer="defer"></script>
+<script src="/assets/js/runtime~main.93b61691.js" defer="defer"></script>
+<script src="/assets/js/main.9636bb89.js" defer="defer"></script>
</head>
<body class="navigation-with-keyboard">
<svg xmlns="http://www.w3.org/2000/svg" style="display: none;"><defs>
diff --git a/docs/0.6/maintenance/tiered-storage/remote-storage/index.html b/docs/0.6/maintenance/tiered-storage/remote-storage/index.html
index 43ef7f6c..61166f9d 100644
--- a/docs/0.6/maintenance/tiered-storage/remote-storage/index.html
+++ b/docs/0.6/maintenance/tiered-storage/remote-storage/index.html
@@ -15,8 +15,8 @@
<link rel="icon" href="/img/logo.svg">
<link rel="manifest" href="/manifest.json">
<meta name="theme-color" content="#0071e3"><link rel="stylesheet" href="/assets/css/styles.53ed9f81.css">
-<script src="/assets/js/runtime~main.87feb3cc.js" defer="defer"></script>
-<script src="/assets/js/main.d75df03d.js" defer="defer"></script>
+<script src="/assets/js/runtime~main.93b61691.js" defer="defer"></script>
+<script src="/assets/js/main.9636bb89.js" defer="defer"></script>
</head>
<body class="navigation-with-keyboard">
<svg xmlns="http://www.w3.org/2000/svg" style="display: none;"><defs>
diff --git a/docs/0.6/quickstart/flink/index.html b/docs/0.6/quickstart/flink/index.html
index 97468780..56c95208 100644
--- a/docs/0.6/quickstart/flink/index.html
+++ b/docs/0.6/quickstart/flink/index.html
@@ -15,8 +15,8 @@
<link rel="icon" href="/img/logo.svg">
<link rel="manifest" href="/manifest.json">
<meta name="theme-color" content="#0071e3"><link rel="stylesheet" href="/assets/css/styles.53ed9f81.css">
-<script src="/assets/js/runtime~main.87feb3cc.js" defer="defer"></script>
-<script src="/assets/js/main.d75df03d.js" defer="defer"></script>
+<script src="/assets/js/runtime~main.93b61691.js" defer="defer"></script>
+<script src="/assets/js/main.9636bb89.js" defer="defer"></script>
</head>
<body class="navigation-with-keyboard">
<svg xmlns="http://www.w3.org/2000/svg" style="display: none;"><defs>
diff --git a/docs/0.6/streaming-lakehouse/integrate-data-lakes/paimon/index.html b/docs/0.6/streaming-lakehouse/integrate-data-lakes/paimon/index.html
index e36cf3f9..075705d9 100644
--- a/docs/0.6/streaming-lakehouse/integrate-data-lakes/paimon/index.html
+++ b/docs/0.6/streaming-lakehouse/integrate-data-lakes/paimon/index.html
@@ -15,8 +15,8 @@
<link rel="icon" href="/img/logo.svg">
<link rel="manifest" href="/manifest.json">
<meta name="theme-color" content="#0071e3"><link rel="stylesheet" href="/assets/css/styles.53ed9f81.css">
-<script src="/assets/js/runtime~main.87feb3cc.js" defer="defer"></script>
-<script src="/assets/js/main.d75df03d.js" defer="defer"></script>
+<script src="/assets/js/runtime~main.93b61691.js" defer="defer"></script>
+<script src="/assets/js/main.9636bb89.js" defer="defer"></script>
</head>
<body class="navigation-with-keyboard">
<svg xmlns="http://www.w3.org/2000/svg" style="display: none;"><defs>
diff --git a/docs/0.6/streaming-lakehouse/overview/index.html b/docs/0.6/streaming-lakehouse/overview/index.html
index ae99b183..a8582527 100644
--- a/docs/0.6/streaming-lakehouse/overview/index.html
+++ b/docs/0.6/streaming-lakehouse/overview/index.html
@@ -15,8 +15,8 @@
<link rel="icon" href="/img/logo.svg">
<link rel="manifest" href="/manifest.json">
<meta name="theme-color" content="#0071e3"><link rel="stylesheet" href="/assets/css/styles.53ed9f81.css">
-<script src="/assets/js/runtime~main.87feb3cc.js" defer="defer"></script>
-<script src="/assets/js/main.d75df03d.js" defer="defer"></script>
+<script src="/assets/js/runtime~main.93b61691.js" defer="defer"></script>
+<script src="/assets/js/main.9636bb89.js" defer="defer"></script>
</head>
<body class="navigation-with-keyboard">
<svg xmlns="http://www.w3.org/2000/svg" style="display: none;"><defs>
diff --git a/docs/0.6/table-design/data-distribution/bucketing/index.html b/docs/0.6/table-design/data-distribution/bucketing/index.html
index 7b100b2c..ad6feeeb 100644
--- a/docs/0.6/table-design/data-distribution/bucketing/index.html
+++ b/docs/0.6/table-design/data-distribution/bucketing/index.html
@@ -15,8 +15,8 @@
<link rel="icon" href="/img/logo.svg">
<link rel="manifest" href="/manifest.json">
<meta name="theme-color" content="#0071e3"><link rel="stylesheet" href="/assets/css/styles.53ed9f81.css">
-<script src="/assets/js/runtime~main.87feb3cc.js" defer="defer"></script>
-<script src="/assets/js/main.d75df03d.js" defer="defer"></script>
+<script src="/assets/js/runtime~main.93b61691.js" defer="defer"></script>
+<script src="/assets/js/main.9636bb89.js" defer="defer"></script>
</head>
<body class="navigation-with-keyboard">
<svg xmlns="http://www.w3.org/2000/svg" style="display: none;"><defs>
diff --git a/docs/0.6/table-design/data-distribution/partitioning/index.html b/docs/0.6/table-design/data-distribution/partitioning/index.html
index 9a57020a..c7bc5395 100644
--- a/docs/0.6/table-design/data-distribution/partitioning/index.html
+++ b/docs/0.6/table-design/data-distribution/partitioning/index.html
@@ -15,8 +15,8 @@
<link rel="icon" href="/img/logo.svg">
<link rel="manifest" href="/manifest.json">
<meta name="theme-color" content="#0071e3"><link rel="stylesheet" href="/assets/css/styles.53ed9f81.css">
-<script src="/assets/js/runtime~main.87feb3cc.js" defer="defer"></script>
-<script src="/assets/js/main.d75df03d.js" defer="defer"></script>
+<script src="/assets/js/runtime~main.93b61691.js" defer="defer"></script>
+<script src="/assets/js/main.9636bb89.js" defer="defer"></script>
</head>
<body class="navigation-with-keyboard">
<svg xmlns="http://www.w3.org/2000/svg" style="display: none;"><defs>
diff --git a/docs/0.6/table-design/data-distribution/ttl/index.html b/docs/0.6/table-design/data-distribution/ttl/index.html
index 65bbc082..1a770151 100644
--- a/docs/0.6/table-design/data-distribution/ttl/index.html
+++ b/docs/0.6/table-design/data-distribution/ttl/index.html
@@ -15,8 +15,8 @@
<link rel="icon" href="/img/logo.svg">
<link rel="manifest" href="/manifest.json">
<meta name="theme-color" content="#0071e3"><link rel="stylesheet" href="/assets/css/styles.53ed9f81.css">
-<script src="/assets/js/runtime~main.87feb3cc.js" defer="defer"></script>
-<script src="/assets/js/main.d75df03d.js" defer="defer"></script>
+<script src="/assets/js/runtime~main.93b61691.js" defer="defer"></script>
+<script src="/assets/js/main.9636bb89.js" defer="defer"></script>
</head>
<body class="navigation-with-keyboard">
<svg xmlns="http://www.w3.org/2000/svg" style="display: none;"><defs>
diff --git a/docs/0.6/table-design/data-types/index.html b/docs/0.6/table-design/data-types/index.html
index 6e309056..e98c1bb8 100644
--- a/docs/0.6/table-design/data-types/index.html
+++ b/docs/0.6/table-design/data-types/index.html
@@ -15,8 +15,8 @@
<link rel="icon" href="/img/logo.svg">
<link rel="manifest" href="/manifest.json">
<meta name="theme-color" content="#0071e3"><link rel="stylesheet" href="/assets/css/styles.53ed9f81.css">
-<script src="/assets/js/runtime~main.87feb3cc.js" defer="defer"></script>
-<script src="/assets/js/main.d75df03d.js" defer="defer"></script>
+<script src="/assets/js/runtime~main.93b61691.js" defer="defer"></script>
+<script src="/assets/js/main.9636bb89.js" defer="defer"></script>
</head>
<body class="navigation-with-keyboard">
<svg xmlns="http://www.w3.org/2000/svg" style="display: none;"><defs>
diff --git a/docs/0.6/table-design/overview/index.html b/docs/0.6/table-design/overview/index.html
index 3f0be746..20290a62 100644
--- a/docs/0.6/table-design/overview/index.html
+++ b/docs/0.6/table-design/overview/index.html
@@ -15,8 +15,8 @@
<link rel="icon" href="/img/logo.svg">
<link rel="manifest" href="/manifest.json">
<meta name="theme-color" content="#0071e3"><link rel="stylesheet" href="/assets/css/styles.53ed9f81.css">
-<script src="/assets/js/runtime~main.87feb3cc.js" defer="defer"></script>
-<script src="/assets/js/main.d75df03d.js" defer="defer"></script>
+<script src="/assets/js/runtime~main.93b61691.js" defer="defer"></script>
+<script src="/assets/js/main.9636bb89.js" defer="defer"></script>
</head>
<body class="navigation-with-keyboard">
<svg xmlns="http://www.w3.org/2000/svg" style="display: none;"><defs>
diff --git a/docs/0.6/table-design/table-types/log-table/index.html b/docs/0.6/table-design/table-types/log-table/index.html
index cfd296f8..82cc6fce 100644
--- a/docs/0.6/table-design/table-types/log-table/index.html
+++ b/docs/0.6/table-design/table-types/log-table/index.html
@@ -15,8 +15,8 @@
<link rel="icon" href="/img/logo.svg">
<link rel="manifest" href="/manifest.json">
<meta name="theme-color" content="#0071e3"><link rel="stylesheet" href="/assets/css/styles.53ed9f81.css">
-<script src="/assets/js/runtime~main.87feb3cc.js" defer="defer"></script>
-<script src="/assets/js/main.d75df03d.js" defer="defer"></script>
+<script src="/assets/js/runtime~main.93b61691.js" defer="defer"></script>
+<script src="/assets/js/main.9636bb89.js" defer="defer"></script>
</head>
<body class="navigation-with-keyboard">
<svg xmlns="http://www.w3.org/2000/svg" style="display: none;"><defs>
diff --git a/docs/0.6/table-design/table-types/pk-table/index.html b/docs/0.6/table-design/table-types/pk-table/index.html
index 2685c63b..3a2855a7 100644
--- a/docs/0.6/table-design/table-types/pk-table/index.html
+++ b/docs/0.6/table-design/table-types/pk-table/index.html
@@ -15,8 +15,8 @@
<link rel="icon" href="/img/logo.svg">
<link rel="manifest" href="/manifest.json">
<meta name="theme-color" content="#0071e3"><link rel="stylesheet" href="/assets/css/styles.53ed9f81.css">
-<script src="/assets/js/runtime~main.87feb3cc.js" defer="defer"></script>
-<script src="/assets/js/main.d75df03d.js" defer="defer"></script>
+<script src="/assets/js/runtime~main.93b61691.js" defer="defer"></script>
+<script src="/assets/js/main.9636bb89.js" defer="defer"></script>
</head>
<body class="navigation-with-keyboard">
<svg xmlns="http://www.w3.org/2000/svg" style="display: none;"><defs>
diff --git a/docs/0.6/table-design/table-types/pk-table/merge-engines/first-row/index.html b/docs/0.6/table-design/table-types/pk-table/merge-engines/first-row/index.html
index 421af2b7..fea9339d 100644
--- a/docs/0.6/table-design/table-types/pk-table/merge-engines/first-row/index.html
+++ b/docs/0.6/table-design/table-types/pk-table/merge-engines/first-row/index.html
@@ -15,8 +15,8 @@
<link rel="icon" href="/img/logo.svg">
<link rel="manifest" href="/manifest.json">
<meta name="theme-color" content="#0071e3"><link rel="stylesheet" href="/assets/css/styles.53ed9f81.css">
-<script src="/assets/js/runtime~main.87feb3cc.js" defer="defer"></script>
-<script src="/assets/js/main.d75df03d.js" defer="defer"></script>
+<script src="/assets/js/runtime~main.93b61691.js" defer="defer"></script>
+<script src="/assets/js/main.9636bb89.js" defer="defer"></script>
</head>
<body class="navigation-with-keyboard">
<svg xmlns="http://www.w3.org/2000/svg" style="display: none;"><defs>
diff --git a/docs/0.6/table-design/table-types/pk-table/merge-engines/index.html b/docs/0.6/table-design/table-types/pk-table/merge-engines/index.html
index 061c40b7..074885c2 100644
--- a/docs/0.6/table-design/table-types/pk-table/merge-engines/index.html
+++ b/docs/0.6/table-design/table-types/pk-table/merge-engines/index.html
@@ -15,8 +15,8 @@
<link rel="icon" href="/img/logo.svg">
<link rel="manifest" href="/manifest.json">
<meta name="theme-color" content="#0071e3"><link rel="stylesheet" href="/assets/css/styles.53ed9f81.css">
-<script src="/assets/js/runtime~main.87feb3cc.js" defer="defer"></script>
-<script src="/assets/js/main.d75df03d.js" defer="defer"></script>
+<script src="/assets/js/runtime~main.93b61691.js" defer="defer"></script>
+<script src="/assets/js/main.9636bb89.js" defer="defer"></script>
</head>
<body class="navigation-with-keyboard">
<svg xmlns="http://www.w3.org/2000/svg" style="display: none;"><defs>
diff --git a/docs/0.6/table-design/table-types/pk-table/merge-engines/versioned/index.html b/docs/0.6/table-design/table-types/pk-table/merge-engines/versioned/index.html
index c5686baf..82bde988 100644
--- a/docs/0.6/table-design/table-types/pk-table/merge-engines/versioned/index.html
+++ b/docs/0.6/table-design/table-types/pk-table/merge-engines/versioned/index.html
@@ -15,8 +15,8 @@
<link rel="icon" href="/img/logo.svg">
<link rel="manifest" href="/manifest.json">
<meta name="theme-color" content="#0071e3"><link rel="stylesheet" href="/assets/css/styles.53ed9f81.css">
-<script src="/assets/js/runtime~main.87feb3cc.js" defer="defer"></script>
-<script src="/assets/js/main.d75df03d.js" defer="defer"></script>
+<script src="/assets/js/runtime~main.93b61691.js" defer="defer"></script>
+<script src="/assets/js/main.9636bb89.js" defer="defer"></script>
</head>
<body class="navigation-with-keyboard">
<svg xmlns="http://www.w3.org/2000/svg" style="display: none;"><defs>
diff --git a/docs/apis/java-client/index.html b/docs/apis/java-client/index.html
index 0510d6e1..a2741887 100644
--- a/docs/apis/java-client/index.html
+++ b/docs/apis/java-client/index.html
@@ -15,8 +15,8 @@
<link rel="icon" href="/img/logo.svg">
<link rel="manifest" href="/manifest.json">
<meta name="theme-color" content="#0071e3"><link rel="stylesheet" href="/assets/css/styles.53ed9f81.css">
-<script src="/assets/js/runtime~main.87feb3cc.js" defer="defer"></script>
-<script src="/assets/js/main.d75df03d.js" defer="defer"></script>
+<script src="/assets/js/runtime~main.93b61691.js" defer="defer"></script>
+<script src="/assets/js/main.9636bb89.js" defer="defer"></script>
</head>
<body class="navigation-with-keyboard">
<svg xmlns="http://www.w3.org/2000/svg" style="display: none;"><defs>
diff --git a/docs/concepts/architecture/index.html b/docs/concepts/architecture/index.html
index 14345d6d..e7dfcc7f 100644
--- a/docs/concepts/architecture/index.html
+++ b/docs/concepts/architecture/index.html
@@ -15,8 +15,8 @@
<link rel="icon" href="/img/logo.svg">
<link rel="manifest" href="/manifest.json">
<meta name="theme-color" content="#0071e3"><link rel="stylesheet" href="/assets/css/styles.53ed9f81.css">
-<script src="/assets/js/runtime~main.87feb3cc.js" defer="defer"></script>
-<script src="/assets/js/main.d75df03d.js" defer="defer"></script>
+<script src="/assets/js/runtime~main.93b61691.js" defer="defer"></script>
+<script src="/assets/js/main.9636bb89.js" defer="defer"></script>
</head>
<body class="navigation-with-keyboard">
<svg xmlns="http://www.w3.org/2000/svg" style="display: none;"><defs>
diff --git a/docs/engine-flink/datastream/index.html b/docs/engine-flink/datastream/index.html
index 0a0b7ff1..f8974540 100644
--- a/docs/engine-flink/datastream/index.html
+++ b/docs/engine-flink/datastream/index.html
@@ -15,8 +15,8 @@
<link rel="icon" href="/img/logo.svg">
<link rel="manifest" href="/manifest.json">
<meta name="theme-color" content="#0071e3"><link rel="stylesheet" href="/assets/css/styles.53ed9f81.css">
-<script src="/assets/js/runtime~main.87feb3cc.js" defer="defer"></script>
-<script src="/assets/js/main.d75df03d.js" defer="defer"></script>
+<script src="/assets/js/runtime~main.93b61691.js" defer="defer"></script>
+<script src="/assets/js/main.9636bb89.js" defer="defer"></script>
</head>
<body class="navigation-with-keyboard">
<svg xmlns="http://www.w3.org/2000/svg" style="display: none;"><defs>
diff --git a/docs/engine-flink/ddl/index.html b/docs/engine-flink/ddl/index.html
index 1f73043b..ff4ef1c1 100644
--- a/docs/engine-flink/ddl/index.html
+++ b/docs/engine-flink/ddl/index.html
@@ -15,8 +15,8 @@
<link rel="icon" href="/img/logo.svg">
<link rel="manifest" href="/manifest.json">
<meta name="theme-color" content="#0071e3"><link rel="stylesheet" href="/assets/css/styles.53ed9f81.css">
-<script src="/assets/js/runtime~main.87feb3cc.js" defer="defer"></script>
-<script src="/assets/js/main.d75df03d.js" defer="defer"></script>
+<script src="/assets/js/runtime~main.93b61691.js" defer="defer"></script>
+<script src="/assets/js/main.9636bb89.js" defer="defer"></script>
</head>
<body class="navigation-with-keyboard">
<svg xmlns="http://www.w3.org/2000/svg" style="display: none;"><defs>
diff --git a/docs/engine-flink/getting-started/index.html b/docs/engine-flink/getting-started/index.html
index 5175463b..e0dd45d6 100644
--- a/docs/engine-flink/getting-started/index.html
+++ b/docs/engine-flink/getting-started/index.html
@@ -15,8 +15,8 @@
<link rel="icon" href="/img/logo.svg">
<link rel="manifest" href="/manifest.json">
<meta name="theme-color" content="#0071e3"><link rel="stylesheet" href="/assets/css/styles.53ed9f81.css">
-<script src="/assets/js/runtime~main.87feb3cc.js" defer="defer"></script>
-<script src="/assets/js/main.d75df03d.js" defer="defer"></script>
+<script src="/assets/js/runtime~main.93b61691.js" defer="defer"></script>
+<script src="/assets/js/main.9636bb89.js" defer="defer"></script>
</head>
<body class="navigation-with-keyboard">
<svg xmlns="http://www.w3.org/2000/svg" style="display: none;"><defs>
diff --git a/docs/engine-flink/lookups/index.html b/docs/engine-flink/lookups/index.html
index cd9154c4..4621a384 100644
--- a/docs/engine-flink/lookups/index.html
+++ b/docs/engine-flink/lookups/index.html
@@ -15,8 +15,8 @@
<link rel="icon" href="/img/logo.svg">
<link rel="manifest" href="/manifest.json">
<meta name="theme-color" content="#0071e3"><link rel="stylesheet" href="/assets/css/styles.53ed9f81.css">
-<script src="/assets/js/runtime~main.87feb3cc.js" defer="defer"></script>
-<script src="/assets/js/main.d75df03d.js" defer="defer"></script>
+<script src="/assets/js/runtime~main.93b61691.js" defer="defer"></script>
+<script src="/assets/js/main.9636bb89.js" defer="defer"></script>
</head>
<body class="navigation-with-keyboard">
<svg xmlns="http://www.w3.org/2000/svg" style="display: none;"><defs>
diff --git a/docs/engine-flink/options/index.html b/docs/engine-flink/options/index.html
index 9cb24454..439cb6bf 100644
--- a/docs/engine-flink/options/index.html
+++ b/docs/engine-flink/options/index.html
@@ -15,8 +15,8 @@
<link rel="icon" href="/img/logo.svg">
<link rel="manifest" href="/manifest.json">
<meta name="theme-color" content="#0071e3"><link rel="stylesheet" href="/assets/css/styles.53ed9f81.css">
-<script src="/assets/js/runtime~main.87feb3cc.js" defer="defer"></script>
-<script src="/assets/js/main.d75df03d.js" defer="defer"></script>
+<script src="/assets/js/runtime~main.93b61691.js" defer="defer"></script>
+<script src="/assets/js/main.9636bb89.js" defer="defer"></script>
</head>
<body class="navigation-with-keyboard">
<svg xmlns="http://www.w3.org/2000/svg" style="display: none;"><defs>
diff --git a/docs/engine-flink/reads/index.html b/docs/engine-flink/reads/index.html
index b4a83a25..f031c7c6 100644
--- a/docs/engine-flink/reads/index.html
+++ b/docs/engine-flink/reads/index.html
@@ -15,8 +15,8 @@
<link rel="icon" href="/img/logo.svg">
<link rel="manifest" href="/manifest.json">
<meta name="theme-color" content="#0071e3"><link rel="stylesheet" href="/assets/css/styles.53ed9f81.css">
-<script src="/assets/js/runtime~main.87feb3cc.js" defer="defer"></script>
-<script src="/assets/js/main.d75df03d.js" defer="defer"></script>
+<script src="/assets/js/runtime~main.93b61691.js" defer="defer"></script>
+<script src="/assets/js/main.9636bb89.js" defer="defer"></script>
</head>
<body class="navigation-with-keyboard">
<svg xmlns="http://www.w3.org/2000/svg" style="display: none;"><defs>
diff --git a/docs/engine-flink/writes/index.html b/docs/engine-flink/writes/index.html
index 58a2521c..893d273b 100644
--- a/docs/engine-flink/writes/index.html
+++ b/docs/engine-flink/writes/index.html
@@ -15,8 +15,8 @@
<link rel="icon" href="/img/logo.svg">
<link rel="manifest" href="/manifest.json">
<meta name="theme-color" content="#0071e3"><link rel="stylesheet" href="/assets/css/styles.53ed9f81.css">
-<script src="/assets/js/runtime~main.87feb3cc.js" defer="defer"></script>
-<script src="/assets/js/main.d75df03d.js" defer="defer"></script>
+<script src="/assets/js/runtime~main.93b61691.js" defer="defer"></script>
+<script src="/assets/js/main.9636bb89.js" defer="defer"></script>
</head>
<body class="navigation-with-keyboard">
<svg xmlns="http://www.w3.org/2000/svg" style="display: none;"><defs>
diff --git a/docs/index.html b/docs/index.html
index ba2e045e..3558793e 100644
--- a/docs/index.html
+++ b/docs/index.html
@@ -15,8 +15,8 @@
<link rel="icon" href="/img/logo.svg">
<link rel="manifest" href="/manifest.json">
<meta name="theme-color" content="#0071e3"><link rel="stylesheet" href="/assets/css/styles.53ed9f81.css">
-<script src="/assets/js/runtime~main.87feb3cc.js" defer="defer"></script>
-<script src="/assets/js/main.d75df03d.js" defer="defer"></script>
+<script src="/assets/js/runtime~main.93b61691.js" defer="defer"></script>
+<script src="/assets/js/main.9636bb89.js" defer="defer"></script>
</head>
<body class="navigation-with-keyboard">
<svg xmlns="http://www.w3.org/2000/svg" style="display: none;"><defs>
diff --git a/docs/install-deploy/deploying-distributed-cluster/index.html b/docs/install-deploy/deploying-distributed-cluster/index.html
index 6375e757..9c3e05ee 100644
--- a/docs/install-deploy/deploying-distributed-cluster/index.html
+++ b/docs/install-deploy/deploying-distributed-cluster/index.html
@@ -15,8 +15,8 @@
<link rel="icon" href="/img/logo.svg">
<link rel="manifest" href="/manifest.json">
<meta name="theme-color" content="#0071e3"><link rel="stylesheet" href="/assets/css/styles.53ed9f81.css">
-<script src="/assets/js/runtime~main.87feb3cc.js" defer="defer"></script>
-<script src="/assets/js/main.d75df03d.js" defer="defer"></script>
+<script src="/assets/js/runtime~main.93b61691.js" defer="defer"></script>
+<script src="/assets/js/main.9636bb89.js" defer="defer"></script>
</head>
<body class="navigation-with-keyboard">
<svg xmlns="http://www.w3.org/2000/svg" style="display: none;"><defs>
diff --git a/docs/install-deploy/deploying-local-cluster/index.html b/docs/install-deploy/deploying-local-cluster/index.html
index fa43d458..5c9fea7f 100644
--- a/docs/install-deploy/deploying-local-cluster/index.html
+++ b/docs/install-deploy/deploying-local-cluster/index.html
@@ -15,8 +15,8 @@
<link rel="icon" href="/img/logo.svg">
<link rel="manifest" href="/manifest.json">
<meta name="theme-color" content="#0071e3"><link rel="stylesheet" href="/assets/css/styles.53ed9f81.css">
-<script src="/assets/js/runtime~main.87feb3cc.js" defer="defer"></script>
-<script src="/assets/js/main.d75df03d.js" defer="defer"></script>
+<script src="/assets/js/runtime~main.93b61691.js" defer="defer"></script>
+<script src="/assets/js/main.9636bb89.js" defer="defer"></script>
</head>
<body class="navigation-with-keyboard">
<svg xmlns="http://www.w3.org/2000/svg" style="display: none;"><defs>
diff --git a/docs/install-deploy/deploying-with-docker/index.html b/docs/install-deploy/deploying-with-docker/index.html
index 505957ac..431b0e31 100644
--- a/docs/install-deploy/deploying-with-docker/index.html
+++ b/docs/install-deploy/deploying-with-docker/index.html
@@ -15,8 +15,8 @@
<link rel="icon" href="/img/logo.svg">
<link rel="manifest" href="/manifest.json">
<meta name="theme-color" content="#0071e3"><link rel="stylesheet" href="/assets/css/styles.53ed9f81.css">
-<script src="/assets/js/runtime~main.87feb3cc.js" defer="defer"></script>
-<script src="/assets/js/main.d75df03d.js" defer="defer"></script>
+<script src="/assets/js/runtime~main.93b61691.js" defer="defer"></script>
+<script src="/assets/js/main.9636bb89.js" defer="defer"></script>
</head>
<body class="navigation-with-keyboard">
<svg xmlns="http://www.w3.org/2000/svg" style="display: none;"><defs>
diff --git a/docs/install-deploy/overview/index.html b/docs/install-deploy/overview/index.html
index f662987f..a4a223ba 100644
--- a/docs/install-deploy/overview/index.html
+++ b/docs/install-deploy/overview/index.html
@@ -15,8 +15,8 @@
<link rel="icon" href="/img/logo.svg">
<link rel="manifest" href="/manifest.json">
<meta name="theme-color" content="#0071e3"><link rel="stylesheet" href="/assets/css/styles.53ed9f81.css">
-<script src="/assets/js/runtime~main.87feb3cc.js" defer="defer"></script>
-<script src="/assets/js/main.d75df03d.js" defer="defer"></script>
+<script src="/assets/js/runtime~main.93b61691.js" defer="defer"></script>
+<script src="/assets/js/main.9636bb89.js" defer="defer"></script>
</head>
<body class="navigation-with-keyboard">
<svg xmlns="http://www.w3.org/2000/svg" style="display: none;"><defs>
diff --git a/docs/maintenance/configuration/index.html b/docs/maintenance/configuration/index.html
index 045a5a95..89e3b19e 100644
--- a/docs/maintenance/configuration/index.html
+++ b/docs/maintenance/configuration/index.html
@@ -15,8 +15,8 @@
<link rel="icon" href="/img/logo.svg">
<link rel="manifest" href="/manifest.json">
<meta name="theme-color" content="#0071e3"><link rel="stylesheet" href="/assets/css/styles.53ed9f81.css">
-<script src="/assets/js/runtime~main.87feb3cc.js" defer="defer"></script>
-<script src="/assets/js/main.d75df03d.js" defer="defer"></script>
+<script src="/assets/js/runtime~main.93b61691.js" defer="defer"></script>
+<script src="/assets/js/main.9636bb89.js" defer="defer"></script>
</head>
<body class="navigation-with-keyboard">
<svg xmlns="http://www.w3.org/2000/svg" style="display: none;"><defs>
diff --git a/docs/maintenance/filesystems/hdfs/index.html b/docs/maintenance/filesystems/hdfs/index.html
index 8dd05327..6bf2d0e4 100644
--- a/docs/maintenance/filesystems/hdfs/index.html
+++ b/docs/maintenance/filesystems/hdfs/index.html
@@ -15,8 +15,8 @@
<link rel="icon" href="/img/logo.svg">
<link rel="manifest" href="/manifest.json">
<meta name="theme-color" content="#0071e3"><link rel="stylesheet" href="/assets/css/styles.53ed9f81.css">
-<script src="/assets/js/runtime~main.87feb3cc.js" defer="defer"></script>
-<script src="/assets/js/main.d75df03d.js" defer="defer"></script>
+<script src="/assets/js/runtime~main.93b61691.js" defer="defer"></script>
+<script src="/assets/js/main.9636bb89.js" defer="defer"></script>
</head>
<body class="navigation-with-keyboard">
<svg xmlns="http://www.w3.org/2000/svg" style="display: none;"><defs>
diff --git a/docs/maintenance/filesystems/oss/index.html b/docs/maintenance/filesystems/oss/index.html
index cd4225a7..96aa0f4d 100644
--- a/docs/maintenance/filesystems/oss/index.html
+++ b/docs/maintenance/filesystems/oss/index.html
@@ -15,8 +15,8 @@
<link rel="icon" href="/img/logo.svg">
<link rel="manifest" href="/manifest.json">
<meta name="theme-color" content="#0071e3"><link rel="stylesheet" href="/assets/css/styles.53ed9f81.css">
-<script src="/assets/js/runtime~main.87feb3cc.js" defer="defer"></script>
-<script src="/assets/js/main.d75df03d.js" defer="defer"></script>
+<script src="/assets/js/runtime~main.93b61691.js" defer="defer"></script>
+<script src="/assets/js/main.9636bb89.js" defer="defer"></script>
</head>
<body class="navigation-with-keyboard">
<svg xmlns="http://www.w3.org/2000/svg" style="display: none;"><defs>
diff --git a/docs/maintenance/filesystems/overview/index.html b/docs/maintenance/filesystems/overview/index.html
index 03adb732..c18135ac 100644
--- a/docs/maintenance/filesystems/overview/index.html
+++ b/docs/maintenance/filesystems/overview/index.html
@@ -15,8 +15,8 @@
<link rel="icon" href="/img/logo.svg">
<link rel="manifest" href="/manifest.json">
<meta name="theme-color" content="#0071e3"><link rel="stylesheet" href="/assets/css/styles.53ed9f81.css">
-<script src="/assets/js/runtime~main.87feb3cc.js" defer="defer"></script>
-<script src="/assets/js/main.d75df03d.js" defer="defer"></script>
+<script src="/assets/js/runtime~main.93b61691.js" defer="defer"></script>
+<script src="/assets/js/main.9636bb89.js" defer="defer"></script>
</head>
<body class="navigation-with-keyboard">
<svg xmlns="http://www.w3.org/2000/svg" style="display: none;"><defs>
diff --git a/docs/maintenance/filesystems/s3/index.html b/docs/maintenance/filesystems/s3/index.html
index 7c73e6fd..7ea30493 100644
--- a/docs/maintenance/filesystems/s3/index.html
+++ b/docs/maintenance/filesystems/s3/index.html
@@ -15,8 +15,8 @@
<link rel="icon" href="/img/logo.svg">
<link rel="manifest" href="/manifest.json">
<meta name="theme-color" content="#0071e3"><link rel="stylesheet" href="/assets/css/styles.53ed9f81.css">
-<script src="/assets/js/runtime~main.87feb3cc.js" defer="defer"></script>
-<script src="/assets/js/main.d75df03d.js" defer="defer"></script>
+<script src="/assets/js/runtime~main.93b61691.js" defer="defer"></script>
+<script src="/assets/js/main.9636bb89.js" defer="defer"></script>
</head>
<body class="navigation-with-keyboard">
<svg xmlns="http://www.w3.org/2000/svg" style="display: none;"><defs>
diff --git a/docs/maintenance/observability/logging/index.html b/docs/maintenance/observability/logging/index.html
index 10f6773b..cc79a999 100644
--- a/docs/maintenance/observability/logging/index.html
+++ b/docs/maintenance/observability/logging/index.html
@@ -15,8 +15,8 @@
<link rel="icon" href="/img/logo.svg">
<link rel="manifest" href="/manifest.json">
<meta name="theme-color" content="#0071e3"><link rel="stylesheet" href="/assets/css/styles.53ed9f81.css">
-<script src="/assets/js/runtime~main.87feb3cc.js" defer="defer"></script>
-<script src="/assets/js/main.d75df03d.js" defer="defer"></script>
+<script src="/assets/js/runtime~main.93b61691.js" defer="defer"></script>
+<script src="/assets/js/main.9636bb89.js" defer="defer"></script>
</head>
<body class="navigation-with-keyboard">
<svg xmlns="http://www.w3.org/2000/svg" style="display: none;"><defs>
diff --git a/docs/maintenance/observability/metric-reporters/index.html b/docs/maintenance/observability/metric-reporters/index.html
index 21f8c2b2..f5f2d86c 100644
--- a/docs/maintenance/observability/metric-reporters/index.html
+++ b/docs/maintenance/observability/metric-reporters/index.html
@@ -15,8 +15,8 @@
<link rel="icon" href="/img/logo.svg">
<link rel="manifest" href="/manifest.json">
<meta name="theme-color" content="#0071e3"><link rel="stylesheet" href="/assets/css/styles.53ed9f81.css">
-<script src="/assets/js/runtime~main.87feb3cc.js" defer="defer"></script>
-<script src="/assets/js/main.d75df03d.js" defer="defer"></script>
+<script src="/assets/js/runtime~main.93b61691.js" defer="defer"></script>
+<script src="/assets/js/main.9636bb89.js" defer="defer"></script>
</head>
<body class="navigation-with-keyboard">
<svg xmlns="http://www.w3.org/2000/svg" style="display: none;"><defs>
diff --git a/docs/maintenance/observability/monitor-metrics/index.html b/docs/maintenance/observability/monitor-metrics/index.html
index 23df3c47..5baf62fb 100644
--- a/docs/maintenance/observability/monitor-metrics/index.html
+++ b/docs/maintenance/observability/monitor-metrics/index.html
@@ -15,8 +15,8 @@
<link rel="icon" href="/img/logo.svg">
<link rel="manifest" href="/manifest.json">
<meta name="theme-color" content="#0071e3"><link rel="stylesheet" href="/assets/css/styles.53ed9f81.css">
-<script src="/assets/js/runtime~main.87feb3cc.js" defer="defer"></script>
-<script src="/assets/js/main.d75df03d.js" defer="defer"></script>
+<script src="/assets/js/runtime~main.93b61691.js" defer="defer"></script>
+<script src="/assets/js/main.9636bb89.js" defer="defer"></script>
</head>
<body class="navigation-with-keyboard">
<svg xmlns="http://www.w3.org/2000/svg" style="display: none;"><defs>
diff --git a/docs/maintenance/observability/quickstart/index.html b/docs/maintenance/observability/quickstart/index.html
index 0b86f441..605b469e 100644
--- a/docs/maintenance/observability/quickstart/index.html
+++ b/docs/maintenance/observability/quickstart/index.html
@@ -15,8 +15,8 @@
<link rel="icon" href="/img/logo.svg">
<link rel="manifest" href="/manifest.json">
<meta name="theme-color" content="#0071e3"><link rel="stylesheet" href="/assets/css/styles.53ed9f81.css">
-<script src="/assets/js/runtime~main.87feb3cc.js" defer="defer"></script>
-<script src="/assets/js/main.d75df03d.js" defer="defer"></script>
+<script src="/assets/js/runtime~main.93b61691.js" defer="defer"></script>
+<script src="/assets/js/main.9636bb89.js" defer="defer"></script>
</head>
<body class="navigation-with-keyboard">
<svg xmlns="http://www.w3.org/2000/svg" style="display: none;"><defs>
diff --git a/docs/maintenance/operations/racks/index.html b/docs/maintenance/operations/racks/index.html
index 3461d416..978c08ed 100644
--- a/docs/maintenance/operations/racks/index.html
+++ b/docs/maintenance/operations/racks/index.html
@@ -15,8 +15,8 @@
<link rel="icon" href="/img/logo.svg">
<link rel="manifest" href="/manifest.json">
<meta name="theme-color" content="#0071e3"><link rel="stylesheet" href="/assets/css/styles.53ed9f81.css">
-<script src="/assets/js/runtime~main.87feb3cc.js" defer="defer"></script>
-<script src="/assets/js/main.d75df03d.js" defer="defer"></script>
+<script src="/assets/js/runtime~main.93b61691.js" defer="defer"></script>
+<script src="/assets/js/main.9636bb89.js" defer="defer"></script>
</head>
<body class="navigation-with-keyboard">
<svg xmlns="http://www.w3.org/2000/svg" style="display: none;"><defs>
diff --git a/docs/maintenance/operations/upgrading/index.html b/docs/maintenance/operations/upgrading/index.html
index 44d8c767..7a5036a0 100644
--- a/docs/maintenance/operations/upgrading/index.html
+++ b/docs/maintenance/operations/upgrading/index.html
@@ -15,8 +15,8 @@
<link rel="icon" href="/img/logo.svg">
<link rel="manifest" href="/manifest.json">
<meta name="theme-color" content="#0071e3"><link rel="stylesheet" href="/assets/css/styles.53ed9f81.css">
-<script src="/assets/js/runtime~main.87feb3cc.js" defer="defer"></script>
-<script src="/assets/js/main.d75df03d.js" defer="defer"></script>
+<script src="/assets/js/runtime~main.93b61691.js" defer="defer"></script>
+<script src="/assets/js/main.9636bb89.js" defer="defer"></script>
</head>
<body class="navigation-with-keyboard">
<svg xmlns="http://www.w3.org/2000/svg" style="display: none;"><defs>
diff --git a/docs/maintenance/tiered-storage/lakehouse-storage/index.html b/docs/maintenance/tiered-storage/lakehouse-storage/index.html
index d2c0c358..120befcb 100644
--- a/docs/maintenance/tiered-storage/lakehouse-storage/index.html
+++ b/docs/maintenance/tiered-storage/lakehouse-storage/index.html
@@ -15,8 +15,8 @@
<link rel="icon" href="/img/logo.svg">
<link rel="manifest" href="/manifest.json">
<meta name="theme-color" content="#0071e3"><link rel="stylesheet" href="/assets/css/styles.53ed9f81.css">
-<script src="/assets/js/runtime~main.87feb3cc.js" defer="defer"></script>
-<script src="/assets/js/main.d75df03d.js" defer="defer"></script>
+<script src="/assets/js/runtime~main.93b61691.js" defer="defer"></script>
+<script src="/assets/js/main.9636bb89.js" defer="defer"></script>
</head>
<body class="navigation-with-keyboard">
<svg xmlns="http://www.w3.org/2000/svg" style="display: none;"><defs>
diff --git a/docs/maintenance/tiered-storage/overview/index.html b/docs/maintenance/tiered-storage/overview/index.html
index 234bd8cc..1fd04542 100644
--- a/docs/maintenance/tiered-storage/overview/index.html
+++ b/docs/maintenance/tiered-storage/overview/index.html
@@ -15,8 +15,8 @@
<link rel="icon" href="/img/logo.svg">
<link rel="manifest" href="/manifest.json">
<meta name="theme-color" content="#0071e3"><link rel="stylesheet" href="/assets/css/styles.53ed9f81.css">
-<script src="/assets/js/runtime~main.87feb3cc.js" defer="defer"></script>
-<script src="/assets/js/main.d75df03d.js" defer="defer"></script>
+<script src="/assets/js/runtime~main.93b61691.js" defer="defer"></script>
+<script src="/assets/js/main.9636bb89.js" defer="defer"></script>
</head>
<body class="navigation-with-keyboard">
<svg xmlns="http://www.w3.org/2000/svg" style="display: none;"><defs>
diff --git a/docs/maintenance/tiered-storage/remote-storage/index.html b/docs/maintenance/tiered-storage/remote-storage/index.html
index 0edc7a9f..32e2afaa 100644
--- a/docs/maintenance/tiered-storage/remote-storage/index.html
+++ b/docs/maintenance/tiered-storage/remote-storage/index.html
@@ -15,8 +15,8 @@
<link rel="icon" href="/img/logo.svg">
<link rel="manifest" href="/manifest.json">
<meta name="theme-color" content="#0071e3"><link rel="stylesheet" href="/assets/css/styles.53ed9f81.css">
-<script src="/assets/js/runtime~main.87feb3cc.js" defer="defer"></script>
-<script src="/assets/js/main.d75df03d.js" defer="defer"></script>
+<script src="/assets/js/runtime~main.93b61691.js" defer="defer"></script>
+<script src="/assets/js/main.9636bb89.js" defer="defer"></script>
</head>
<body class="navigation-with-keyboard">
<svg xmlns="http://www.w3.org/2000/svg" style="display: none;"><defs>
diff --git a/docs/next/apis/java-client/index.html b/docs/next/apis/java-client/index.html
index f4e98922..f0407d9a 100644
--- a/docs/next/apis/java-client/index.html
+++ b/docs/next/apis/java-client/index.html
@@ -15,8 +15,8 @@
<link rel="icon" href="/img/logo.svg">
<link rel="manifest" href="/manifest.json">
<meta name="theme-color" content="#0071e3"><link rel="stylesheet" href="/assets/css/styles.53ed9f81.css">
-<script src="/assets/js/runtime~main.87feb3cc.js" defer="defer"></script>
-<script src="/assets/js/main.d75df03d.js" defer="defer"></script>
+<script src="/assets/js/runtime~main.93b61691.js" defer="defer"></script>
+<script src="/assets/js/main.9636bb89.js" defer="defer"></script>
</head>
<body class="navigation-with-keyboard">
<svg xmlns="http://www.w3.org/2000/svg" style="display: none;"><defs>
diff --git a/docs/next/concepts/architecture/index.html b/docs/next/concepts/architecture/index.html
index 274edf45..5be5dd41 100644
--- a/docs/next/concepts/architecture/index.html
+++ b/docs/next/concepts/architecture/index.html
@@ -15,8 +15,8 @@
<link rel="icon" href="/img/logo.svg">
<link rel="manifest" href="/manifest.json">
<meta name="theme-color" content="#0071e3"><link rel="stylesheet" href="/assets/css/styles.53ed9f81.css">
-<script src="/assets/js/runtime~main.87feb3cc.js" defer="defer"></script>
-<script src="/assets/js/main.d75df03d.js" defer="defer"></script>
+<script src="/assets/js/runtime~main.93b61691.js" defer="defer"></script>
+<script src="/assets/js/main.9636bb89.js" defer="defer"></script>
</head>
<body class="navigation-with-keyboard">
<svg xmlns="http://www.w3.org/2000/svg" style="display: none;"><defs>
diff --git a/docs/next/engine-flink/datastream/index.html b/docs/next/engine-flink/datastream/index.html
index d05909a9..4a98db34 100644
--- a/docs/next/engine-flink/datastream/index.html
+++ b/docs/next/engine-flink/datastream/index.html
@@ -15,8 +15,8 @@
<link rel="icon" href="/img/logo.svg">
<link rel="manifest" href="/manifest.json">
<meta name="theme-color" content="#0071e3"><link rel="stylesheet" href="/assets/css/styles.53ed9f81.css">
-<script src="/assets/js/runtime~main.87feb3cc.js" defer="defer"></script>
-<script src="/assets/js/main.d75df03d.js" defer="defer"></script>
+<script src="/assets/js/runtime~main.93b61691.js" defer="defer"></script>
+<script src="/assets/js/main.9636bb89.js" defer="defer"></script>
</head>
<body class="navigation-with-keyboard">
<svg xmlns="http://www.w3.org/2000/svg" style="display: none;"><defs>
diff --git a/docs/next/engine-flink/ddl/index.html b/docs/next/engine-flink/ddl/index.html
index 6c20c307..994c6cac 100644
--- a/docs/next/engine-flink/ddl/index.html
+++ b/docs/next/engine-flink/ddl/index.html
@@ -15,8 +15,8 @@
<link rel="icon" href="/img/logo.svg">
<link rel="manifest" href="/manifest.json">
<meta name="theme-color" content="#0071e3"><link rel="stylesheet" href="/assets/css/styles.53ed9f81.css">
-<script src="/assets/js/runtime~main.87feb3cc.js" defer="defer"></script>
-<script src="/assets/js/main.d75df03d.js" defer="defer"></script>
+<script src="/assets/js/runtime~main.93b61691.js" defer="defer"></script>
+<script src="/assets/js/main.9636bb89.js" defer="defer"></script>
</head>
<body class="navigation-with-keyboard">
<svg xmlns="http://www.w3.org/2000/svg" style="display: none;"><defs>
diff --git a/docs/next/engine-flink/getting-started/index.html b/docs/next/engine-flink/getting-started/index.html
index a2d0b291..08be5569 100644
--- a/docs/next/engine-flink/getting-started/index.html
+++ b/docs/next/engine-flink/getting-started/index.html
@@ -15,8 +15,8 @@
<link rel="icon" href="/img/logo.svg">
<link rel="manifest" href="/manifest.json">
<meta name="theme-color" content="#0071e3"><link rel="stylesheet" href="/assets/css/styles.53ed9f81.css">
-<script src="/assets/js/runtime~main.87feb3cc.js" defer="defer"></script>
-<script src="/assets/js/main.d75df03d.js" defer="defer"></script>
+<script src="/assets/js/runtime~main.93b61691.js" defer="defer"></script>
+<script src="/assets/js/main.9636bb89.js" defer="defer"></script>
</head>
<body class="navigation-with-keyboard">
<svg xmlns="http://www.w3.org/2000/svg" style="display: none;"><defs>
diff --git a/docs/next/engine-flink/lookups/index.html b/docs/next/engine-flink/lookups/index.html
index 9339edd6..fd3be463 100644
--- a/docs/next/engine-flink/lookups/index.html
+++ b/docs/next/engine-flink/lookups/index.html
@@ -15,8 +15,8 @@
<link rel="icon" href="/img/logo.svg">
<link rel="manifest" href="/manifest.json">
<meta name="theme-color" content="#0071e3"><link rel="stylesheet" href="/assets/css/styles.53ed9f81.css">
-<script src="/assets/js/runtime~main.87feb3cc.js" defer="defer"></script>
-<script src="/assets/js/main.d75df03d.js" defer="defer"></script>
+<script src="/assets/js/runtime~main.93b61691.js" defer="defer"></script>
+<script src="/assets/js/main.9636bb89.js" defer="defer"></script>
</head>
<body class="navigation-with-keyboard">
<svg xmlns="http://www.w3.org/2000/svg" style="display: none;"><defs>
diff --git a/docs/next/engine-flink/options/index.html b/docs/next/engine-flink/options/index.html
index 6a9822df..5a26a21b 100644
--- a/docs/next/engine-flink/options/index.html
+++ b/docs/next/engine-flink/options/index.html
@@ -15,8 +15,8 @@
<link rel="icon" href="/img/logo.svg">
<link rel="manifest" href="/manifest.json">
<meta name="theme-color" content="#0071e3"><link rel="stylesheet" href="/assets/css/styles.53ed9f81.css">
-<script src="/assets/js/runtime~main.87feb3cc.js" defer="defer"></script>
-<script src="/assets/js/main.d75df03d.js" defer="defer"></script>
+<script src="/assets/js/runtime~main.93b61691.js" defer="defer"></script>
+<script src="/assets/js/main.9636bb89.js" defer="defer"></script>
</head>
<body class="navigation-with-keyboard">
<svg xmlns="http://www.w3.org/2000/svg" style="display: none;"><defs>
diff --git a/docs/next/engine-flink/reads/index.html b/docs/next/engine-flink/reads/index.html
index a79630a4..da6d438d 100644
--- a/docs/next/engine-flink/reads/index.html
+++ b/docs/next/engine-flink/reads/index.html
@@ -15,8 +15,8 @@
<link rel="icon" href="/img/logo.svg">
<link rel="manifest" href="/manifest.json">
<meta name="theme-color" content="#0071e3"><link rel="stylesheet" href="/assets/css/styles.53ed9f81.css">
-<script src="/assets/js/runtime~main.87feb3cc.js" defer="defer"></script>
-<script src="/assets/js/main.d75df03d.js" defer="defer"></script>
+<script src="/assets/js/runtime~main.93b61691.js" defer="defer"></script>
+<script src="/assets/js/main.9636bb89.js" defer="defer"></script>
</head>
<body class="navigation-with-keyboard">
<svg xmlns="http://www.w3.org/2000/svg" style="display: none;"><defs>
diff --git a/docs/next/engine-flink/writes/index.html b/docs/next/engine-flink/writes/index.html
index 0b711f0c..a49251d7 100644
--- a/docs/next/engine-flink/writes/index.html
+++ b/docs/next/engine-flink/writes/index.html
@@ -15,8 +15,8 @@
<link rel="icon" href="/img/logo.svg">
<link rel="manifest" href="/manifest.json">
<meta name="theme-color" content="#0071e3"><link rel="stylesheet" href="/assets/css/styles.53ed9f81.css">
-<script src="/assets/js/runtime~main.87feb3cc.js" defer="defer"></script>
-<script src="/assets/js/main.d75df03d.js" defer="defer"></script>
+<script src="/assets/js/runtime~main.93b61691.js" defer="defer"></script>
+<script src="/assets/js/main.9636bb89.js" defer="defer"></script>
</head>
<body class="navigation-with-keyboard">
<svg xmlns="http://www.w3.org/2000/svg" style="display: none;"><defs>
diff --git a/docs/next/index.html b/docs/next/index.html
index a2b09aa4..84d76d27 100644
--- a/docs/next/index.html
+++ b/docs/next/index.html
@@ -15,8 +15,8 @@
<link rel="icon" href="/img/logo.svg">
<link rel="manifest" href="/manifest.json">
<meta name="theme-color" content="#0071e3"><link rel="stylesheet" href="/assets/css/styles.53ed9f81.css">
-<script src="/assets/js/runtime~main.87feb3cc.js" defer="defer"></script>
-<script src="/assets/js/main.d75df03d.js" defer="defer"></script>
+<script src="/assets/js/runtime~main.93b61691.js" defer="defer"></script>
+<script src="/assets/js/main.9636bb89.js" defer="defer"></script>
</head>
<body class="navigation-with-keyboard">
<svg xmlns="http://www.w3.org/2000/svg" style="display: none;"><defs>
diff --git a/docs/next/install-deploy/deploying-distributed-cluster/index.html b/docs/next/install-deploy/deploying-distributed-cluster/index.html
index da226ae1..f2ca613f 100644
--- a/docs/next/install-deploy/deploying-distributed-cluster/index.html
+++ b/docs/next/install-deploy/deploying-distributed-cluster/index.html
@@ -15,8 +15,8 @@
<link rel="icon" href="/img/logo.svg">
<link rel="manifest" href="/manifest.json">
<meta name="theme-color" content="#0071e3"><link rel="stylesheet" href="/assets/css/styles.53ed9f81.css">
-<script src="/assets/js/runtime~main.87feb3cc.js" defer="defer"></script>
-<script src="/assets/js/main.d75df03d.js" defer="defer"></script>
+<script src="/assets/js/runtime~main.93b61691.js" defer="defer"></script>
+<script src="/assets/js/main.9636bb89.js" defer="defer"></script>
</head>
<body class="navigation-with-keyboard">
<svg xmlns="http://www.w3.org/2000/svg" style="display: none;"><defs>
diff --git a/docs/next/install-deploy/deploying-local-cluster/index.html b/docs/next/install-deploy/deploying-local-cluster/index.html
index 0d20b149..9544288c 100644
--- a/docs/next/install-deploy/deploying-local-cluster/index.html
+++ b/docs/next/install-deploy/deploying-local-cluster/index.html
@@ -15,8 +15,8 @@
<link rel="icon" href="/img/logo.svg">
<link rel="manifest" href="/manifest.json">
<meta name="theme-color" content="#0071e3"><link rel="stylesheet" href="/assets/css/styles.53ed9f81.css">
-<script src="/assets/js/runtime~main.87feb3cc.js" defer="defer"></script>
-<script src="/assets/js/main.d75df03d.js" defer="defer"></script>
+<script src="/assets/js/runtime~main.93b61691.js" defer="defer"></script>
+<script src="/assets/js/main.9636bb89.js" defer="defer"></script>
</head>
<body class="navigation-with-keyboard">
<svg xmlns="http://www.w3.org/2000/svg" style="display: none;"><defs>
diff --git a/docs/next/install-deploy/deploying-with-docker/index.html b/docs/next/install-deploy/deploying-with-docker/index.html
index 5c81a799..141f6d88 100644
--- a/docs/next/install-deploy/deploying-with-docker/index.html
+++ b/docs/next/install-deploy/deploying-with-docker/index.html
@@ -15,8 +15,8 @@
<link rel="icon" href="/img/logo.svg">
<link rel="manifest" href="/manifest.json">
<meta name="theme-color" content="#0071e3"><link rel="stylesheet" href="/assets/css/styles.53ed9f81.css">
-<script src="/assets/js/runtime~main.87feb3cc.js" defer="defer"></script>
-<script src="/assets/js/main.d75df03d.js" defer="defer"></script>
+<script src="/assets/js/runtime~main.93b61691.js" defer="defer"></script>
+<script src="/assets/js/main.9636bb89.js" defer="defer"></script>
</head>
<body class="navigation-with-keyboard">
<svg xmlns="http://www.w3.org/2000/svg" style="display: none;"><defs>
diff --git a/docs/next/install-deploy/overview/index.html b/docs/next/install-deploy/overview/index.html
index 180cf9fd..11c8174d 100644
--- a/docs/next/install-deploy/overview/index.html
+++ b/docs/next/install-deploy/overview/index.html
@@ -15,8 +15,8 @@
<link rel="icon" href="/img/logo.svg">
<link rel="manifest" href="/manifest.json">
<meta name="theme-color" content="#0071e3"><link rel="stylesheet" href="/assets/css/styles.53ed9f81.css">
-<script src="/assets/js/runtime~main.87feb3cc.js" defer="defer"></script>
-<script src="/assets/js/main.d75df03d.js" defer="defer"></script>
+<script src="/assets/js/runtime~main.93b61691.js" defer="defer"></script>
+<script src="/assets/js/main.9636bb89.js" defer="defer"></script>
</head>
<body class="navigation-with-keyboard">
<svg xmlns="http://www.w3.org/2000/svg" style="display: none;"><defs>
diff --git a/docs/next/maintenance/configuration/index.html b/docs/next/maintenance/configuration/index.html
index 189ccd80..ce3b2cbd 100644
--- a/docs/next/maintenance/configuration/index.html
+++ b/docs/next/maintenance/configuration/index.html
@@ -15,8 +15,8 @@
<link rel="icon" href="/img/logo.svg">
<link rel="manifest" href="/manifest.json">
<meta name="theme-color" content="#0071e3"><link rel="stylesheet" href="/assets/css/styles.53ed9f81.css">
-<script src="/assets/js/runtime~main.87feb3cc.js" defer="defer"></script>
-<script src="/assets/js/main.d75df03d.js" defer="defer"></script>
+<script src="/assets/js/runtime~main.93b61691.js" defer="defer"></script>
+<script src="/assets/js/main.9636bb89.js" defer="defer"></script>
</head>
<body class="navigation-with-keyboard">
<svg xmlns="http://www.w3.org/2000/svg" style="display: none;"><defs>
diff --git a/docs/next/maintenance/filesystems/hdfs/index.html b/docs/next/maintenance/filesystems/hdfs/index.html
index 35f9345e..5a5149c0 100644
--- a/docs/next/maintenance/filesystems/hdfs/index.html
+++ b/docs/next/maintenance/filesystems/hdfs/index.html
@@ -15,8 +15,8 @@
<link rel="icon" href="/img/logo.svg">
<link rel="manifest" href="/manifest.json">
<meta name="theme-color" content="#0071e3"><link rel="stylesheet" href="/assets/css/styles.53ed9f81.css">
-<script src="/assets/js/runtime~main.87feb3cc.js" defer="defer"></script>
-<script src="/assets/js/main.d75df03d.js" defer="defer"></script>
+<script src="/assets/js/runtime~main.93b61691.js" defer="defer"></script>
+<script src="/assets/js/main.9636bb89.js" defer="defer"></script>
</head>
<body class="navigation-with-keyboard">
<svg xmlns="http://www.w3.org/2000/svg" style="display: none;"><defs>
diff --git a/docs/next/maintenance/filesystems/obs/index.html b/docs/next/maintenance/filesystems/obs/index.html
index b41cb0df..86209ce4 100644
--- a/docs/next/maintenance/filesystems/obs/index.html
+++ b/docs/next/maintenance/filesystems/obs/index.html
@@ -15,8 +15,8 @@
<link rel="icon" href="/img/logo.svg">
<link rel="manifest" href="/manifest.json">
<meta name="theme-color" content="#0071e3"><link rel="stylesheet" href="/assets/css/styles.53ed9f81.css">
-<script src="/assets/js/runtime~main.87feb3cc.js" defer="defer"></script>
-<script src="/assets/js/main.d75df03d.js" defer="defer"></script>
+<script src="/assets/js/runtime~main.93b61691.js" defer="defer"></script>
+<script src="/assets/js/main.9636bb89.js" defer="defer"></script>
</head>
<body class="navigation-with-keyboard">
<svg xmlns="http://www.w3.org/2000/svg" style="display: none;"><defs>
diff --git a/docs/next/maintenance/filesystems/oss/index.html b/docs/next/maintenance/filesystems/oss/index.html
index ae1d97a9..e8e5d295 100644
--- a/docs/next/maintenance/filesystems/oss/index.html
+++ b/docs/next/maintenance/filesystems/oss/index.html
@@ -15,8 +15,8 @@
<link rel="icon" href="/img/logo.svg">
<link rel="manifest" href="/manifest.json">
<meta name="theme-color" content="#0071e3"><link rel="stylesheet" href="/assets/css/styles.53ed9f81.css">
-<script src="/assets/js/runtime~main.87feb3cc.js" defer="defer"></script>
-<script src="/assets/js/main.d75df03d.js" defer="defer"></script>
+<script src="/assets/js/runtime~main.93b61691.js" defer="defer"></script>
+<script src="/assets/js/main.9636bb89.js" defer="defer"></script>
</head>
<body class="navigation-with-keyboard">
<svg xmlns="http://www.w3.org/2000/svg" style="display: none;"><defs>
diff --git a/docs/next/maintenance/filesystems/overview/index.html b/docs/next/maintenance/filesystems/overview/index.html
index 991b9d99..f7320e56 100644
--- a/docs/next/maintenance/filesystems/overview/index.html
+++ b/docs/next/maintenance/filesystems/overview/index.html
@@ -15,8 +15,8 @@
<link rel="icon" href="/img/logo.svg">
<link rel="manifest" href="/manifest.json">
<meta name="theme-color" content="#0071e3"><link rel="stylesheet" href="/assets/css/styles.53ed9f81.css">
-<script src="/assets/js/runtime~main.87feb3cc.js" defer="defer"></script>
-<script src="/assets/js/main.d75df03d.js" defer="defer"></script>
+<script src="/assets/js/runtime~main.93b61691.js" defer="defer"></script>
+<script src="/assets/js/main.9636bb89.js" defer="defer"></script>
</head>
<body class="navigation-with-keyboard">
<svg xmlns="http://www.w3.org/2000/svg" style="display: none;"><defs>
diff --git a/docs/next/maintenance/filesystems/s3/index.html b/docs/next/maintenance/filesystems/s3/index.html
index 1280ec42..9a2475c5 100644
--- a/docs/next/maintenance/filesystems/s3/index.html
+++ b/docs/next/maintenance/filesystems/s3/index.html
@@ -15,8 +15,8 @@
<link rel="icon" href="/img/logo.svg">
<link rel="manifest" href="/manifest.json">
<meta name="theme-color" content="#0071e3"><link rel="stylesheet" href="/assets/css/styles.53ed9f81.css">
-<script src="/assets/js/runtime~main.87feb3cc.js" defer="defer"></script>
-<script src="/assets/js/main.d75df03d.js" defer="defer"></script>
+<script src="/assets/js/runtime~main.93b61691.js" defer="defer"></script>
+<script src="/assets/js/main.9636bb89.js" defer="defer"></script>
</head>
<body class="navigation-with-keyboard">
<svg xmlns="http://www.w3.org/2000/svg" style="display: none;"><defs>
diff --git a/docs/next/maintenance/observability/logging/index.html b/docs/next/maintenance/observability/logging/index.html
index 0a7db076..447deeee 100644
--- a/docs/next/maintenance/observability/logging/index.html
+++ b/docs/next/maintenance/observability/logging/index.html
@@ -15,8 +15,8 @@
<link rel="icon" href="/img/logo.svg">
<link rel="manifest" href="/manifest.json">
<meta name="theme-color" content="#0071e3"><link rel="stylesheet" href="/assets/css/styles.53ed9f81.css">
-<script src="/assets/js/runtime~main.87feb3cc.js" defer="defer"></script>
-<script src="/assets/js/main.d75df03d.js" defer="defer"></script>
+<script src="/assets/js/runtime~main.93b61691.js" defer="defer"></script>
+<script src="/assets/js/main.9636bb89.js" defer="defer"></script>
</head>
<body class="navigation-with-keyboard">
<svg xmlns="http://www.w3.org/2000/svg" style="display: none;"><defs>
diff --git a/docs/next/maintenance/observability/metric-reporters/index.html b/docs/next/maintenance/observability/metric-reporters/index.html
index 3658e8e2..26999226 100644
--- a/docs/next/maintenance/observability/metric-reporters/index.html
+++ b/docs/next/maintenance/observability/metric-reporters/index.html
@@ -15,8 +15,8 @@
<link rel="icon" href="/img/logo.svg">
<link rel="manifest" href="/manifest.json">
<meta name="theme-color" content="#0071e3"><link rel="stylesheet" href="/assets/css/styles.53ed9f81.css">
-<script src="/assets/js/runtime~main.87feb3cc.js" defer="defer"></script>
-<script src="/assets/js/main.d75df03d.js" defer="defer"></script>
+<script src="/assets/js/runtime~main.93b61691.js" defer="defer"></script>
+<script src="/assets/js/main.9636bb89.js" defer="defer"></script>
</head>
<body class="navigation-with-keyboard">
<svg xmlns="http://www.w3.org/2000/svg" style="display: none;"><defs>
diff --git a/docs/next/maintenance/observability/monitor-metrics/index.html b/docs/next/maintenance/observability/monitor-metrics/index.html
index 2f80d761..f8478252 100644
--- a/docs/next/maintenance/observability/monitor-metrics/index.html
+++ b/docs/next/maintenance/observability/monitor-metrics/index.html
@@ -15,8 +15,8 @@
<link rel="icon" href="/img/logo.svg">
<link rel="manifest" href="/manifest.json">
<meta name="theme-color" content="#0071e3"><link rel="stylesheet" href="/assets/css/styles.53ed9f81.css">
-<script src="/assets/js/runtime~main.87feb3cc.js" defer="defer"></script>
-<script src="/assets/js/main.d75df03d.js" defer="defer"></script>
+<script src="/assets/js/runtime~main.93b61691.js" defer="defer"></script>
+<script src="/assets/js/main.9636bb89.js" defer="defer"></script>
</head>
<body class="navigation-with-keyboard">
<svg xmlns="http://www.w3.org/2000/svg" style="display: none;"><defs>
diff --git a/docs/next/maintenance/observability/quickstart/index.html b/docs/next/maintenance/observability/quickstart/index.html
index db560298..a8931165 100644
--- a/docs/next/maintenance/observability/quickstart/index.html
+++ b/docs/next/maintenance/observability/quickstart/index.html
@@ -15,8 +15,8 @@
<link rel="icon" href="/img/logo.svg">
<link rel="manifest" href="/manifest.json">
<meta name="theme-color" content="#0071e3"><link rel="stylesheet" href="/assets/css/styles.53ed9f81.css">
-<script src="/assets/js/runtime~main.87feb3cc.js" defer="defer"></script>
-<script src="/assets/js/main.d75df03d.js" defer="defer"></script>
+<script src="/assets/js/runtime~main.93b61691.js" defer="defer"></script>
+<script src="/assets/js/main.9636bb89.js" defer="defer"></script>
</head>
<body class="navigation-with-keyboard">
<svg xmlns="http://www.w3.org/2000/svg" style="display: none;"><defs>
diff --git a/docs/next/maintenance/operations/racks/index.html b/docs/next/maintenance/operations/racks/index.html
index 306badb2..8d538fb7 100644
--- a/docs/next/maintenance/operations/racks/index.html
+++ b/docs/next/maintenance/operations/racks/index.html
@@ -15,8 +15,8 @@
<link rel="icon" href="/img/logo.svg">
<link rel="manifest" href="/manifest.json">
<meta name="theme-color" content="#0071e3"><link rel="stylesheet" href="/assets/css/styles.53ed9f81.css">
-<script src="/assets/js/runtime~main.87feb3cc.js" defer="defer"></script>
-<script src="/assets/js/main.d75df03d.js" defer="defer"></script>
+<script src="/assets/js/runtime~main.93b61691.js" defer="defer"></script>
+<script src="/assets/js/main.9636bb89.js" defer="defer"></script>
</head>
<body class="navigation-with-keyboard">
<svg xmlns="http://www.w3.org/2000/svg" style="display: none;"><defs>
diff --git a/docs/next/maintenance/operations/upgrading/index.html b/docs/next/maintenance/operations/upgrading/index.html
index f9555c65..bfc22bf5 100644
--- a/docs/next/maintenance/operations/upgrading/index.html
+++ b/docs/next/maintenance/operations/upgrading/index.html
@@ -15,8 +15,8 @@
<link rel="icon" href="/img/logo.svg">
<link rel="manifest" href="/manifest.json">
<meta name="theme-color" content="#0071e3"><link rel="stylesheet" href="/assets/css/styles.53ed9f81.css">
-<script src="/assets/js/runtime~main.87feb3cc.js" defer="defer"></script>
-<script src="/assets/js/main.d75df03d.js" defer="defer"></script>
+<script src="/assets/js/runtime~main.93b61691.js" defer="defer"></script>
+<script src="/assets/js/main.9636bb89.js" defer="defer"></script>
</head>
<body class="navigation-with-keyboard">
<svg xmlns="http://www.w3.org/2000/svg" style="display: none;"><defs>
diff --git a/docs/next/maintenance/tiered-storage/lakehouse-storage/index.html b/docs/next/maintenance/tiered-storage/lakehouse-storage/index.html
index ca573725..d102d37e 100644
--- a/docs/next/maintenance/tiered-storage/lakehouse-storage/index.html
+++ b/docs/next/maintenance/tiered-storage/lakehouse-storage/index.html
@@ -15,8 +15,8 @@
<link rel="icon" href="/img/logo.svg">
<link rel="manifest" href="/manifest.json">
<meta name="theme-color" content="#0071e3"><link rel="stylesheet" href="/assets/css/styles.53ed9f81.css">
-<script src="/assets/js/runtime~main.87feb3cc.js" defer="defer"></script>
-<script src="/assets/js/main.d75df03d.js" defer="defer"></script>
+<script src="/assets/js/runtime~main.93b61691.js" defer="defer"></script>
+<script src="/assets/js/main.9636bb89.js" defer="defer"></script>
</head>
<body class="navigation-with-keyboard">
<svg xmlns="http://www.w3.org/2000/svg" style="display: none;"><defs>
diff --git a/docs/next/maintenance/tiered-storage/overview/index.html b/docs/next/maintenance/tiered-storage/overview/index.html
index 44b24335..72676132 100644
--- a/docs/next/maintenance/tiered-storage/overview/index.html
+++ b/docs/next/maintenance/tiered-storage/overview/index.html
@@ -15,8 +15,8 @@
<link rel="icon" href="/img/logo.svg">
<link rel="manifest" href="/manifest.json">
<meta name="theme-color" content="#0071e3"><link rel="stylesheet" href="/assets/css/styles.53ed9f81.css">
-<script src="/assets/js/runtime~main.87feb3cc.js" defer="defer"></script>
-<script src="/assets/js/main.d75df03d.js" defer="defer"></script>
+<script src="/assets/js/runtime~main.93b61691.js" defer="defer"></script>
+<script src="/assets/js/main.9636bb89.js" defer="defer"></script>
</head>
<body class="navigation-with-keyboard">
<svg xmlns="http://www.w3.org/2000/svg" style="display: none;"><defs>
diff --git a/docs/next/maintenance/tiered-storage/remote-storage/index.html b/docs/next/maintenance/tiered-storage/remote-storage/index.html
index 947f1b54..29c1c4d0 100644
--- a/docs/next/maintenance/tiered-storage/remote-storage/index.html
+++ b/docs/next/maintenance/tiered-storage/remote-storage/index.html
@@ -15,8 +15,8 @@
<link rel="icon" href="/img/logo.svg">
<link rel="manifest" href="/manifest.json">
<meta name="theme-color" content="#0071e3"><link rel="stylesheet" href="/assets/css/styles.53ed9f81.css">
-<script src="/assets/js/runtime~main.87feb3cc.js" defer="defer"></script>
-<script src="/assets/js/main.d75df03d.js" defer="defer"></script>
+<script src="/assets/js/runtime~main.93b61691.js" defer="defer"></script>
+<script src="/assets/js/main.9636bb89.js" defer="defer"></script>
</head>
<body class="navigation-with-keyboard">
<svg xmlns="http://www.w3.org/2000/svg" style="display: none;"><defs>
diff --git a/docs/next/quickstart/flink/index.html b/docs/next/quickstart/flink/index.html
index fdfbfd5d..012bfb17 100644
--- a/docs/next/quickstart/flink/index.html
+++ b/docs/next/quickstart/flink/index.html
@@ -15,8 +15,8 @@
<link rel="icon" href="/img/logo.svg">
<link rel="manifest" href="/manifest.json">
<meta name="theme-color" content="#0071e3"><link rel="stylesheet" href="/assets/css/styles.53ed9f81.css">
-<script src="/assets/js/runtime~main.87feb3cc.js" defer="defer"></script>
-<script src="/assets/js/main.d75df03d.js" defer="defer"></script>
+<script src="/assets/js/runtime~main.93b61691.js" defer="defer"></script>
+<script src="/assets/js/main.9636bb89.js" defer="defer"></script>
</head>
<body class="navigation-with-keyboard">
<svg xmlns="http://www.w3.org/2000/svg" style="display: none;"><defs>
diff --git a/docs/next/quickstart/security/index.html b/docs/next/quickstart/security/index.html
index 4b822f18..d97e5551 100644
--- a/docs/next/quickstart/security/index.html
+++ b/docs/next/quickstart/security/index.html
@@ -15,8 +15,8 @@
<link rel="icon" href="/img/logo.svg">
<link rel="manifest" href="/manifest.json">
<meta name="theme-color" content="#0071e3"><link rel="stylesheet" href="/assets/css/styles.53ed9f81.css">
-<script src="/assets/js/runtime~main.87feb3cc.js" defer="defer"></script>
-<script src="/assets/js/main.d75df03d.js" defer="defer"></script>
+<script src="/assets/js/runtime~main.93b61691.js" defer="defer"></script>
+<script src="/assets/js/main.9636bb89.js" defer="defer"></script>
</head>
<body class="navigation-with-keyboard">
<svg xmlns="http://www.w3.org/2000/svg" style="display: none;"><defs>
diff --git a/docs/next/security/authentication/index.html b/docs/next/security/authentication/index.html
index 1ac2e490..7498d020 100644
--- a/docs/next/security/authentication/index.html
+++ b/docs/next/security/authentication/index.html
@@ -15,8 +15,8 @@
<link rel="icon" href="/img/logo.svg">
<link rel="manifest" href="/manifest.json">
<meta name="theme-color" content="#0071e3"><link rel="stylesheet" href="/assets/css/styles.53ed9f81.css">
-<script src="/assets/js/runtime~main.87feb3cc.js" defer="defer"></script>
-<script src="/assets/js/main.d75df03d.js" defer="defer"></script>
+<script src="/assets/js/runtime~main.93b61691.js" defer="defer"></script>
+<script src="/assets/js/main.9636bb89.js" defer="defer"></script>
</head>
<body class="navigation-with-keyboard">
<svg xmlns="http://www.w3.org/2000/svg" style="display: none;"><defs>
diff --git a/docs/next/security/authorization/index.html b/docs/next/security/authorization/index.html
index 641aa2d7..9f813fd1 100644
--- a/docs/next/security/authorization/index.html
+++ b/docs/next/security/authorization/index.html
@@ -15,8 +15,8 @@
<link rel="icon" href="/img/logo.svg">
<link rel="manifest" href="/manifest.json">
<meta name="theme-color" content="#0071e3"><link rel="stylesheet" href="/assets/css/styles.53ed9f81.css">
-<script src="/assets/js/runtime~main.87feb3cc.js" defer="defer"></script>
-<script src="/assets/js/main.d75df03d.js" defer="defer"></script>
+<script src="/assets/js/runtime~main.93b61691.js" defer="defer"></script>
+<script src="/assets/js/main.9636bb89.js" defer="defer"></script>
</head>
<body class="navigation-with-keyboard">
<svg xmlns="http://www.w3.org/2000/svg" style="display: none;"><defs>
diff --git a/docs/next/security/overview/index.html b/docs/next/security/overview/index.html
index 44dd0f36..4646d7dc 100644
--- a/docs/next/security/overview/index.html
+++ b/docs/next/security/overview/index.html
@@ -15,8 +15,8 @@
<link rel="icon" href="/img/logo.svg">
<link rel="manifest" href="/manifest.json">
<meta name="theme-color" content="#0071e3"><link rel="stylesheet" href="/assets/css/styles.53ed9f81.css">
-<script src="/assets/js/runtime~main.87feb3cc.js" defer="defer"></script>
-<script src="/assets/js/main.d75df03d.js" defer="defer"></script>
+<script src="/assets/js/runtime~main.93b61691.js" defer="defer"></script>
+<script src="/assets/js/main.9636bb89.js" defer="defer"></script>
</head>
<body class="navigation-with-keyboard">
<svg xmlns="http://www.w3.org/2000/svg" style="display: none;"><defs>
diff --git a/docs/next/streaming-lakehouse/integrate-data-lakes/paimon/index.html b/docs/next/streaming-lakehouse/integrate-data-lakes/paimon/index.html
index 24e5e270..5ca05d4f 100644
--- a/docs/next/streaming-lakehouse/integrate-data-lakes/paimon/index.html
+++ b/docs/next/streaming-lakehouse/integrate-data-lakes/paimon/index.html
@@ -15,8 +15,8 @@
<link rel="icon" href="/img/logo.svg">
<link rel="manifest" href="/manifest.json">
<meta name="theme-color" content="#0071e3"><link rel="stylesheet" href="/assets/css/styles.53ed9f81.css">
-<script src="/assets/js/runtime~main.87feb3cc.js" defer="defer"></script>
-<script src="/assets/js/main.d75df03d.js" defer="defer"></script>
+<script src="/assets/js/runtime~main.93b61691.js" defer="defer"></script>
+<script src="/assets/js/main.9636bb89.js" defer="defer"></script>
</head>
<body class="navigation-with-keyboard">
<svg xmlns="http://www.w3.org/2000/svg" style="display: none;"><defs>
diff --git a/docs/next/streaming-lakehouse/overview/index.html b/docs/next/streaming-lakehouse/overview/index.html
index 9ea184ce..98c89d6d 100644
--- a/docs/next/streaming-lakehouse/overview/index.html
+++ b/docs/next/streaming-lakehouse/overview/index.html
@@ -15,8 +15,8 @@
<link rel="icon" href="/img/logo.svg">
<link rel="manifest" href="/manifest.json">
<meta name="theme-color" content="#0071e3"><link rel="stylesheet" href="/assets/css/styles.53ed9f81.css">
-<script src="/assets/js/runtime~main.87feb3cc.js" defer="defer"></script>
-<script src="/assets/js/main.d75df03d.js" defer="defer"></script>
+<script src="/assets/js/runtime~main.93b61691.js" defer="defer"></script>
+<script src="/assets/js/main.9636bb89.js" defer="defer"></script>
</head>
<body class="navigation-with-keyboard">
<svg xmlns="http://www.w3.org/2000/svg" style="display: none;"><defs>
diff --git a/docs/next/table-design/data-distribution/bucketing/index.html b/docs/next/table-design/data-distribution/bucketing/index.html
index af180f4f..d153ad55 100644
--- a/docs/next/table-design/data-distribution/bucketing/index.html
+++ b/docs/next/table-design/data-distribution/bucketing/index.html
@@ -15,8 +15,8 @@
<link rel="icon" href="/img/logo.svg">
<link rel="manifest" href="/manifest.json">
<meta name="theme-color" content="#0071e3"><link rel="stylesheet" href="/assets/css/styles.53ed9f81.css">
-<script src="/assets/js/runtime~main.87feb3cc.js" defer="defer"></script>
-<script src="/assets/js/main.d75df03d.js" defer="defer"></script>
+<script src="/assets/js/runtime~main.93b61691.js" defer="defer"></script>
+<script src="/assets/js/main.9636bb89.js" defer="defer"></script>
</head>
<body class="navigation-with-keyboard">
<svg xmlns="http://www.w3.org/2000/svg" style="display: none;"><defs>
diff --git a/docs/next/table-design/data-distribution/partitioning/index.html b/docs/next/table-design/data-distribution/partitioning/index.html
index a48e19ce..23fc7917 100644
--- a/docs/next/table-design/data-distribution/partitioning/index.html
+++ b/docs/next/table-design/data-distribution/partitioning/index.html
@@ -15,8 +15,8 @@
<link rel="icon" href="/img/logo.svg">
<link rel="manifest" href="/manifest.json">
<meta name="theme-color" content="#0071e3"><link rel="stylesheet" href="/assets/css/styles.53ed9f81.css">
-<script src="/assets/js/runtime~main.87feb3cc.js" defer="defer"></script>
-<script src="/assets/js/main.d75df03d.js" defer="defer"></script>
+<script src="/assets/js/runtime~main.93b61691.js" defer="defer"></script>
+<script src="/assets/js/main.9636bb89.js" defer="defer"></script>
</head>
<body class="navigation-with-keyboard">
<svg xmlns="http://www.w3.org/2000/svg" style="display: none;"><defs>
diff --git a/docs/next/table-design/data-distribution/ttl/index.html b/docs/next/table-design/data-distribution/ttl/index.html
index 3f635d65..92ce604c 100644
--- a/docs/next/table-design/data-distribution/ttl/index.html
+++ b/docs/next/table-design/data-distribution/ttl/index.html
@@ -15,8 +15,8 @@
<link rel="icon" href="/img/logo.svg">
<link rel="manifest" href="/manifest.json">
<meta name="theme-color" content="#0071e3"><link rel="stylesheet" href="/assets/css/styles.53ed9f81.css">
-<script src="/assets/js/runtime~main.87feb3cc.js" defer="defer"></script>
-<script src="/assets/js/main.d75df03d.js" defer="defer"></script>
+<script src="/assets/js/runtime~main.93b61691.js" defer="defer"></script>
+<script src="/assets/js/main.9636bb89.js" defer="defer"></script>
</head>
<body class="navigation-with-keyboard">
<svg xmlns="http://www.w3.org/2000/svg" style="display: none;"><defs>
diff --git a/docs/next/table-design/data-types/index.html b/docs/next/table-design/data-types/index.html
index 08dc9473..bc05480e 100644
--- a/docs/next/table-design/data-types/index.html
+++ b/docs/next/table-design/data-types/index.html
@@ -15,8 +15,8 @@
<link rel="icon" href="/img/logo.svg">
<link rel="manifest" href="/manifest.json">
<meta name="theme-color" content="#0071e3"><link rel="stylesheet" href="/assets/css/styles.53ed9f81.css">
-<script src="/assets/js/runtime~main.87feb3cc.js" defer="defer"></script>
-<script src="/assets/js/main.d75df03d.js" defer="defer"></script>
+<script src="/assets/js/runtime~main.93b61691.js" defer="defer"></script>
+<script src="/assets/js/main.9636bb89.js" defer="defer"></script>
</head>
<body class="navigation-with-keyboard">
<svg xmlns="http://www.w3.org/2000/svg" style="display: none;"><defs>
diff --git a/docs/next/table-design/overview/index.html b/docs/next/table-design/overview/index.html
index c589dde8..e6c6a309 100644
--- a/docs/next/table-design/overview/index.html
+++ b/docs/next/table-design/overview/index.html
@@ -15,8 +15,8 @@
<link rel="icon" href="/img/logo.svg">
<link rel="manifest" href="/manifest.json">
<meta name="theme-color" content="#0071e3"><link rel="stylesheet" href="/assets/css/styles.53ed9f81.css">
-<script src="/assets/js/runtime~main.87feb3cc.js" defer="defer"></script>
-<script src="/assets/js/main.d75df03d.js" defer="defer"></script>
+<script src="/assets/js/runtime~main.93b61691.js" defer="defer"></script>
+<script src="/assets/js/main.9636bb89.js" defer="defer"></script>
</head>
<body class="navigation-with-keyboard">
<svg xmlns="http://www.w3.org/2000/svg" style="display: none;"><defs>
diff --git a/docs/next/table-design/table-types/log-table/index.html b/docs/next/table-design/table-types/log-table/index.html
index b7fd3fae..06a38aaf 100644
--- a/docs/next/table-design/table-types/log-table/index.html
+++ b/docs/next/table-design/table-types/log-table/index.html
@@ -15,8 +15,8 @@
<link rel="icon" href="/img/logo.svg">
<link rel="manifest" href="/manifest.json">
<meta name="theme-color" content="#0071e3"><link rel="stylesheet" href="/assets/css/styles.53ed9f81.css">
-<script src="/assets/js/runtime~main.87feb3cc.js" defer="defer"></script>
-<script src="/assets/js/main.d75df03d.js" defer="defer"></script>
+<script src="/assets/js/runtime~main.93b61691.js" defer="defer"></script>
+<script src="/assets/js/main.9636bb89.js" defer="defer"></script>
</head>
<body class="navigation-with-keyboard">
<svg xmlns="http://www.w3.org/2000/svg" style="display: none;"><defs>
diff --git a/docs/next/table-design/table-types/pk-table/index.html b/docs/next/table-design/table-types/pk-table/index.html
index 6d7caef4..38c80fda 100644
--- a/docs/next/table-design/table-types/pk-table/index.html
+++ b/docs/next/table-design/table-types/pk-table/index.html
@@ -15,8 +15,8 @@
<link rel="icon" href="/img/logo.svg">
<link rel="manifest" href="/manifest.json">
<meta name="theme-color" content="#0071e3"><link rel="stylesheet" href="/assets/css/styles.53ed9f81.css">
-<script src="/assets/js/runtime~main.87feb3cc.js" defer="defer"></script>
-<script src="/assets/js/main.d75df03d.js" defer="defer"></script>
+<script src="/assets/js/runtime~main.93b61691.js" defer="defer"></script>
+<script src="/assets/js/main.9636bb89.js" defer="defer"></script>
</head>
<body class="navigation-with-keyboard">
<svg xmlns="http://www.w3.org/2000/svg" style="display: none;"><defs>
diff --git a/docs/next/table-design/table-types/pk-table/merge-engines/default/index.html b/docs/next/table-design/table-types/pk-table/merge-engines/default/index.html
index 2cfb8e81..60f0b366 100644
--- a/docs/next/table-design/table-types/pk-table/merge-engines/default/index.html
+++ b/docs/next/table-design/table-types/pk-table/merge-engines/default/index.html
@@ -15,8 +15,8 @@
<link rel="icon" href="/img/logo.svg">
<link rel="manifest" href="/manifest.json">
<meta name="theme-color" content="#0071e3"><link rel="stylesheet" href="/assets/css/styles.53ed9f81.css">
-<script src="/assets/js/runtime~main.87feb3cc.js" defer="defer"></script>
-<script src="/assets/js/main.d75df03d.js" defer="defer"></script>
+<script src="/assets/js/runtime~main.93b61691.js" defer="defer"></script>
+<script src="/assets/js/main.9636bb89.js" defer="defer"></script>
</head>
<body class="navigation-with-keyboard">
<svg xmlns="http://www.w3.org/2000/svg" style="display: none;"><defs>
diff --git a/docs/next/table-design/table-types/pk-table/merge-engines/first-row/index.html b/docs/next/table-design/table-types/pk-table/merge-engines/first-row/index.html
index bff62a95..999c4139 100644
--- a/docs/next/table-design/table-types/pk-table/merge-engines/first-row/index.html
+++ b/docs/next/table-design/table-types/pk-table/merge-engines/first-row/index.html
@@ -15,8 +15,8 @@
<link rel="icon" href="/img/logo.svg">
<link rel="manifest" href="/manifest.json">
<meta name="theme-color" content="#0071e3"><link rel="stylesheet" href="/assets/css/styles.53ed9f81.css">
-<script src="/assets/js/runtime~main.87feb3cc.js" defer="defer"></script>
-<script src="/assets/js/main.d75df03d.js" defer="defer"></script>
+<script src="/assets/js/runtime~main.93b61691.js" defer="defer"></script>
+<script src="/assets/js/main.9636bb89.js" defer="defer"></script>
</head>
<body class="navigation-with-keyboard">
<svg xmlns="http://www.w3.org/2000/svg" style="display: none;"><defs>
diff --git a/docs/next/table-design/table-types/pk-table/merge-engines/index.html b/docs/next/table-design/table-types/pk-table/merge-engines/index.html
index c4244208..8924a7b7 100644
--- a/docs/next/table-design/table-types/pk-table/merge-engines/index.html
+++ b/docs/next/table-design/table-types/pk-table/merge-engines/index.html
@@ -15,8 +15,8 @@
<link rel="icon" href="/img/logo.svg">
<link rel="manifest" href="/manifest.json">
<meta name="theme-color" content="#0071e3"><link rel="stylesheet" href="/assets/css/styles.53ed9f81.css">
-<script src="/assets/js/runtime~main.87feb3cc.js" defer="defer"></script>
-<script src="/assets/js/main.d75df03d.js" defer="defer"></script>
+<script src="/assets/js/runtime~main.93b61691.js" defer="defer"></script>
+<script src="/assets/js/main.9636bb89.js" defer="defer"></script>
</head>
<body class="navigation-with-keyboard">
<svg xmlns="http://www.w3.org/2000/svg" style="display: none;"><defs>
diff --git a/docs/next/table-design/table-types/pk-table/merge-engines/versioned/index.html b/docs/next/table-design/table-types/pk-table/merge-engines/versioned/index.html
index eb920ff1..4ecbd36c 100644
--- a/docs/next/table-design/table-types/pk-table/merge-engines/versioned/index.html
+++ b/docs/next/table-design/table-types/pk-table/merge-engines/versioned/index.html
@@ -15,8 +15,8 @@
<link rel="icon" href="/img/logo.svg">
<link rel="manifest" href="/manifest.json">
<meta name="theme-color" content="#0071e3"><link rel="stylesheet" href="/assets/css/styles.53ed9f81.css">
-<script src="/assets/js/runtime~main.87feb3cc.js" defer="defer"></script>
-<script src="/assets/js/main.d75df03d.js" defer="defer"></script>
+<script src="/assets/js/runtime~main.93b61691.js" defer="defer"></script>
+<script src="/assets/js/main.9636bb89.js" defer="defer"></script>
</head>
<body class="navigation-with-keyboard">
<svg xmlns="http://www.w3.org/2000/svg" style="display: none;"><defs>
diff --git a/docs/quickstart/flink/index.html b/docs/quickstart/flink/index.html
index 02537349..c92e13e2 100644
--- a/docs/quickstart/flink/index.html
+++ b/docs/quickstart/flink/index.html
@@ -15,8 +15,8 @@
<link rel="icon" href="/img/logo.svg">
<link rel="manifest" href="/manifest.json">
<meta name="theme-color" content="#0071e3"><link rel="stylesheet" href="/assets/css/styles.53ed9f81.css">
-<script src="/assets/js/runtime~main.87feb3cc.js" defer="defer"></script>
-<script src="/assets/js/main.d75df03d.js" defer="defer"></script>
+<script src="/assets/js/runtime~main.93b61691.js" defer="defer"></script>
+<script src="/assets/js/main.9636bb89.js" defer="defer"></script>
</head>
<body class="navigation-with-keyboard">
<svg xmlns="http://www.w3.org/2000/svg" style="display: none;"><defs>
diff --git a/docs/quickstart/security/index.html b/docs/quickstart/security/index.html
index 4c938203..68eb742f 100644
--- a/docs/quickstart/security/index.html
+++ b/docs/quickstart/security/index.html
@@ -15,8 +15,8 @@
<link rel="icon" href="/img/logo.svg">
<link rel="manifest" href="/manifest.json">
<meta name="theme-color" content="#0071e3"><link rel="stylesheet" href="/assets/css/styles.53ed9f81.css">
-<script src="/assets/js/runtime~main.87feb3cc.js" defer="defer"></script>
-<script src="/assets/js/main.d75df03d.js" defer="defer"></script>
+<script src="/assets/js/runtime~main.93b61691.js" defer="defer"></script>
+<script src="/assets/js/main.9636bb89.js" defer="defer"></script>
</head>
<body class="navigation-with-keyboard">
<svg xmlns="http://www.w3.org/2000/svg" style="display: none;"><defs>
diff --git a/docs/security/authentication/index.html b/docs/security/authentication/index.html
index fc0e7ee9..d26fd7a5 100644
--- a/docs/security/authentication/index.html
+++ b/docs/security/authentication/index.html
@@ -15,8 +15,8 @@
<link rel="icon" href="/img/logo.svg">
<link rel="manifest" href="/manifest.json">
<meta name="theme-color" content="#0071e3"><link rel="stylesheet" href="/assets/css/styles.53ed9f81.css">
-<script src="/assets/js/runtime~main.87feb3cc.js" defer="defer"></script>
-<script src="/assets/js/main.d75df03d.js" defer="defer"></script>
+<script src="/assets/js/runtime~main.93b61691.js" defer="defer"></script>
+<script src="/assets/js/main.9636bb89.js" defer="defer"></script>
</head>
<body class="navigation-with-keyboard">
<svg xmlns="http://www.w3.org/2000/svg" style="display: none;"><defs>
diff --git a/docs/security/authorization/index.html b/docs/security/authorization/index.html
index 042be63a..6664e69f 100644
--- a/docs/security/authorization/index.html
+++ b/docs/security/authorization/index.html
@@ -15,8 +15,8 @@
<link rel="icon" href="/img/logo.svg">
<link rel="manifest" href="/manifest.json">
<meta name="theme-color" content="#0071e3"><link rel="stylesheet" href="/assets/css/styles.53ed9f81.css">
-<script src="/assets/js/runtime~main.87feb3cc.js" defer="defer"></script>
-<script src="/assets/js/main.d75df03d.js" defer="defer"></script>
+<script src="/assets/js/runtime~main.93b61691.js" defer="defer"></script>
+<script src="/assets/js/main.9636bb89.js" defer="defer"></script>
</head>
<body class="navigation-with-keyboard">
<svg xmlns="http://www.w3.org/2000/svg" style="display: none;"><defs>
diff --git a/docs/security/overview/index.html b/docs/security/overview/index.html
index e06c01e9..0c313aed 100644
--- a/docs/security/overview/index.html
+++ b/docs/security/overview/index.html
@@ -15,8 +15,8 @@
<link rel="icon" href="/img/logo.svg">
<link rel="manifest" href="/manifest.json">
<meta name="theme-color" content="#0071e3"><link rel="stylesheet" href="/assets/css/styles.53ed9f81.css">
-<script src="/assets/js/runtime~main.87feb3cc.js" defer="defer"></script>
-<script src="/assets/js/main.d75df03d.js" defer="defer"></script>
+<script src="/assets/js/runtime~main.93b61691.js" defer="defer"></script>
+<script src="/assets/js/main.9636bb89.js" defer="defer"></script>
</head>
<body class="navigation-with-keyboard">
<svg xmlns="http://www.w3.org/2000/svg" style="display: none;"><defs>
diff --git a/docs/streaming-lakehouse/integrate-data-lakes/paimon/index.html b/docs/streaming-lakehouse/integrate-data-lakes/paimon/index.html
index 61bd4e9f..4b427cbd 100644
--- a/docs/streaming-lakehouse/integrate-data-lakes/paimon/index.html
+++ b/docs/streaming-lakehouse/integrate-data-lakes/paimon/index.html
@@ -15,8 +15,8 @@
<link rel="icon" href="/img/logo.svg">
<link rel="manifest" href="/manifest.json">
<meta name="theme-color" content="#0071e3"><link rel="stylesheet" href="/assets/css/styles.53ed9f81.css">
-<script src="/assets/js/runtime~main.87feb3cc.js" defer="defer"></script>
-<script src="/assets/js/main.d75df03d.js" defer="defer"></script>
+<script src="/assets/js/runtime~main.93b61691.js" defer="defer"></script>
+<script src="/assets/js/main.9636bb89.js" defer="defer"></script>
</head>
<body class="navigation-with-keyboard">
<svg xmlns="http://www.w3.org/2000/svg" style="display: none;"><defs>
diff --git a/docs/streaming-lakehouse/overview/index.html b/docs/streaming-lakehouse/overview/index.html
index a06023be..756cb13b 100644
--- a/docs/streaming-lakehouse/overview/index.html
+++ b/docs/streaming-lakehouse/overview/index.html
@@ -15,8 +15,8 @@
<link rel="icon" href="/img/logo.svg">
<link rel="manifest" href="/manifest.json">
<meta name="theme-color" content="#0071e3"><link rel="stylesheet" href="/assets/css/styles.53ed9f81.css">
-<script src="/assets/js/runtime~main.87feb3cc.js" defer="defer"></script>
-<script src="/assets/js/main.d75df03d.js" defer="defer"></script>
+<script src="/assets/js/runtime~main.93b61691.js" defer="defer"></script>
+<script src="/assets/js/main.9636bb89.js" defer="defer"></script>
</head>
<body class="navigation-with-keyboard">
<svg xmlns="http://www.w3.org/2000/svg" style="display: none;"><defs>
diff --git a/docs/table-design/data-distribution/bucketing/index.html b/docs/table-design/data-distribution/bucketing/index.html
index 3a2da7ab..295d0787 100644
--- a/docs/table-design/data-distribution/bucketing/index.html
+++ b/docs/table-design/data-distribution/bucketing/index.html
@@ -15,8 +15,8 @@
<link rel="icon" href="/img/logo.svg">
<link rel="manifest" href="/manifest.json">
<meta name="theme-color" content="#0071e3"><link rel="stylesheet" href="/assets/css/styles.53ed9f81.css">
-<script src="/assets/js/runtime~main.87feb3cc.js" defer="defer"></script>
-<script src="/assets/js/main.d75df03d.js" defer="defer"></script>
+<script src="/assets/js/runtime~main.93b61691.js" defer="defer"></script>
+<script src="/assets/js/main.9636bb89.js" defer="defer"></script>
</head>
<body class="navigation-with-keyboard">
<svg xmlns="http://www.w3.org/2000/svg" style="display: none;"><defs>
diff --git a/docs/table-design/data-distribution/partitioning/index.html b/docs/table-design/data-distribution/partitioning/index.html
index bf8a87c2..e723a5e9 100644
--- a/docs/table-design/data-distribution/partitioning/index.html
+++ b/docs/table-design/data-distribution/partitioning/index.html
@@ -15,8 +15,8 @@
<link rel="icon" href="/img/logo.svg">
<link rel="manifest" href="/manifest.json">
<meta name="theme-color" content="#0071e3"><link rel="stylesheet" href="/assets/css/styles.53ed9f81.css">
-<script src="/assets/js/runtime~main.87feb3cc.js" defer="defer"></script>
-<script src="/assets/js/main.d75df03d.js" defer="defer"></script>
+<script src="/assets/js/runtime~main.93b61691.js" defer="defer"></script>
+<script src="/assets/js/main.9636bb89.js" defer="defer"></script>
</head>
<body class="navigation-with-keyboard">
<svg xmlns="http://www.w3.org/2000/svg" style="display: none;"><defs>
diff --git a/docs/table-design/data-distribution/ttl/index.html b/docs/table-design/data-distribution/ttl/index.html
index 76c9c9ad..d8755553 100644
--- a/docs/table-design/data-distribution/ttl/index.html
+++ b/docs/table-design/data-distribution/ttl/index.html
@@ -15,8 +15,8 @@
<link rel="icon" href="/img/logo.svg">
<link rel="manifest" href="/manifest.json">
<meta name="theme-color" content="#0071e3"><link rel="stylesheet" href="/assets/css/styles.53ed9f81.css">
-<script src="/assets/js/runtime~main.87feb3cc.js" defer="defer"></script>
-<script src="/assets/js/main.d75df03d.js" defer="defer"></script>
+<script src="/assets/js/runtime~main.93b61691.js" defer="defer"></script>
+<script src="/assets/js/main.9636bb89.js" defer="defer"></script>
</head>
<body class="navigation-with-keyboard">
<svg xmlns="http://www.w3.org/2000/svg" style="display: none;"><defs>
diff --git a/docs/table-design/data-types/index.html b/docs/table-design/data-types/index.html
index f2ac3a94..a7e9f3f4 100644
--- a/docs/table-design/data-types/index.html
+++ b/docs/table-design/data-types/index.html
@@ -15,8 +15,8 @@
<link rel="icon" href="/img/logo.svg">
<link rel="manifest" href="/manifest.json">
<meta name="theme-color" content="#0071e3"><link rel="stylesheet" href="/assets/css/styles.53ed9f81.css">
-<script src="/assets/js/runtime~main.87feb3cc.js" defer="defer"></script>
-<script src="/assets/js/main.d75df03d.js" defer="defer"></script>
+<script src="/assets/js/runtime~main.93b61691.js" defer="defer"></script>
+<script src="/assets/js/main.9636bb89.js" defer="defer"></script>
</head>
<body class="navigation-with-keyboard">
<svg xmlns="http://www.w3.org/2000/svg" style="display: none;"><defs>
diff --git a/docs/table-design/overview/index.html b/docs/table-design/overview/index.html
index 5ad90b86..9cd3dcbf 100644
--- a/docs/table-design/overview/index.html
+++ b/docs/table-design/overview/index.html
@@ -15,8 +15,8 @@
<link rel="icon" href="/img/logo.svg">
<link rel="manifest" href="/manifest.json">
<meta name="theme-color" content="#0071e3"><link rel="stylesheet" href="/assets/css/styles.53ed9f81.css">
-<script src="/assets/js/runtime~main.87feb3cc.js" defer="defer"></script>
-<script src="/assets/js/main.d75df03d.js" defer="defer"></script>
+<script src="/assets/js/runtime~main.93b61691.js" defer="defer"></script>
+<script src="/assets/js/main.9636bb89.js" defer="defer"></script>
</head>
<body class="navigation-with-keyboard">
<svg xmlns="http://www.w3.org/2000/svg" style="display: none;"><defs>
diff --git a/docs/table-design/table-types/log-table/index.html b/docs/table-design/table-types/log-table/index.html
index 5086f094..25c20020 100644
--- a/docs/table-design/table-types/log-table/index.html
+++ b/docs/table-design/table-types/log-table/index.html
@@ -15,8 +15,8 @@
<link rel="icon" href="/img/logo.svg">
<link rel="manifest" href="/manifest.json">
<meta name="theme-color" content="#0071e3"><link rel="stylesheet" href="/assets/css/styles.53ed9f81.css">
-<script src="/assets/js/runtime~main.87feb3cc.js" defer="defer"></script>
-<script src="/assets/js/main.d75df03d.js" defer="defer"></script>
+<script src="/assets/js/runtime~main.93b61691.js" defer="defer"></script>
+<script src="/assets/js/main.9636bb89.js" defer="defer"></script>
</head>
<body class="navigation-with-keyboard">
<svg xmlns="http://www.w3.org/2000/svg" style="display: none;"><defs>
diff --git a/docs/table-design/table-types/pk-table/index.html b/docs/table-design/table-types/pk-table/index.html
index 581705c1..8f456655 100644
--- a/docs/table-design/table-types/pk-table/index.html
+++ b/docs/table-design/table-types/pk-table/index.html
@@ -15,8 +15,8 @@
<link rel="icon" href="/img/logo.svg">
<link rel="manifest" href="/manifest.json">
<meta name="theme-color" content="#0071e3"><link rel="stylesheet" href="/assets/css/styles.53ed9f81.css">
-<script src="/assets/js/runtime~main.87feb3cc.js" defer="defer"></script>
-<script src="/assets/js/main.d75df03d.js" defer="defer"></script>
+<script src="/assets/js/runtime~main.93b61691.js" defer="defer"></script>
+<script src="/assets/js/main.9636bb89.js" defer="defer"></script>
</head>
<body class="navigation-with-keyboard">
<svg xmlns="http://www.w3.org/2000/svg" style="display: none;"><defs>
diff --git a/docs/table-design/table-types/pk-table/merge-engines/default/index.html b/docs/table-design/table-types/pk-table/merge-engines/default/index.html
index e6fbd41e..309ad438 100644
--- a/docs/table-design/table-types/pk-table/merge-engines/default/index.html
+++ b/docs/table-design/table-types/pk-table/merge-engines/default/index.html
@@ -15,8 +15,8 @@
<link rel="icon" href="/img/logo.svg">
<link rel="manifest" href="/manifest.json">
<meta name="theme-color" content="#0071e3"><link rel="stylesheet" href="/assets/css/styles.53ed9f81.css">
-<script src="/assets/js/runtime~main.87feb3cc.js" defer="defer"></script>
-<script src="/assets/js/main.d75df03d.js" defer="defer"></script>
+<script src="/assets/js/runtime~main.93b61691.js" defer="defer"></script>
+<script src="/assets/js/main.9636bb89.js" defer="defer"></script>
</head>
<body class="navigation-with-keyboard">
<svg xmlns="http://www.w3.org/2000/svg" style="display: none;"><defs>
diff --git a/docs/table-design/table-types/pk-table/merge-engines/first-row/index.html b/docs/table-design/table-types/pk-table/merge-engines/first-row/index.html
index c50e4331..8c36c372 100644
--- a/docs/table-design/table-types/pk-table/merge-engines/first-row/index.html
+++ b/docs/table-design/table-types/pk-table/merge-engines/first-row/index.html
@@ -15,8 +15,8 @@
<link rel="icon" href="/img/logo.svg">
<link rel="manifest" href="/manifest.json">
<meta name="theme-color" content="#0071e3"><link rel="stylesheet" href="/assets/css/styles.53ed9f81.css">
-<script src="/assets/js/runtime~main.87feb3cc.js" defer="defer"></script>
-<script src="/assets/js/main.d75df03d.js" defer="defer"></script>
+<script src="/assets/js/runtime~main.93b61691.js" defer="defer"></script>
+<script src="/assets/js/main.9636bb89.js" defer="defer"></script>
</head>
<body class="navigation-with-keyboard">
<svg xmlns="http://www.w3.org/2000/svg" style="display: none;"><defs>
diff --git a/docs/table-design/table-types/pk-table/merge-engines/index.html b/docs/table-design/table-types/pk-table/merge-engines/index.html
index dbe7c791..d63508cb 100644
--- a/docs/table-design/table-types/pk-table/merge-engines/index.html
+++ b/docs/table-design/table-types/pk-table/merge-engines/index.html
@@ -15,8 +15,8 @@
<link rel="icon" href="/img/logo.svg">
<link rel="manifest" href="/manifest.json">
<meta name="theme-color" content="#0071e3"><link rel="stylesheet" href="/assets/css/styles.53ed9f81.css">
-<script src="/assets/js/runtime~main.87feb3cc.js" defer="defer"></script>
-<script src="/assets/js/main.d75df03d.js" defer="defer"></script>
+<script src="/assets/js/runtime~main.93b61691.js" defer="defer"></script>
+<script src="/assets/js/main.9636bb89.js" defer="defer"></script>
</head>
<body class="navigation-with-keyboard">
<svg xmlns="http://www.w3.org/2000/svg" style="display: none;"><defs>
diff --git a/docs/table-design/table-types/pk-table/merge-engines/versioned/index.html b/docs/table-design/table-types/pk-table/merge-engines/versioned/index.html
index 25918dcc..7ae07c48 100644
--- a/docs/table-design/table-types/pk-table/merge-engines/versioned/index.html
+++ b/docs/table-design/table-types/pk-table/merge-engines/versioned/index.html
@@ -15,8 +15,8 @@
<link rel="icon" href="/img/logo.svg">
<link rel="manifest" href="/manifest.json">
<meta name="theme-color" content="#0071e3"><link rel="stylesheet" href="/assets/css/styles.53ed9f81.css">
-<script src="/assets/js/runtime~main.87feb3cc.js" defer="defer"></script>
-<script src="/assets/js/main.d75df03d.js" defer="defer"></script>
+<script src="/assets/js/runtime~main.93b61691.js" defer="defer"></script>
+<script src="/assets/js/main.9636bb89.js" defer="defer"></script>
</head>
<body class="navigation-with-keyboard">
<svg xmlns="http://www.w3.org/2000/svg" style="display: none;"><defs>
diff --git a/downloads/index.html b/downloads/index.html
index 371b9c5e..22d6c5ae 100644
--- a/downloads/index.html
+++ b/downloads/index.html
@@ -15,8 +15,8 @@
<link rel="icon" href="/img/logo.svg">
<link rel="manifest" href="/manifest.json">
<meta name="theme-color" content="#0071e3"><link rel="stylesheet" href="/assets/css/styles.53ed9f81.css">
-<script src="/assets/js/runtime~main.87feb3cc.js" defer="defer"></script>
-<script src="/assets/js/main.d75df03d.js" defer="defer"></script>
+<script src="/assets/js/runtime~main.93b61691.js" defer="defer"></script>
+<script src="/assets/js/main.9636bb89.js" defer="defer"></script>
</head>
<body class="navigation-with-keyboard">
<svg xmlns="http://www.w3.org/2000/svg" style="display: none;"><defs>
diff --git a/img/avatars/wanglilei.png b/img/avatars/wanglilei.png
new file mode 100644
index 00000000..601aa32a
Binary files /dev/null and b/img/avatars/wanglilei.png differ
diff --git a/img/avatars/zhangxinyu.png b/img/avatars/zhangxinyu.png
new file mode 100644
index 00000000..102d8eff
Binary files /dev/null and b/img/avatars/zhangxinyu.png differ
diff --git a/index.html b/index.html
index 5ef040ba..131e7f2a 100644
--- a/index.html
+++ b/index.html
@@ -15,8 +15,8 @@
<link rel="icon" href="/img/logo.svg">
<link rel="manifest" href="/manifest.json">
<meta name="theme-color" content="#0071e3"><link rel="stylesheet" href="/assets/css/styles.53ed9f81.css">
-<script src="/assets/js/runtime~main.87feb3cc.js" defer="defer"></script>
-<script src="/assets/js/main.d75df03d.js" defer="defer"></script>
+<script src="/assets/js/runtime~main.93b61691.js" defer="defer"></script>
+<script src="/assets/js/main.9636bb89.js" defer="defer"></script>
</head>
<body class="navigation-with-keyboard">
<svg xmlns="http://www.w3.org/2000/svg" style="display: none;"><defs>
diff --git a/learn/talks/index.html b/learn/talks/index.html
index c10fa9e1..1c0ec9f2 100644
--- a/learn/talks/index.html
+++ b/learn/talks/index.html
@@ -15,8 +15,8 @@
<link rel="icon" href="/img/logo.svg">
<link rel="manifest" href="/manifest.json">
<meta name="theme-color" content="#0071e3"><link rel="stylesheet" href="/assets/css/styles.53ed9f81.css">
-<script src="/assets/js/runtime~main.87feb3cc.js" defer="defer"></script>
-<script src="/assets/js/main.d75df03d.js" defer="defer"></script>
+<script src="/assets/js/runtime~main.93b61691.js" defer="defer"></script>
+<script src="/assets/js/main.9636bb89.js" defer="defer"></script>
</head>
<body class="navigation-with-keyboard">
<svg xmlns="http://www.w3.org/2000/svg" style="display: none;"><defs>
diff --git a/learn/videos/index.html b/learn/videos/index.html
index cbad871e..ce48c578 100644
--- a/learn/videos/index.html
+++ b/learn/videos/index.html
@@ -15,8 +15,8 @@
<link rel="icon" href="/img/logo.svg">
<link rel="manifest" href="/manifest.json">
<meta name="theme-color" content="#0071e3"><link rel="stylesheet" href="/assets/css/styles.53ed9f81.css">
-<script src="/assets/js/runtime~main.87feb3cc.js" defer="defer"></script>
-<script src="/assets/js/main.d75df03d.js" defer="defer"></script>
+<script src="/assets/js/runtime~main.93b61691.js" defer="defer"></script>
+<script src="/assets/js/main.9636bb89.js" defer="defer"></script>
</head>
<body class="navigation-with-keyboard">
<svg xmlns="http://www.w3.org/2000/svg" style="display: none;"><defs>
diff --git a/roadmap/index.html b/roadmap/index.html
index 738e33a8..10c25ca0 100644
--- a/roadmap/index.html
+++ b/roadmap/index.html
@@ -15,8 +15,8 @@
<link rel="icon" href="/img/logo.svg">
<link rel="manifest" href="/manifest.json">
<meta name="theme-color" content="#0071e3"><link rel="stylesheet" href="/assets/css/styles.53ed9f81.css">
-<script src="/assets/js/runtime~main.87feb3cc.js" defer="defer"></script>
-<script src="/assets/js/main.d75df03d.js" defer="defer"></script>
+<script src="/assets/js/runtime~main.93b61691.js" defer="defer"></script>
+<script src="/assets/js/main.9636bb89.js" defer="defer"></script>
</head>
<body class="navigation-with-keyboard">
<svg xmlns="http://www.w3.org/2000/svg" style="display: none;"><defs>
diff --git a/search/index.html b/search/index.html
index 97f36d85..a4fd9f81 100644
--- a/search/index.html
+++ b/search/index.html
@@ -15,8 +15,8 @@
<link rel="icon" href="/img/logo.svg">
<link rel="manifest" href="/manifest.json">
<meta name="theme-color" content="#0071e3"><link rel="stylesheet" href="/assets/css/styles.53ed9f81.css">
-<script src="/assets/js/runtime~main.87feb3cc.js" defer="defer"></script>
-<script src="/assets/js/main.d75df03d.js" defer="defer"></script>
+<script src="/assets/js/runtime~main.93b61691.js" defer="defer"></script>
+<script src="/assets/js/main.9636bb89.js" defer="defer"></script>
</head>
<body class="navigation-with-keyboard">
<svg xmlns="http://www.w3.org/2000/svg" style="display: none;"><defs>
diff --git a/sitemap.xml b/sitemap.xml
index f0b512a3..983f33b2 100644
--- a/sitemap.xml
+++ b/sitemap.xml
@@ -1 +1 @@
-<?xml version="1.0" encoding="UTF-8"?><urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9" xmlns:news="http://www.google.com/schemas/sitemap-news/0.9" xmlns:xhtml="http://www.w3.org/1999/xhtml" xmlns:image="http://www.google.com/schemas/sitemap-image/1.1" xmlns:video="http://www.google.com/schemas/sitemap-video/1.1"><url><loc>https://fluss.apache.org/blog/</loc><changefreq>weekly</changefreq><priority>0.5</priority></url><url><loc>https://fluss.apache.org/blog/archive/</loc><chang [...]
\ No newline at end of file
+<?xml version="1.0" encoding="UTF-8"?><urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9" xmlns:news="http://www.google.com/schemas/sitemap-news/0.9" xmlns:xhtml="http://www.w3.org/1999/xhtml" xmlns:image="http://www.google.com/schemas/sitemap-image/1.1" xmlns:video="http://www.google.com/schemas/sitemap-video/1.1"><url><loc>https://fluss.apache.org/blog/</loc><changefreq>weekly</changefreq><priority>0.5</priority></url><url><loc>https://fluss.apache.org/blog/archive/</loc><chang [...]
\ No newline at end of file
diff --git a/sw.js b/sw.js
index be5e86d6..05e2f2ac 100644
--- a/sw.js
+++ b/sw.js
@@ -4558,7 +4558,7 @@ function getPossibleURLs(url) {
(async () => {
const params = parseSwParams();
// eslint-disable-next-line no-underscore-dangle
- const precacheManifest = [{"revision":"11abcadba9624b1e74264fcd40ac7a7d","url":"404.html"},{"revision":"2d034e64e92e4623ac4c35e67fb0f4dd","url":"assets/css/styles.53ed9f81.css"},{"revision":"20792dd0668c763453b07f3b8361dbad","url":"assets/js/0159e4b3.5cf663b2.js"},{"revision":"89e3dce1ed5eb9132f013cdf7e531e06","url":"assets/js/019059a8.1f607fbd.js"},{"revision":"364f68f114f35e90d1ad2d968e9939da","url":"assets/js/01a85c17.6d039709.js"},{"revision":"d70d73f0e9126282b97c612d47fd3f55","u [...]
+ const precacheManifest = [{"revision":"0446b813b4a3f6a4c60083303f2bbb2f","url":"404.html"},{"revision":"2d034e64e92e4623ac4c35e67fb0f4dd","url":"assets/css/styles.53ed9f81.css"},{"revision":"20792dd0668c763453b07f3b8361dbad","url":"assets/js/0159e4b3.5cf663b2.js"},{"revision":"89e3dce1ed5eb9132f013cdf7e531e06","url":"assets/js/019059a8.1f607fbd.js"},{"revision":"364f68f114f35e90d1ad2d968e9939da","url":"assets/js/01a85c17.6d039709.js"},{"revision":"d70d73f0e9126282b97c612d47fd3f55","u [...]
const controller = new workbox_precaching__WEBPACK_IMPORTED_MODULE_0__.PrecacheController({
// Safer to turn this true?
fallbackToNetwork: true,