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 2026/04/20 06:56:56 UTC
(fluss-website) branch asf-site updated: Deploy website - based on 776102c21afa702170630c55a118b0441b769bf1
This is an automated email from the ASF dual-hosted git repository.
github-actions[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 5d4452581 Deploy website - based on 776102c21afa702170630c55a118b0441b769bf1
5d4452581 is described below
commit 5d44525810d7ed7bfc1d542bbab121cdbaa388a0
Author: gh-actions <ac...@github.com>
AuthorDate: Mon Apr 20 06:56:48 2026 +0000
Deploy website - based on 776102c21afa702170630c55a118b0441b769bf1
---
404.html | 4 +-
...layer_arch-e9939c0960c89e5fbccbf9806418db5f.png | Bin 0 -> 489931 bytes
.../arch-0290889aab197b1d65f26605420ae7e4.png | Bin 0 -> 121423 bytes
.../arch3-fff6f1c8fbf2246cfd476cc947d6aca6.png | Bin 0 -> 368628 bytes
.../arch4-1a1c321ddce7027f6bb89f14d3007939.png | Bin 0 -> 489966 bytes
.../arch5-ae5729b648a47e8a4e8ed804cd0f2c87.png | Bin 0 -> 492488 bytes
.../arch6-5394a5c2d2e041c53218b004d30e308b.png | Bin 0 -> 510298 bytes
.../banner-8d98ad1a7ee1c477949be609a3f8ae97.jpg | Bin 0 -> 261852 bytes
.../delta-a1f381c3d99174f7fe1af1a8d525ee67.png | Bin 0 -> 471206 bytes
.../future1-c553b8da51276a5e56c0e3bd70b706d6.png | Bin 0 -> 482760 bytes
.../future2-6ade7f5fde156c28259354d068c2422c.png | Bin 0 -> 472329 bytes
.../issues-8f1bfcdd61f876151104cb8ad07c72a9.png | Bin 0 -> 300133 bytes
.../matrix1-06469c8619fc13548b69ef3d251c4358.png | Bin 0 -> 287921 bytes
.../matrix2-ff8075a31b6f7ff2aef3ad6348c06f82.png | Bin 0 -> 402422 bytes
...painpoints-a628951c0368b0e5fa21c23f79b85603.png | Bin 0 -> 454469 bytes
...ainpoints2-ba43f0007d6299aaa4eb7b42f30bac90.png | Bin 0 -> 508884 bytes
...ainpoints3-be364f89be387994e0475b0162116cc5.png | Bin 0 -> 451539 bytes
...ainpoints4-2ab1271cf7963066a01571e44fced03b.png | Bin 0 -> 417316 bytes
.../results-ddca1b55491dee5fc1e51ac3903466e4.png | Bin 0 -> 250760 bytes
.../results2-c5f2378db8d4e2a01de812a9fb3d607f.png | Bin 0 -> 311389 bytes
.../results3-61913d100d2167c5013e22186a0b51fa.png | Bin 0 -> 423287 bytes
.../results4-5656ef59df33ac93eb438b3cfc94e98a.png | Bin 0 -> 302941 bytes
.../results5-c6d0022743553219299f7d2bb86b9fbe.png | Bin 0 -> 300847 bytes
.../scenario3-956a82e94cd7e6c4b8ce0606207ee19f.png | Bin 0 -> 479223 bytes
.../solution2-7a7d1ba42b3406116debb25bc674a427.png | Bin 0 -> 510621 bytes
.../{08af526d.1442eb9a.js => 08af526d.91dc9d61.js} | 2 +-
assets/js/19a491a8.d725ebc5.js | 1 +
assets/js/767333eb.13985b74.js | 1 +
.../{7aafb598.00da2f0d.js => 7aafb598.33c1fa24.js} | 2 +-
assets/js/814f3328.c8e3c7bb.js | 1 +
assets/js/814f3328.f484ed6c.js | 1 -
.../{d87df568.81a2664f.js => d87df568.fbda2f88.js} | 2 +-
assets/js/dbfc4782.0cf587f4.js | 1 -
assets/js/dbfc4782.9bcb213a.js | 1 +
.../{dd04b75e.3c2612ff.js => dd04b75e.164a3cb8.js} | 2 +-
.../{ea70c07d.ab3333c6.js => ea70c07d.40ed5a27.js} | 2 +-
.../{fa91aee9.ef8c9c20.js => fa91aee9.dffe34a6.js} | 2 +-
assets/js/main.2460f850.js | 2 +
...js.LICENSE.txt => main.2460f850.js.LICENSE.txt} | 0
assets/js/main.9d2d82c2.js | 2 -
assets/js/runtime~main.2fc346f3.js | 1 -
assets/js/runtime~main.33140780.js | 1 +
avatars/matrixsparse.jpeg | Bin 0 -> 20767 bytes
.../index.html | 8 +-
blog/archive/index.html | 6 +-
blog/atom.xml | 357 ++++++++++++++++-----
blog/authors/index.html | 6 +-
blog/fluss-for-ai/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/fluss_fraud_detection/index.html | 6 +-
blog/fluss_rust_client_release/index.html | 6 +-
blog/hands-on-fluss-lakehouse/index.html | 6 +-
blog/index.html | 30 +-
blog/page/2/index.html | 19 +-
blog/page/3/index.html | 10 +-
blog/partial-updates/index.html | 6 +-
blog/pk-key-tables-log-cache-streaming/index.html | 6 +-
blog/releases/0.6/index.html | 6 +-
blog/releases/0.7/index.html | 6 +-
blog/releases/0.8/index.html | 6 +-
blog/releases/0.9/index.html | 8 +-
blog/roaringbitmap-uv-deduplication/index.html | 8 +-
blog/rss.xml | 349 +++++++++++++++-----
blog/tags/apache-fluss/index.html | 6 +-
blog/tags/apache-iceberg/index.html | 6 +-
blog/tags/arrow/index.html | 6 +-
blog/tags/fluss-cpp/index.html | 6 +-
blog/tags/fluss-rs/index.html | 6 +-
blog/tags/fluss-rust/index.html | 6 +-
blog/tags/index.html | 6 +-
blog/tags/pyfluss/index.html | 6 +-
blog/tags/real-time-analytics/index.html | 6 +-
blog/tags/releases/index.html | 6 +-
blog/tags/streaming-lakehouse/index.html | 6 +-
.../index.html | 293 +++++++++++++++++
blog/taobao-practice/index.html | 6 +-
blog/tiering-service/index.html | 6 +-
blog/unified-streaming-lakehouse/index.html | 6 +-
blog/unveil-fluss-logo/index.html | 6 +-
.../index.html | 6 +-
blog/why-fluss/index.html | 6 +-
community/become-a-committer/index.html | 4 +-
community/dev/building/index.html | 4 +-
community/dev/ide-setup/index.html | 4 +-
community/fluss-logos/index.html | 4 +-
community/fluss-team/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-release/index.html | 4 +-
.../creating-a-fluss-shaded-release/index.html | 4 +-
.../release-manager-preparation/index.html | 4 +-
.../verifying-a-fluss-release/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/0.7/apis/java-client/index.html | 4 +-
docs/0.7/concepts/architecture/index.html | 4 +-
docs/0.7/engine-flink/datastream/index.html | 4 +-
docs/0.7/engine-flink/ddl/index.html | 4 +-
docs/0.7/engine-flink/getting-started/index.html | 4 +-
docs/0.7/engine-flink/lookups/index.html | 4 +-
docs/0.7/engine-flink/options/index.html | 4 +-
docs/0.7/engine-flink/reads/index.html | 4 +-
docs/0.7/engine-flink/writes/index.html | 4 +-
docs/0.7/index.html | 4 +-
.../deploying-distributed-cluster/index.html | 4 +-
.../deploying-local-cluster/index.html | 4 +-
.../deploying-with-docker/index.html | 4 +-
docs/0.7/install-deploy/overview/index.html | 4 +-
docs/0.7/maintenance/configuration/index.html | 4 +-
docs/0.7/maintenance/filesystems/hdfs/index.html | 4 +-
docs/0.7/maintenance/filesystems/oss/index.html | 4 +-
.../maintenance/filesystems/overview/index.html | 4 +-
docs/0.7/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/0.7/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/0.7/quickstart/flink/index.html | 4 +-
docs/0.7/quickstart/security/index.html | 4 +-
docs/0.7/security/authentication/index.html | 4 +-
docs/0.7/security/authorization/index.html | 4 +-
docs/0.7/security/overview/index.html | 4 +-
.../integrate-data-lakes/paimon/index.html | 4 +-
docs/0.7/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.7/table-design/data-types/index.html | 4 +-
docs/0.7/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/0.8/apis/java-client/index.html | 4 +-
docs/0.8/concepts/architecture/index.html | 4 +-
docs/0.8/engine-flink/datastream/index.html | 4 +-
docs/0.8/engine-flink/ddl/index.html | 4 +-
docs/0.8/engine-flink/delta-joins/index.html | 4 +-
docs/0.8/engine-flink/getting-started/index.html | 4 +-
docs/0.8/engine-flink/lookups/index.html | 4 +-
docs/0.8/engine-flink/options/index.html | 4 +-
docs/0.8/engine-flink/reads/index.html | 4 +-
docs/0.8/engine-flink/writes/index.html | 4 +-
docs/0.8/index.html | 4 +-
.../deploying-distributed-cluster/index.html | 4 +-
.../deploying-local-cluster/index.html | 4 +-
.../deploying-with-docker/index.html | 4 +-
.../install-deploy/deploying-with-helm/index.html | 4 +-
docs/0.8/install-deploy/overview/index.html | 4 +-
docs/0.8/maintenance/configuration/index.html | 4 +-
docs/0.8/maintenance/filesystems/hdfs/index.html | 4 +-
docs/0.8/maintenance/filesystems/obs/index.html | 4 +-
docs/0.8/maintenance/filesystems/oss/index.html | 4 +-
.../maintenance/filesystems/overview/index.html | 4 +-
docs/0.8/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 +-
.../operations/graceful-shutdown/index.html | 4 +-
docs/0.8/maintenance/operations/racks/index.html | 4 +-
.../operations/updating-configs/index.html | 4 +-
.../operations/upgrade-notes-0.8/index.html | 4 +-
.../operations/upgrade-notes-0.9/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/0.8/quickstart/flink/index.html | 4 +-
docs/0.8/quickstart/lakehouse/index.html | 4 +-
docs/0.8/quickstart/security/index.html | 4 +-
docs/0.8/security/authentication/index.html | 4 +-
docs/0.8/security/authorization/index.html | 4 +-
docs/0.8/security/overview/index.html | 4 +-
.../integrate-data-lakes/iceberg/index.html | 4 +-
.../integrate-data-lakes/lance/index.html | 4 +-
.../integrate-data-lakes/paimon/index.html | 4 +-
docs/0.8/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.8/table-design/data-types/index.html | 4 +-
docs/0.8/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/apis/client-support-matrix/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/delta-joins/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/procedures/index.html | 4 +-
docs/engine-flink/reads/index.html | 4 +-
docs/engine-flink/writes/index.html | 4 +-
docs/engine-spark/ddl/index.html | 4 +-
docs/engine-spark/getting-started/index.html | 4 +-
docs/engine-spark/options/index.html | 4 +-
docs/engine-spark/procedures/index.html | 4 +-
docs/engine-spark/reads/index.html | 4 +-
docs/engine-spark/structured-streaming/index.html | 4 +-
docs/engine-spark/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/deploying-with-helm/index.html | 4 +-
docs/install-deploy/overview/index.html | 4 +-
docs/maintenance/configuration/index.html | 4 +-
docs/maintenance/filesystems/azure/index.html | 4 +-
docs/maintenance/filesystems/hdfs/index.html | 4 +-
docs/maintenance/filesystems/obs/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 +-
.../operations/graceful-shutdown/index.html | 4 +-
docs/maintenance/operations/racks/index.html | 4 +-
docs/maintenance/operations/rebalance/index.html | 4 +-
.../operations/updating-configs/index.html | 4 +-
.../operations/upgrade-notes-0.8/index.html | 4 +-
.../operations/upgrade-notes-0.9/index.html | 4 +-
.../operations/upgrade-notes-archive/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/client-support-matrix/index.html | 4 +-
docs/next/apis/cpp-client/index.html | 4 +-
docs/next/apis/java-client/index.html | 4 +-
docs/next/apis/python-client/index.html | 4 +-
docs/next/apis/rust-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/delta-joins/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/procedures/index.html | 4 +-
docs/next/engine-flink/reads/index.html | 4 +-
docs/next/engine-flink/writes/index.html | 4 +-
docs/next/engine-spark/ddl/index.html | 4 +-
docs/next/engine-spark/getting-started/index.html | 4 +-
docs/next/engine-spark/options/index.html | 4 +-
docs/next/engine-spark/procedures/index.html | 4 +-
docs/next/engine-spark/reads/index.html | 4 +-
.../engine-spark/structured-streaming/index.html | 4 +-
docs/next/engine-spark/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 +-
.../install-deploy/deploying-with-helm/index.html | 4 +-
docs/next/install-deploy/overview/index.html | 4 +-
docs/next/maintenance/configuration/index.html | 4 +-
docs/next/maintenance/filesystems/azure/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 +-
.../operations/graceful-shutdown/index.html | 4 +-
docs/next/maintenance/operations/racks/index.html | 4 +-
.../maintenance/operations/rebalance/index.html | 4 +-
.../operations/updating-configs/index.html | 4 +-
.../operations/upgrade-notes-0.8/index.html | 4 +-
.../operations/upgrade-notes-0.9/index.html | 4 +-
.../operations/upgrade-notes-1.0/index.html | 4 +-
.../operations/upgrade-notes-archive/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/lakehouse/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/iceberg/index.html | 4 +-
.../integrate-data-lakes/lance/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-formats/index.html | 4 +-
docs/next/table-design/data-types/index.html | 4 +-
.../merge-engines/aggregation/index.html | 4 +-
.../table-design/merge-engines/default/index.html | 4 +-
.../merge-engines/first-row/index.html | 4 +-
docs/next/table-design/merge-engines/index.html | 4 +-
.../merge-engines/versioned/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 +-
docs/next/table-design/virtual-tables/index.html | 4 +-
docs/quickstart/flink/index.html | 4 +-
docs/quickstart/lakehouse/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/iceberg/index.html | 4 +-
.../integrate-data-lakes/lance/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-formats/index.html | 4 +-
docs/table-design/data-types/index.html | 4 +-
.../merge-engines/aggregation/index.html | 4 +-
docs/table-design/merge-engines/default/index.html | 4 +-
.../merge-engines/first-row/index.html | 4 +-
docs/table-design/merge-engines/index.html | 4 +-
.../merge-engines/versioned/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 +-
docs/table-design/virtual-tables/index.html | 4 +-
downloads/index.html | 4 +-
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 +-
426 files changed, 1684 insertions(+), 982 deletions(-)
diff --git a/404.html b/404.html
index 4fee77caa..e4fbf3e2a 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.5187a663.css">
-<script src="/assets/js/runtime~main.2fc346f3.js" defer="defer"></script>
-<script src="/assets/js/main.9d2d82c2.js" defer="defer"></script>
+<script src="/assets/js/runtime~main.33140780.js" defer="defer"></script>
+<script src="/assets/js/main.2460f850.js" defer="defer"></script>
</head>
<body>
<svg style="display: none;"><defs>
diff --git a/assets/images/3_layer_arch-e9939c0960c89e5fbccbf9806418db5f.png b/assets/images/3_layer_arch-e9939c0960c89e5fbccbf9806418db5f.png
new file mode 100644
index 000000000..84dd0741f
Binary files /dev/null and b/assets/images/3_layer_arch-e9939c0960c89e5fbccbf9806418db5f.png differ
diff --git a/assets/images/arch-0290889aab197b1d65f26605420ae7e4.png b/assets/images/arch-0290889aab197b1d65f26605420ae7e4.png
new file mode 100644
index 000000000..fec993b87
Binary files /dev/null and b/assets/images/arch-0290889aab197b1d65f26605420ae7e4.png differ
diff --git a/assets/images/arch3-fff6f1c8fbf2246cfd476cc947d6aca6.png b/assets/images/arch3-fff6f1c8fbf2246cfd476cc947d6aca6.png
new file mode 100644
index 000000000..0fd1c3c4e
Binary files /dev/null and b/assets/images/arch3-fff6f1c8fbf2246cfd476cc947d6aca6.png differ
diff --git a/assets/images/arch4-1a1c321ddce7027f6bb89f14d3007939.png b/assets/images/arch4-1a1c321ddce7027f6bb89f14d3007939.png
new file mode 100644
index 000000000..5f8301a66
Binary files /dev/null and b/assets/images/arch4-1a1c321ddce7027f6bb89f14d3007939.png differ
diff --git a/assets/images/arch5-ae5729b648a47e8a4e8ed804cd0f2c87.png b/assets/images/arch5-ae5729b648a47e8a4e8ed804cd0f2c87.png
new file mode 100644
index 000000000..2772e02e1
Binary files /dev/null and b/assets/images/arch5-ae5729b648a47e8a4e8ed804cd0f2c87.png differ
diff --git a/assets/images/arch6-5394a5c2d2e041c53218b004d30e308b.png b/assets/images/arch6-5394a5c2d2e041c53218b004d30e308b.png
new file mode 100644
index 000000000..215f7a66d
Binary files /dev/null and b/assets/images/arch6-5394a5c2d2e041c53218b004d30e308b.png differ
diff --git a/assets/images/banner-8d98ad1a7ee1c477949be609a3f8ae97.jpg b/assets/images/banner-8d98ad1a7ee1c477949be609a3f8ae97.jpg
new file mode 100644
index 000000000..c663fa2dd
Binary files /dev/null and b/assets/images/banner-8d98ad1a7ee1c477949be609a3f8ae97.jpg differ
diff --git a/assets/images/delta-a1f381c3d99174f7fe1af1a8d525ee67.png b/assets/images/delta-a1f381c3d99174f7fe1af1a8d525ee67.png
new file mode 100644
index 000000000..638c66481
Binary files /dev/null and b/assets/images/delta-a1f381c3d99174f7fe1af1a8d525ee67.png differ
diff --git a/assets/images/future1-c553b8da51276a5e56c0e3bd70b706d6.png b/assets/images/future1-c553b8da51276a5e56c0e3bd70b706d6.png
new file mode 100644
index 000000000..5f7bc6560
Binary files /dev/null and b/assets/images/future1-c553b8da51276a5e56c0e3bd70b706d6.png differ
diff --git a/assets/images/future2-6ade7f5fde156c28259354d068c2422c.png b/assets/images/future2-6ade7f5fde156c28259354d068c2422c.png
new file mode 100644
index 000000000..08864efd7
Binary files /dev/null and b/assets/images/future2-6ade7f5fde156c28259354d068c2422c.png differ
diff --git a/assets/images/issues-8f1bfcdd61f876151104cb8ad07c72a9.png b/assets/images/issues-8f1bfcdd61f876151104cb8ad07c72a9.png
new file mode 100644
index 000000000..d966cfe16
Binary files /dev/null and b/assets/images/issues-8f1bfcdd61f876151104cb8ad07c72a9.png differ
diff --git a/assets/images/matrix1-06469c8619fc13548b69ef3d251c4358.png b/assets/images/matrix1-06469c8619fc13548b69ef3d251c4358.png
new file mode 100644
index 000000000..8eee9ad34
Binary files /dev/null and b/assets/images/matrix1-06469c8619fc13548b69ef3d251c4358.png differ
diff --git a/assets/images/matrix2-ff8075a31b6f7ff2aef3ad6348c06f82.png b/assets/images/matrix2-ff8075a31b6f7ff2aef3ad6348c06f82.png
new file mode 100644
index 000000000..9c9031559
Binary files /dev/null and b/assets/images/matrix2-ff8075a31b6f7ff2aef3ad6348c06f82.png differ
diff --git a/assets/images/painpoints-a628951c0368b0e5fa21c23f79b85603.png b/assets/images/painpoints-a628951c0368b0e5fa21c23f79b85603.png
new file mode 100644
index 000000000..635580091
Binary files /dev/null and b/assets/images/painpoints-a628951c0368b0e5fa21c23f79b85603.png differ
diff --git a/assets/images/painpoints2-ba43f0007d6299aaa4eb7b42f30bac90.png b/assets/images/painpoints2-ba43f0007d6299aaa4eb7b42f30bac90.png
new file mode 100644
index 000000000..6279c05f8
Binary files /dev/null and b/assets/images/painpoints2-ba43f0007d6299aaa4eb7b42f30bac90.png differ
diff --git a/assets/images/painpoints3-be364f89be387994e0475b0162116cc5.png b/assets/images/painpoints3-be364f89be387994e0475b0162116cc5.png
new file mode 100644
index 000000000..10414d363
Binary files /dev/null and b/assets/images/painpoints3-be364f89be387994e0475b0162116cc5.png differ
diff --git a/assets/images/painpoints4-2ab1271cf7963066a01571e44fced03b.png b/assets/images/painpoints4-2ab1271cf7963066a01571e44fced03b.png
new file mode 100644
index 000000000..0118e52b9
Binary files /dev/null and b/assets/images/painpoints4-2ab1271cf7963066a01571e44fced03b.png differ
diff --git a/assets/images/results-ddca1b55491dee5fc1e51ac3903466e4.png b/assets/images/results-ddca1b55491dee5fc1e51ac3903466e4.png
new file mode 100644
index 000000000..1c28e4281
Binary files /dev/null and b/assets/images/results-ddca1b55491dee5fc1e51ac3903466e4.png differ
diff --git a/assets/images/results2-c5f2378db8d4e2a01de812a9fb3d607f.png b/assets/images/results2-c5f2378db8d4e2a01de812a9fb3d607f.png
new file mode 100644
index 000000000..3d44989ee
Binary files /dev/null and b/assets/images/results2-c5f2378db8d4e2a01de812a9fb3d607f.png differ
diff --git a/assets/images/results3-61913d100d2167c5013e22186a0b51fa.png b/assets/images/results3-61913d100d2167c5013e22186a0b51fa.png
new file mode 100644
index 000000000..3faa9d45a
Binary files /dev/null and b/assets/images/results3-61913d100d2167c5013e22186a0b51fa.png differ
diff --git a/assets/images/results4-5656ef59df33ac93eb438b3cfc94e98a.png b/assets/images/results4-5656ef59df33ac93eb438b3cfc94e98a.png
new file mode 100644
index 000000000..131b913c2
Binary files /dev/null and b/assets/images/results4-5656ef59df33ac93eb438b3cfc94e98a.png differ
diff --git a/assets/images/results5-c6d0022743553219299f7d2bb86b9fbe.png b/assets/images/results5-c6d0022743553219299f7d2bb86b9fbe.png
new file mode 100644
index 000000000..17d2cbd15
Binary files /dev/null and b/assets/images/results5-c6d0022743553219299f7d2bb86b9fbe.png differ
diff --git a/assets/images/scenario3-956a82e94cd7e6c4b8ce0606207ee19f.png b/assets/images/scenario3-956a82e94cd7e6c4b8ce0606207ee19f.png
new file mode 100644
index 000000000..9228b7fde
Binary files /dev/null and b/assets/images/scenario3-956a82e94cd7e6c4b8ce0606207ee19f.png differ
diff --git a/assets/images/solution2-7a7d1ba42b3406116debb25bc674a427.png b/assets/images/solution2-7a7d1ba42b3406116debb25bc674a427.png
new file mode 100644
index 000000000..da7dda422
Binary files /dev/null and b/assets/images/solution2-7a7d1ba42b3406116debb25bc674a427.png differ
diff --git a/assets/js/08af526d.1442eb9a.js b/assets/js/08af526d.91dc9d61.js
similarity index 62%
rename from assets/js/08af526d.1442eb9a.js
rename to assets/js/08af526d.91dc9d61.js
index a449807ed..cd36283d5 100644
--- a/assets/js/08af526d.1442eb9a.js
+++ b/assets/js/08af526d.91dc9d61.js
@@ -1 +1 @@
-"use strict";(globalThis.webpackChunkfluss_website=globalThis.webpackChunkfluss_website||[]).push([[529],{41344(e){e.exports=JSON.parse('{"metadata":{"permalink":"/blog","page":1,"postsPerPage":10,"totalPages":3,"totalCount":22,"nextPage":"/blog/page/2","blogDescription":"Blog","blogTitle":"Blog"}}')}}]);
\ No newline at end of file
+"use strict";(globalThis.webpackChunkfluss_website=globalThis.webpackChunkfluss_website||[]).push([[529],{41344(e){e.exports=JSON.parse('{"metadata":{"permalink":"/blog","page":1,"postsPerPage":10,"totalPages":3,"totalCount":23,"nextPage":"/blog/page/2","blogDescription":"Blog","blogTitle":"Blog"}}')}}]);
\ No newline at end of file
diff --git a/assets/js/19a491a8.d725ebc5.js b/assets/js/19a491a8.d725ebc5.js
new file mode 100644
index 000000000..c507d5f34
--- /dev/null
+++ b/assets/js/19a491a8.d725ebc5.js
@@ -0,0 +1 @@
+"use strict";(globalThis.webpackChunkfluss_website=globalThis.webpackChunkfluss_website||[]).push([[299],{69759(e,t,n){n.r(t),n.d(t,{assets:()=>l,contentTitle:()=>r,default:()=>m,frontMatter:()=>o,metadata:()=>s,toc:()=>c});var s=n(89412),i=n(74848),a=n(28453);const o={slug:"taobao-instant-commerce-real-time-decision",title:"Taobao Real-Time Decisions at Scale with Fluss",sidebar_label:"Taobao Instant Commerce: Real-Time Decisions at Scale with Fluss",authors:["matrixsparse"]},r=void 0,l [...]
\ No newline at end of file
diff --git a/assets/js/767333eb.13985b74.js b/assets/js/767333eb.13985b74.js
new file mode 100644
index 000000000..5ab09d5fe
--- /dev/null
+++ b/assets/js/767333eb.13985b74.js
@@ -0,0 +1 @@
+"use strict";(globalThis.webpackChunkfluss_website=globalThis.webpackChunkfluss_website||[]).push([[5909],{27933(e,n,i){i.r(n),i.d(n,{assets:()=>l,contentTitle:()=>o,default:()=>u,frontMatter:()=>r,metadata:()=>t,toc:()=>d});var t=i(89412),a=i(74848),s=i(28453);const r={slug:"taobao-instant-commerce-real-time-decision",title:"Taobao Real-Time Decisions at Scale with Fluss",sidebar_label:"Taobao Instant Commerce: Real-Time Decisions at Scale with Fluss",authors:["matrixsparse"]},o=void 0, [...]
\ No newline at end of file
diff --git a/assets/js/7aafb598.00da2f0d.js b/assets/js/7aafb598.33c1fa24.js
similarity index 60%
rename from assets/js/7aafb598.00da2f0d.js
rename to assets/js/7aafb598.33c1fa24.js
index cdedf8b77..f6125fa4e 100644
--- a/assets/js/7aafb598.00da2f0d.js
+++ b/assets/js/7aafb598.33c1fa24.js
@@ -1 +1 @@
-"use strict";(globalThis.webpackChunkfluss_website=globalThis.webpackChunkfluss_website||[]).push([[3382],{24614(e){e.exports=JSON.parse('{"metadata":{"permalink":"/blog/page/3","page":3,"postsPerPage":10,"totalPages":3,"totalCount":22,"previousPage":"/blog/page/2","blogDescription":"Blog","blogTitle":"Blog"}}')}}]);
\ No newline at end of file
+"use strict";(globalThis.webpackChunkfluss_website=globalThis.webpackChunkfluss_website||[]).push([[3382],{24614(e){e.exports=JSON.parse('{"metadata":{"permalink":"/blog/page/3","page":3,"postsPerPage":10,"totalPages":3,"totalCount":23,"previousPage":"/blog/page/2","blogDescription":"Blog","blogTitle":"Blog"}}')}}]);
\ No newline at end of file
diff --git a/assets/js/814f3328.c8e3c7bb.js b/assets/js/814f3328.c8e3c7bb.js
new file mode 100644
index 000000000..83bbe4cc2
--- /dev/null
+++ b/assets/js/814f3328.c8e3c7bb.js
@@ -0,0 +1 @@
+"use strict";(globalThis.webpackChunkfluss_website=globalThis.webpackChunkfluss_website||[]).push([[7472],{55513(e){e.exports=JSON.parse('{"title":"All our posts","items":[{"title":"Taobao Instant Commerce: Real-Time Decisions at Scale with Fluss","permalink":"/blog/taobao-instant-commerce-real-time-decision","unlisted":false,"date":"2026-04-20T00:00:00.000Z"},{"title":"Real-Time Multi-Dimensional Unique Visitor Deduplication in Practice","permalink":"/blog/roaringbitmap-uv-deduplication [...]
\ No newline at end of file
diff --git a/assets/js/814f3328.f484ed6c.js b/assets/js/814f3328.f484ed6c.js
deleted file mode 100644
index dc0c09ee4..000000000
--- a/assets/js/814f3328.f484ed6c.js
+++ /dev/null
@@ -1 +0,0 @@
-"use strict";(globalThis.webpackChunkfluss_website=globalThis.webpackChunkfluss_website||[]).push([[7472],{55513(e){e.exports=JSON.parse('{"title":"All our posts","items":[{"title":"Real-Time Multi-Dimensional Unique Visitor Deduplication in Practice","permalink":"/blog/roaringbitmap-uv-deduplication","unlisted":false,"date":"2026-04-16T00:00:00.000Z"},{"title":"Why Apache Fluss Chose Rust for Its Multi-Language SDK","permalink":"/blog/why-fluss-chose-rust-for-multi-language-sdk","unlist [...]
\ No newline at end of file
diff --git a/assets/js/d87df568.81a2664f.js b/assets/js/d87df568.fbda2f88.js
similarity index 75%
rename from assets/js/d87df568.81a2664f.js
rename to assets/js/d87df568.fbda2f88.js
index 787312f4b..39a6f2c26 100644
--- a/assets/js/d87df568.81a2664f.js
+++ b/assets/js/d87df568.fbda2f88.js
@@ -1 +1 @@
-"use strict";(globalThis.webpackChunkfluss_website=globalThis.webpackChunkfluss_website||[]).push([[6359],{36799(e,t,i){i.r(t),i.d(t,{assets:()=>c,contentTitle:()=>o,default:()=>d,frontMatter:()=>r,metadata:()=>n,toc:()=>u});var n=i(23706),a=i(74848),s=i(28453);const r={slug:"roaringbitmap-uv-deduplication",date:new Date("2026-04-16T00:00:00.000Z"),title:"Real-Time Multi-Dimensional Unique Visitor Deduplication in Practice",authors:["yangwang"]},o=void 0,c={authorsImageUrls:[void 0]},u=[ [...]
\ No newline at end of file
+"use strict";(globalThis.webpackChunkfluss_website=globalThis.webpackChunkfluss_website||[]).push([[6359],{36799(e,t,i){i.r(t),i.d(t,{assets:()=>c,contentTitle:()=>r,default:()=>d,frontMatter:()=>o,metadata:()=>n,toc:()=>l});var n=i(23706),a=i(74848),s=i(28453);const o={slug:"roaringbitmap-uv-deduplication",date:new Date("2026-04-16T00:00:00.000Z"),title:"Real-Time Multi-Dimensional Unique Visitor Deduplication in Practice",authors:["yangwang"]},r=void 0,c={authorsImageUrls:[void 0]},l=[ [...]
\ No newline at end of file
diff --git a/assets/js/dbfc4782.0cf587f4.js b/assets/js/dbfc4782.0cf587f4.js
deleted file mode 100644
index ee915d836..000000000
--- a/assets/js/dbfc4782.0cf587f4.js
+++ /dev/null
@@ -1 +0,0 @@
-"use strict";(globalThis.webpackChunkfluss_website=globalThis.webpackChunkfluss_website||[]).push([[8749],{91895(e){e.exports=JSON.parse('{"archive":{"blogPosts":[{"id":"roaringbitmap-uv-deduplication","metadata":{"permalink":"/blog/roaringbitmap-uv-deduplication","source":"@site/blog/2026-04-16-roaringbitmap-uv-deduplication.md","title":"Real-Time Multi-Dimensional Unique Visitor Deduplication in Practice","description":"UV (Unique Visitors) measures the count of distinct users who visi [...]
\ No newline at end of file
diff --git a/assets/js/dbfc4782.9bcb213a.js b/assets/js/dbfc4782.9bcb213a.js
new file mode 100644
index 000000000..9eaf81804
--- /dev/null
+++ b/assets/js/dbfc4782.9bcb213a.js
@@ -0,0 +1 @@
+"use strict";(globalThis.webpackChunkfluss_website=globalThis.webpackChunkfluss_website||[]).push([[8749],{91895(e){e.exports=JSON.parse('{"archive":{"blogPosts":[{"id":"taobao-instant-commerce-real-time-decision","metadata":{"permalink":"/blog/taobao-instant-commerce-real-time-decision","source":"@site/blog/2026-04-20-taobao-instant-commerce-real-time-decision.md","title":"Taobao Real-Time Decisions at Scale with Fluss","description":"Every autumn in China, social media floods with post [...]
\ No newline at end of file
diff --git a/assets/js/dd04b75e.3c2612ff.js b/assets/js/dd04b75e.164a3cb8.js
similarity index 89%
rename from assets/js/dd04b75e.3c2612ff.js
rename to assets/js/dd04b75e.164a3cb8.js
index 3f96e356b..9785a0f0f 100644
--- a/assets/js/dd04b75e.3c2612ff.js
+++ b/assets/js/dd04b75e.164a3cb8.js
@@ -1 +1 @@
-"use strict";(globalThis.webpackChunkfluss_website=globalThis.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":"/avatars/wuchong.png","key":"jark","page":null,"count":9},{"name":"Giannis Polyzos","title":"PPMC member of Apache Fluss (Incubating)","url":"https://github.com/polyzos","imageURL":"/avatars/polyzos.png","key":"giannis","page" [...]
\ No newline at end of file
+"use strict";(globalThis.webpackChunkfluss_website=globalThis.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":"/avatars/wuchong.png","key":"jark","page":null,"count":9},{"name":"Giannis Polyzos","title":"PPMC member of Apache Fluss (Incubating)","url":"https://github.com/polyzos","imageURL":"/avatars/polyzos.png","key":"giannis","page" [...]
\ No newline at end of file
diff --git a/assets/js/ea70c07d.ab3333c6.js b/assets/js/ea70c07d.40ed5a27.js
similarity index 75%
rename from assets/js/ea70c07d.ab3333c6.js
rename to assets/js/ea70c07d.40ed5a27.js
index 06c2ab014..0642bb1d2 100644
--- a/assets/js/ea70c07d.ab3333c6.js
+++ b/assets/js/ea70c07d.40ed5a27.js
@@ -1 +1 @@
-"use strict";(globalThis.webpackChunkfluss_website=globalThis.webpackChunkfluss_website||[]).push([[8732],{76387(e){e.exports=JSON.parse('{"metadata":{"permalink":"/blog/page/2","page":2,"postsPerPage":10,"totalPages":3,"totalCount":22,"previousPage":"/blog","nextPage":"/blog/page/3","blogDescription":"Blog","blogTitle":"Blog"}}')}}]);
\ No newline at end of file
+"use strict";(globalThis.webpackChunkfluss_website=globalThis.webpackChunkfluss_website||[]).push([[8732],{76387(e){e.exports=JSON.parse('{"metadata":{"permalink":"/blog/page/2","page":2,"postsPerPage":10,"totalPages":3,"totalCount":23,"previousPage":"/blog","nextPage":"/blog/page/3","blogDescription":"Blog","blogTitle":"Blog"}}')}}]);
\ No newline at end of file
diff --git a/assets/js/fa91aee9.ef8c9c20.js b/assets/js/fa91aee9.dffe34a6.js
similarity index 99%
rename from assets/js/fa91aee9.ef8c9c20.js
rename to assets/js/fa91aee9.dffe34a6.js
index 07cb0e623..31e66a799 100644
--- a/assets/js/fa91aee9.ef8c9c20.js
+++ b/assets/js/fa91aee9.dffe34a6.js
@@ -1 +1 @@
-"use strict";(globalThis.webpackChunkfluss_website=globalThis.webpackChunkfluss_website||[]).push([[1846],{92765(e,n,i){i.r(n),i.d(n,{assets:()=>l,contentTitle:()=>o,default:()=>h,frontMatter:()=>r,metadata:()=>a,toc:()=>d});var a=i(23706),t=i(74848),s=i(28453);const r={slug:"roaringbitmap-uv-deduplication",date:new Date("2026-04-16T00:00:00.000Z"),title:"Real-Time Multi-Dimensional Unique Visitor Deduplication in Practice",authors:["yangwang"]},o=void 0,l={authorsImageUrls:[void 0]},d=[ [...]
\ No newline at end of file
+"use strict";(globalThis.webpackChunkfluss_website=globalThis.webpackChunkfluss_website||[]).push([[1846],{92765(e,n,i){i.r(n),i.d(n,{assets:()=>l,contentTitle:()=>o,default:()=>h,frontMatter:()=>r,metadata:()=>a,toc:()=>d});var a=i(23706),t=i(74848),s=i(28453);const r={slug:"roaringbitmap-uv-deduplication",date:new Date("2026-04-16T00:00:00.000Z"),title:"Real-Time Multi-Dimensional Unique Visitor Deduplication in Practice",authors:["yangwang"]},o=void 0,l={authorsImageUrls:[void 0]},d=[ [...]
\ No newline at end of file
diff --git a/assets/js/main.2460f850.js b/assets/js/main.2460f850.js
new file mode 100644
index 000000000..cdfd22de9
--- /dev/null
+++ b/assets/js/main.2460f850.js
@@ -0,0 +1,2 @@
+/*! For license information please see main.2460f850.js.LICENSE.txt */
+(globalThis.webpackChunkfluss_website=globalThis.webpackChunkfluss_website||[]).push([[8792],{35947(e,t,n){"use strict";n.d(t,{A:()=>p});n(96540);var a=n(53259),o=n.n(a),r=n(84054);const i={"00666a83":[()=>n.e(7387).then(n.bind(n,22170)),"@site/versioned_docs/version-0.9/engine-flink/writes.md",22170],"0159e4b3":[()=>n.e(1838).then(n.bind(n,28605)),"@site/versioned_docs/version-0.6/maintenance/tiered-storage/lakehouse-storage.md",28605],"019059a8":[()=>n.e(4944).then(n.bind(n,83097)),"@s [...]
\ No newline at end of file
diff --git a/assets/js/main.9d2d82c2.js.LICENSE.txt b/assets/js/main.2460f850.js.LICENSE.txt
similarity index 100%
rename from assets/js/main.9d2d82c2.js.LICENSE.txt
rename to assets/js/main.2460f850.js.LICENSE.txt
diff --git a/assets/js/main.9d2d82c2.js b/assets/js/main.9d2d82c2.js
deleted file mode 100644
index 940b539aa..000000000
--- a/assets/js/main.9d2d82c2.js
+++ /dev/null
@@ -1,2 +0,0 @@
-/*! For license information please see main.9d2d82c2.js.LICENSE.txt */
-(globalThis.webpackChunkfluss_website=globalThis.webpackChunkfluss_website||[]).push([[8792],{35947(e,t,n){"use strict";n.d(t,{A:()=>p});n(96540);var a=n(53259),o=n.n(a),r=n(84054);const i={"00666a83":[()=>n.e(7387).then(n.bind(n,22170)),"@site/versioned_docs/version-0.9/engine-flink/writes.md",22170],"0159e4b3":[()=>n.e(1838).then(n.bind(n,28605)),"@site/versioned_docs/version-0.6/maintenance/tiered-storage/lakehouse-storage.md",28605],"019059a8":[()=>n.e(4944).then(n.bind(n,83097)),"@s [...]
\ No newline at end of file
diff --git a/assets/js/runtime~main.2fc346f3.js b/assets/js/runtime~main.2fc346f3.js
deleted file mode 100644
index eacee9c46..000000000
--- a/assets/js/runtime~main.2fc346f3.js
+++ /dev/null
@@ -1 +0,0 @@
-(()=>{"use strict";var e,a,d,c,f,b={},t={};function r(e){var a=t[e];if(void 0!==a)return a.exports;var d=t[e]={exports:{}};return b[e].call(d.exports,d,d.exports,r),d.exports}r.m=b,e=[],r.O=(a,d,c,f)=>{if(!d){var b=1/0;for(i=0;i<e.length;i++){for(var[d,c,f]=e[i],t=!0,o=0;o<d.length;o++)(!1&f||b>=f)&&Object.keys(r.O).every(e=>r.O[e](d[o]))?d.splice(o--,1):(t=!1,f<b&&(b=f));if(t){e.splice(i--,1);var n=c();void 0!==n&&(a=n)}}return a}f=f||0;for(var i=e.length;i>0&&e[i-1][2]>f;i--)e[i]=e[i-1 [...]
\ No newline at end of file
diff --git a/assets/js/runtime~main.33140780.js b/assets/js/runtime~main.33140780.js
new file mode 100644
index 000000000..91300305d
--- /dev/null
+++ b/assets/js/runtime~main.33140780.js
@@ -0,0 +1 @@
+(()=>{"use strict";var e,a,d,c,f,b={},t={};function r(e){var a=t[e];if(void 0!==a)return a.exports;var d=t[e]={exports:{}};return b[e].call(d.exports,d,d.exports,r),d.exports}r.m=b,e=[],r.O=(a,d,c,f)=>{if(!d){var b=1/0;for(i=0;i<e.length;i++){for(var[d,c,f]=e[i],t=!0,o=0;o<d.length;o++)(!1&f||b>=f)&&Object.keys(r.O).every(e=>r.O[e](d[o]))?d.splice(o--,1):(t=!1,f<b&&(b=f));if(t){e.splice(i--,1);var n=c();void 0!==n&&(a=n)}}return a}f=f||0;for(var i=e.length;i>0&&e[i-1][2]>f;i--)e[i]=e[i-1 [...]
\ No newline at end of file
diff --git a/avatars/matrixsparse.jpeg b/avatars/matrixsparse.jpeg
new file mode 100644
index 000000000..7a53409f3
Binary files /dev/null and b/avatars/matrixsparse.jpeg differ
diff --git a/blog/2025/12/02/fluss-x-iceberg-why-your-lakehouse-is-not-streamhouse-yet/index.html b/blog/2025/12/02/fluss-x-iceberg-why-your-lakehouse-is-not-streamhouse-yet/index.html
index a8fe0682c..7aab5eda4 100644
--- a/blog/2025/12/02/fluss-x-iceberg-why-your-lakehouse-is-not-streamhouse-yet/index.html
+++ b/blog/2025/12/02/fluss-x-iceberg-why-your-lakehouse-is-not-streamhouse-yet/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.5187a663.css">
-<script src="/assets/js/runtime~main.2fc346f3.js" defer="defer"></script>
-<script src="/assets/js/main.9d2d82c2.js" defer="defer"></script>
+<script src="/assets/js/runtime~main.33140780.js" defer="defer"></script>
+<script src="/assets/js/main.2460f850.js" defer="defer"></script>
</head>
<body>
<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>document.documentElement.setAttribute("data-theme","light"),document.documentElement.setAttribute("data-theme-choice","light"),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("docusaurus-data-","data-");document.documentElement.setAttribute(a,e)}}catch(t){}}()</script><div id="__docusaurus"><div class="blog-post-page-no-sidebar"><div role="region" aria-label="Skip to main content">< [...]
+<script>document.documentElement.setAttribute("data-theme","light"),document.documentElement.setAttribute("data-theme-choice","light"),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("docusaurus-data-","data-");document.documentElement.setAttribute(a,e)}}catch(t){}}()</script><div id="__docusaurus"><div class="blog-post-page-no-sidebar"><div role="region" aria-label="Skip to main content">< [...]
<p>Apache Fluss represents a new architectural approach: the <strong>Streamhouse</strong> for real-time lakehouses. Instead of stitching together separate streaming and batch systems, the Streamhouse unifies them under a single architecture. In this model, Apache Iceberg continues to serve exactly the role it was designed for: a highly efficient, scalable cold storage layer for analytics, while Fluss fills the missing piece: a hot streaming storage layer with sub-second latency, columnar [...]
<p>After working on Fluss–Iceberg lakehouse integration and deploying this architecture at a massive scale, including Alibaba's 3 PB production deployment processing 40 GB/s, we're ready to share the architectural lessons learned. Specifically, why existing systems fall short, how Fluss and Iceberg naturally complement each other, and what this means for finally building true real-time lakehouses.</p>
<p><img decoding="async" loading="lazy" alt="Banner" src="/assets/images/fluss-lakehouse-streaming_comp-62d4129ae29a5e1b5453892ae27cc212.png" width="768" height="336" class="img_ev3q"></p>
@@ -114,7 +114,7 @@ Think of your data as having two thermal zones:</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="solution-2-primary-key-tables-with-native-upsert-support">Solution 2: Primary Key Tables with Native Upsert Support<a href="#solution-2-primary-key-tables-with-native-upsert-support" class="hash-link" aria-label="Direct link to Solution 2: Primary Key Tables with Native Upsert Support" title="Direct link to Solution 2: Primary Key Tables with Native Upsert Support" translate="no"></a></h3>
<p><strong>Addresses:</strong> Gap 3 (Primary Key Not Enforced) & Gap 4 (Update Write Amplification)</p>
<p>Fluss provides first-class primary key semantics using an LSM tree architecture:</p>
-<div class="language-text codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#36464e;--prism-background-color:#f5f5f5"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar" style="color:#36464e;background-color:#f5f5f5"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#36464e"><span class="token plain">┌─────────────────────────────────────────────────┐</span><br></div><div class="token-line" [...]
+<div class="language-text codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#36464e;--prism-background-color:#f5f5f5"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar" style="color:#36464e;background-color:#f5f5f5"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#36464e"><span class="token plain">┌─────────────────────────────────────────────────┐</span><br></div><div class="token-line" [...]
<p><strong>How it works:</strong></p>
<p>When you write to a primary key table, Fluss:</p>
<ol>
diff --git a/blog/archive/index.html b/blog/archive/index.html
index 686111901..0dad6e47e 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.5187a663.css">
-<script src="/assets/js/runtime~main.2fc346f3.js" defer="defer"></script>
-<script src="/assets/js/main.9d2d82c2.js" defer="defer"></script>
+<script src="/assets/js/runtime~main.33140780.js" defer="defer"></script>
+<script src="/assets/js/main.2460f850.js" defer="defer"></script>
</head>
<body>
<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>document.documentElement.setAttribute("data-theme","light"),document.documentElement.setAttribute("data-theme-choice","light"),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("docusaurus-data-","data-");document.documentElement.setAttribute(a,e)}}catch(t){}}()</script><div id="__docusaurus"><div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__d [...]
+<script>document.documentElement.setAttribute("data-theme","light"),document.documentElement.setAttribute("data-theme-choice","light"),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("docusaurus-data-","data-");document.documentElement.setAttribute(a,e)}}catch(t){}}()</script><div id="__docusaurus"><div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__d [...]
<p>Copyright © 2026 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 0d8b9c3c0..41b0cd01b 100644
--- a/blog/atom.xml
+++ b/blog/atom.xml
@@ -2,11 +2,287 @@
<feed xmlns="http://www.w3.org/2005/Atom">
<id>https://fluss.apache.org/blog/</id>
<title>Apache Fluss™ (Incubating) Blog</title>
- <updated>2026-04-16T00:00:00.000Z</updated>
+ <updated>2026-04-20T00: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[Taobao Real-Time Decisions at Scale with Fluss]]></title>
+ <id>https://fluss.apache.org/blog/taobao-instant-commerce-real-time-decision/</id>
+ <link href="https://fluss.apache.org/blog/taobao-instant-commerce-real-time-decision/"/>
+ <updated>2026-04-20T00:00:00.000Z</updated>
+ <summary type="html"><![CDATA[Every autumn in China, social media floods with posts about "The First Cup of Milk Tea in Autumn." With a tap on their phone, consumers expect their order delivered within 30 minutes. That effortless experience is no accident: it is the result of Taobao Instant Commerce making thousands of data-driven decisions every second.]]></summary>
+ <content type="html"><![CDATA[<p><img decoding="async" loading="lazy" src="https://fluss.apache.org/assets/images/banner-8d98ad1a7ee1c477949be609a3f8ae97.jpg" width="1376" height="768" class="img_ev3q"></p>
+<p>Every autumn in China, social media floods with posts about "The First Cup of Milk Tea in Autumn." With a tap on their phone, consumers expect their order delivered within 30 minutes. That effortless experience is no accident: it is the result of Taobao Instant Commerce making thousands of data-driven decisions every second.</p>
+<p>Taobao Instant Commerce has scaled from a single-category food delivery service into a high-frequency platform spanning fresh produce, consumer electronics (3C), and beauty products. It operates under two very different modes: steady high-frequency daily transactions, and explosive traffic surges during promotional events where order volumes can multiply within minutes. Both demand the same thing: real-time responsiveness across hundreds of millions of SKUs.</p>
+<p><strong>Real-time</strong> is not a nice-to-have here; it is the lifeline for three critical functions:</p>
+<ul>
+<li class=""><strong>Operations:</strong> Refresh conversion rates and funnels within 30 seconds.</li>
+<li class=""><strong>Algorithms:</strong> Order prediction models must iterate at minute-level granularity.</li>
+<li class=""><strong>Quality Assurance:</strong> Canary release anomalies must be detected within seconds and trigger instant alerts.</li>
+</ul>
+<p>The existing pipeline (built on Kafka, Flink, Paimon, and StarRocks) handled this at one scale.</p>
+<blockquote>
+<p><strong>Note:</strong> In Alibaba's internal infrastructure, <strong>TT (TimeTunnel)</strong> is the internal equivalent of Apache Kafka — a high-throughput distributed message queue. Throughout this post, "Kafka" refers to TT in the Taobao Instant Commerce context. But as the business grew, three fundamental bottlenecks emerged: unbounded state growth from stream joins, mounting complexity in building multi-stream denormalized tables, and excessive resource consumption from lakehouse [...]
+</blockquote>
+<p>Fluss broke this impasse. By replacing the fragmented stream-batch architecture with a unified storage layer, its features (Delta Join, Partial Update, Streaming-Lakehouse Unification, Column Pruning, and Auto-Increment Columns) systematically eliminated all three bottlenecks and fundamentally reshaped how Taobao Instant Commerce handles real-time decision-making at scale.</p>
+<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="the-impossible-triangle-dilemma-business-pain-points--technical-challenges">The "Impossible Triangle" Dilemma: Business Pain Points & Technical Challenges<a href="https://fluss.apache.org/blog/taobao-instant-commerce-real-time-decision/#the-impossible-triangle-dilemma-business-pain-points--technical-challenges" class="hash-link" aria-label="Direct link to The "Impossible Triangle" Dilemma: Business Pain Points & Techn [...]
+<p>The real-time data system of Taobao Instant Commerce must reliably process ultra-large-scale, high-concurrency data streams.
+It must also build real-time denormalized tables (wide tables) that aggregate metrics across multiple business domains, and support core pipelines such as associating page view streams with order streams, as well as canary release monitoring.
+This imposes extreme requirements on latency, consistency, cost-efficiency, and system scalability.</p>
+<p>Under the traditional technology stack, challenges across these four dimensions were deeply intertwined, ultimately forming the same trilemma of latency, consistency, and cost that the business had already identified.</p>
+<p>The root cause lies in the stream-batch separation at the storage layer: Kafka serving as the message queue, represents the "stream" abstraction, while Paimon, as the lakehouse format, represents the "batch" abstraction.
+Bridging these two relies heavily on numerous Flink ETL jobs acting as a <strong>glue layer.</strong>
+Each additional layer of glue compounds latency, increases costs, and heightens the risk to data consistency.</p>
+<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="four-core-business-issues">Four Core Business Issues<a href="https://fluss.apache.org/blog/taobao-instant-commerce-real-time-decision/#four-core-business-issues" class="hash-link" aria-label="Direct link to Four Core Business Issues" title="Direct link to Four Core Business Issues" translate="no"></a></h3>
+<p><img decoding="async" loading="lazy" src="https://fluss.apache.org/assets/images/issues-8f1bfcdd61f876151104cb8ad07c72a9.png" width="1988" height="922" class="img_ev3q"></p>
+<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="three-core-pain-points-of-the-traditional-tech-stack">Three Core Pain Points of the Traditional Tech Stack<a href="https://fluss.apache.org/blog/taobao-instant-commerce-real-time-decision/#three-core-pain-points-of-the-traditional-tech-stack" class="hash-link" aria-label="Direct link to Three Core Pain Points of the Traditional Tech Stack" title="Direct link to Three Core Pain Points of the Traditional Tech Stack" translate="no"></a></h3>
+<p>The traditional pipeline based on Kafka, Flink and Paimon exposed three critical pain points under Taobao Instant Commerce’s massive scale, high concurrency, and strict real-time requirements.
+These issues became the core focus areas for the subsequent Fluss implementation:</p>
+<ul>
+<li class=""><strong>Surging Memory Pressure from Dual-Stream Joins:</strong> Kafka lacks native support for dimension table lookups. Consequently, order information had to be fully loaded into Flink <code>State</code>. During promotional events, over <strong>100 million</strong> orders caused the state size of single jobs to surge to <strong>hundreds of GBs</strong>, leading to <code>Checkpoint</code> timeouts and frequent task failures.</li>
+<li class=""><strong>Fan-Out Pipeline Complexity in Wide Table Construction:</strong> The product-store analysis wide table depended on 5+ upstream systems. Using Kafka required writing to a new Topic after every Join operation, resulting in a sprawling, tightly coupled pipeline with high operational and maintenance costs.</li>
+<li class=""><strong>Core Resource Drain from Lakehouse Synchronization:</strong> Each table synced to Paimon required maintaining an independent Flink consumption job. During peak events, dozens of these "data transfer" jobs ran simultaneously, competing with core computing tasks for resources and causing overall performance degradation.</li>
+</ul>
+<p><img decoding="async" loading="lazy" src="https://fluss.apache.org/assets/images/arch-0290889aab197b1d65f26605420ae7e4.png" width="1224" height="746" class="img_ev3q"></p>
+<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="architecture-selection-logic-from-compute-layer-stitching-to-storage-layer-unification">Architecture Selection Logic: From "Compute-Layer Stitching" to "Storage-Layer Unification"<a href="https://fluss.apache.org/blog/taobao-instant-commerce-real-time-decision/#architecture-selection-logic-from-compute-layer-stitching-to-storage-layer-unification" class="hash-link" aria-label="Direct link to Architecture Selection Logic: From "Com [...]
+<p>Guided by the <strong>impossible triangle</strong> dilemma described above, we established a core principle for our technology selection: the breakthrough lies not in the compute layer, but in the storage layer.
+The traditional architecture, relying on the combination of Kafka, Flink and Paimon as the open table format, was essentially a <strong>stitched</strong> model characterized by stream-batch separation.
+As the compute engine, Flink was forced to assume numerous <strong>glue</strong> responsibilities: maintaining <strong>TB-scale</strong> <code>State</code>, scheduling dozens of data transfer jobs, and handling memory bloat from dual-stream joins.
+This not only drove up resource costs but also made data consistency difficult to guarantee.</p>
+<p>Fluss’s design philosophy directly addresses this pain point through Stream-Batch Unification at the storage layer.
+It is not merely another message queue; rather, it converges streaming consumption and batch querying into a single distributed storage kernel.
+Streaming and batch operations require no data replication, no format conversion, and no additional ETL jobs for data movement.
+This fundamental shift in underlying architecture directly eliminates the three primary sources of latency, cost, and consistency risks inherent in traditional pipelines, providing a unified foundation for the implementation of subsequent core features.</p>
+<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="fluss-core-scenario-implementation">Fluss Core Scenario Implementation<a href="https://fluss.apache.org/blog/taobao-instant-commerce-real-time-decision/#fluss-core-scenario-implementation" class="hash-link" aria-label="Direct link to Fluss Core Scenario Implementation" title="Direct link to Fluss Core Scenario Implementation" translate="no"></a></h2>
+<p>Taobao Instant Commerce designed a three-layer architecture underpinned by five core Fluss capabilities, each mapped to a specific business need. By establishing Fluss as the unified data foundation, this architecture covers the entire pipeline, from data ingestion and stream-batch processing to lakehouse storage and service delivery, eliminating the pain points described above.</p>
+<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="three-layer-overall-architecture">Three-Layer Overall Architecture<a href="https://fluss.apache.org/blog/taobao-instant-commerce-real-time-decision/#three-layer-overall-architecture" class="hash-link" aria-label="Direct link to Three-Layer Overall Architecture" title="Direct link to Three-Layer Overall Architecture" translate="no"></a></h3>
+<p><img decoding="async" loading="lazy" src="https://fluss.apache.org/assets/images/3_layer_arch-e9939c0960c89e5fbccbf9806418db5f.png" width="1080" height="605" class="img_ev3q">
+The real-time data system of Taobao Instant Commerce, powered by Fluss, is structured into three layers: the Data Source Layer, the Fluss Storage & Compute Layer, and the Business Service Layer. Built on the core philosophy of Stream-Batch Unification, this architecture enables <strong>Write Once, Read Anywhere</strong> data reuse, completely eliminating the stream-batch separation and glue-layer ETL jobs inherent in traditional pipelines.</p>
+<ul>
+<li class=""><strong>Data Source Layer:</strong> Integrates all business data sources (including order streams, visit streams, product dimension tables, and inventory/price streams) and uniformly writes them into Fluss’s Log Tables or KV Tables, adapting to the specific ingestion characteristics of each data source.</li>
+<li class=""><strong>Fluss Storage & Compute Layer:</strong> As the core layer, it achieves unified data storage via Fluss’s Log/KV Tables. It leverages features like Delta Join, Partial Update, and Streaming-Lakehouse Unification (Auto-Tiering) to handle real-time computation, multi-table joins, wide table construction, and lakehouse synchronization. Crucially, it provides stateless computing support for Flink, significantly reducing state management overhead.</li>
+<li class=""><strong>Business Service Layer:</strong> Leveraging a unified data view from both Fluss and lakehouse storage (Paimon), this layer delivers data services to operational real-time dashboards, algorithmic order prediction models, canary monitoring systems, and product-store analysis systems, enabling decision support within seconds.</li>
+</ul>
+<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="five-core-scenarios-and-feature-combination-matrix">Five Core Scenarios and Feature Combination Matrix<a href="https://fluss.apache.org/blog/taobao-instant-commerce-real-time-decision/#five-core-scenarios-and-feature-combination-matrix" class="hash-link" aria-label="Direct link to Five Core Scenarios and Feature Combination Matrix" title="Direct link to Five Core Scenarios and Feature Combination Matrix" translate="no"></a></h3>
+<p><img decoding="async" loading="lazy" src="https://fluss.apache.org/assets/images/matrix1-06469c8619fc13548b69ef3d251c4358.png" width="1968" height="1048" class="img_ev3q">
+<img decoding="async" loading="lazy" src="https://fluss.apache.org/assets/images/matrix2-ff8075a31b6f7ff2aef3ad6348c06f82.png" width="1970" height="1360" class="img_ev3q"></p>
+<p>The following sections walk through five production scenarios where Fluss was applied, covering the architectural decisions, implementation details, and measured results for each.</p>
+<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="scenario-1-real-time-conversion-rate-and-order-attribution-solving-unbounded-state-growth-in-dual-stream-joins-with-delta-join">Scenario 1: Real-Time Conversion Rate and Order Attribution: Solving Unbounded State Growth in Dual-Stream Joins with Delta Join<a href="https://fluss.apache.org/blog/taobao-instant-commerce-real-time-decision/#scenario-1-real-time-conversion-rate-and-order-attribution-solving-unbounded-state-growth-in-dual-st [...]
+<p>Conversion Rate (defined as the ratio of purchasing users to visiting users) is a core metric for measuring conversion efficiency in Taobao Instant Commerce.
+Its calculation relies on the real-time join of user visit streams with order streams, directly enabling operational decisions within seconds.</p>
+<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="pain-points-of-traditional-solutions">Pain Points of Traditional Solutions<a href="https://fluss.apache.org/blog/taobao-instant-commerce-real-time-decision/#pain-points-of-traditional-solutions" class="hash-link" aria-label="Direct link to Pain Points of Traditional Solutions" title="Direct link to Pain Points of Traditional Solutions" translate="no"></a></h3>
+<p><img decoding="async" loading="lazy" src="https://fluss.apache.org/assets/images/painpoints-a628951c0368b0e5fa21c23f79b85603.png" width="1080" height="554" class="img_ev3q">
+In the legacy architecture, a Flink Regular Join must continuously accumulate all unexpired events in its local state to match orders with browsing records.
+This creates an architectural dilemma: extending the conversion observation window incurs linearly growing storage costs.</p>
+<ul>
+<li class=""><strong>Unbounded State Growth & Compaction Pressure:</strong> During promotional events, hundreds of billions of access logs must be retained within long time windows. The total state for a single job grew past <strong>TB levels</strong>, leading to severe <code>RocksDB</code> compaction backlogs and extremely long checkpoint durations.</li>
+<li class=""><strong>I/O Saturation & Latency Degradation:</strong> Amplified <code>State</code> read/write operations saturated disk I/O. Real-time attribution latency degraded from seconds to minutes.</li>
+<li class=""><strong>Checkpoint Failures & High RTO:</strong> <code>Checkpoint</code> durations deteriorated from minutes to <strong>10–15 minutes</strong>, frequently causing timeouts and failures.</li>
+<li class=""><strong>Limited Attribution Window:</strong> The effective association time window was constrained by local storage capacity, making it impossible to support long-cycle "Browse-to-Order" conversion attribution.</li>
+</ul>
+<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="architecture-based-on-fluss-delta-join">Architecture Based on Fluss Delta Join<a href="https://fluss.apache.org/blog/taobao-instant-commerce-real-time-decision/#architecture-based-on-fluss-delta-join" class="hash-link" aria-label="Direct link to Architecture Based on Fluss Delta Join" title="Direct link to Architecture Based on Fluss Delta Join" translate="no"></a></h3>
+<p><img decoding="async" loading="lazy" src="https://fluss.apache.org/assets/images/delta-a1f381c3d99174f7fe1af1a8d525ee67.png" width="1758" height="682" class="img_ev3q">
+To address the pain points of traditional architectures, our solution upgrades the conventional Flink dual-stream join to a Delta Join. This approach offloads the full volume of dual-stream data from Flink <code>State</code> to Fluss KV Tables (backed by <code>RocksDB</code>). By implementing bidirectional Prefix Lookup (where incoming records from either stream trigger a lookup in the opposite KV Table), we achieve a near-stateless dual-stream join. Furthermore, query performance is enh [...]
+<ul>
+<li class=""><strong>Dual KV Table Ingestion with Composite Keys:</strong> The real-time order stream is written to a Fluss KV Table with <code>PRIMARY KEY (user_id, ds, order_id)</code> and <code>bucket.key = ‘user_id’</code>. Simultaneously, real-time traffic visit logs are written to a Fluss KV Table with <code>PRIMARY KEY (user_id, ds)</code> and <code>bucket.key = ‘user_id’</code>. Both tables use a composite primary key design where the join key (<code>user_id</code>) serves as the [...]
+<li class=""><strong>Stateless Bidirectional Join via Delta Join Operator:</strong> Leveraging the Delta Join operator in Flink 2.1+, we implement bidirectional association: incoming orders trigger lookups in the visit log table, and incoming visits trigger lookups in the order table. Flink calculates the target <code>bucketId</code> using <code>MurmurHash(bucket.key)</code> to route RPC requests precisely to the single Fluss TabletServer holding that specific bucket’s <code>RocksDB</cod [...]
+<li class=""><strong>Real-Time Attribution & Lakehouse Sync:</strong> The joined results are written to a Fluss wide table and automatically synchronized to Paimon via the Streaming-Lakehouse Unification mechanism. The data is finally served to StarRocks and real-time BI dashboards, achieving metric refresh latency within 30 seconds.</li>
+</ul>
+<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="core-ddl-and-join-sql">Core DDL and Join SQL<a href="https://fluss.apache.org/blog/taobao-instant-commerce-real-time-decision/#core-ddl-and-join-sql" class="hash-link" aria-label="Direct link to Core DDL and Join SQL" title="Direct link to Core DDL and Join SQL" translate="no"></a></h3>
+<div class="language-sql codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#36464e;--prism-background-color:#f5f5f5"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-sql codeBlock_bY9V thin-scrollbar" style="color:#36464e;background-color:#f5f5f5"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#36464e"><span class="token comment" style="color:#8e908c;font-style:italic">-- Note: ${xxx} represents environment-specific para [...]
+<p>Subsequently, the Lakehouse Tiering Service continuously syncs data from Fluss to Paimon.
+The <code>table.datalake.freshness</code> parameter controls how frequently Fluss writes data to the Paimon table.
+By default, the data freshness is set to <strong>3 minutes</strong>.</p>
+<p>The implementation of the Delta Join is as follows:</p>
+<div class="language-sql codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#36464e;--prism-background-color:#f5f5f5"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-sql codeBlock_bY9V thin-scrollbar" style="color:#36464e;background-color:#f5f5f5"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#36464e"><span class="token keyword" style="color:#3f6ec6">CREATE</span><span class="token plain"> </span><span class="token keyw [...]
+<p>Fluss supports two TTL (Time-To-Live) mechanisms:</p>
+<ul>
+<li class=""><strong>Changelog Expiration:</strong> Controlled by <code>table.log.ttl</code> (default: 7 days).</li>
+<li class=""><strong>Data Partition Expiration:</strong> Controlled by <code>table.auto-partition.num-retention</code> (default: 7 partitions).</li>
+</ul>
+<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="measured-results">Measured Results<a href="https://fluss.apache.org/blog/taobao-instant-commerce-real-time-decision/#measured-results" class="hash-link" aria-label="Direct link to Measured Results" title="Direct link to Measured Results" translate="no"></a></h3>
+<p>The Fluss Delta Join solution enables stateless dimension table joins, completely eliminating the unbounded state growth problem and delivering order-of-magnitude improvements in core metrics:</p>
+<p><img decoding="async" loading="lazy" src="https://fluss.apache.org/assets/images/results-ddca1b55491dee5fc1e51ac3903466e4.png" width="2014" height="1052" class="img_ev3q"></p>
+<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="scenario-2-real-time-product-store-wide-table-efficient-column-level-updates-via-partial-update">Scenario 2: Real-Time Product-Store Wide Table: Efficient Column-Level Updates via Partial Update<a href="https://fluss.apache.org/blog/taobao-instant-commerce-real-time-decision/#scenario-2-real-time-product-store-wide-table-efficient-column-level-updates-via-partial-update" class="hash-link" aria-label="Direct link to Scenario 2: Real-Tim [...]
+<p>In Taobao Instant Commerce’s traffic operations ecosystem, the Real-time Product-Store Wide Table (a denormalized table that combines metrics from multiple behavioral data sources into a single queryable record) is the most critical data asset in the traffic domain.
+This table must aggregate four core behavioral streams (impressions, clicks, visits, and orders) in real time, producing key metrics across both "Product" and "Store" dimensions. These include UV/PV counts for each event type (where UV = unique users and PV = total event count), unique orders, and GMV. The table directly powers real-time traffic dashboards, ROI analysis, algorithmic feature engineering, and decision-making during live promotional events.</p>
+<p>However, under extreme scale and concurrency, traditional real-time aggregation models based on multi-stream joins face severe challenges: excessive state accumulation, high pipeline coupling, and poor fault tolerance.</p>
+<p>Fluss addresses these issues by leveraging Partial Update. It refactors the complex <strong>multi-stream real-time join aggregation</strong> model into a streamlined architecture of <strong>independent multi-stream writes with automatic server-side column-level merging</strong>. This transformation simplifies the real-time wide table construction pipeline and delivers a leap in performance.</p>
+<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="pain-points-of-traditional-solutions-1">Pain Points of Traditional Solutions<a href="https://fluss.apache.org/blog/taobao-instant-commerce-real-time-decision/#pain-points-of-traditional-solutions-1" class="hash-link" aria-label="Direct link to Pain Points of Traditional Solutions" title="Direct link to Pain Points of Traditional Solutions" translate="no"></a></h3>
+<p><img decoding="async" loading="lazy" src="https://fluss.apache.org/assets/images/painpoints2-ba43f0007d6299aaa4eb7b42f30bac90.png" width="1400" height="617" class="img_ev3q"></p>
+<p>The legacy solution constructed the wide table using multi-stream Flink joins over Kafka topics, resulting in a tightly coupled fan-in architecture. Its core pain points were as follows:</p>
+<ul>
+<li class=""><strong>Full-Row Write I/O Waste:</strong> Even if only a single behavior metric (e.g., "clicks" or "impressions") is updated, the system must write all 100+ columns of the full row. This causes severe redundancy in both network and storage I/O.</li>
+<li class=""><strong>High Operational Complexity:</strong> The architecture resembles a fan-out pipeline, requiring N upstream jobs and M join jobs to be maintained in parallel. Adding a new field requires modifying multiple jobs, significantly increasing operational overhead.</li>
+<li class=""><strong>Latency Coupling (Straggler Problem):</strong> The write latency of the wide table is determined by the slowest upstream stream. A delay in any single data stream causes the entire row update to be delayed, leading to inconsistent real-time visibility.</li>
+<li class=""><strong>Unbounded State Growth and No Live Schema Updates:</strong> To match data across different behavioral streams for conversion rate calculations, Flink must cache large amounts of intermediate state locally. This leads to <strong>TB-scale</strong> unbounded state growth, <code>Checkpoint</code> timeouts, and risk of out-of-memory (OOM) errors. Furthermore, the tightly coupled join logic means the system cannot be updated while running: any schema change, scaling operat [...]
+</ul>
+<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="architecture-based-on-fluss-partial-update">Architecture Based on Fluss Partial Update<a href="https://fluss.apache.org/blog/taobao-instant-commerce-real-time-decision/#architecture-based-on-fluss-partial-update" class="hash-link" aria-label="Direct link to Architecture Based on Fluss Partial Update" title="Direct link to Architecture Based on Fluss Partial Update" translate="no"></a></h3>
+<p><img decoding="async" loading="lazy" src="https://fluss.apache.org/assets/images/solution2-7a7d1ba42b3406116debb25bc674a427.png" width="1200" height="687" class="img_ev3q"></p>
+<p>To address the aforementioned pain points, our solution utilizes Fluss KV Tables as the unified storage for a multi-dimensional wide table (spanning Product and Store dimensions). By leveraging Partial Update, we achieve column-level updates that completely decouple the ingestion of diverse behavior streams such as impressions, clicks, visits, and orders. Each Flink job is responsible solely for aggregating its specific behavioral metrics and writing to the target columns, eliminating [...]
+<ul>
+<li class=""><strong>Independent Aggregation & Ingestion of Multiple Streams:</strong> Five or more upstream behavior streams (impressions, clicks, visits, add-to-cart, orders) run as independent Flink jobs. Each job consumes only a single type of behavior log, pre-aggregates data by "Product" or "Store" dimension, and writes exclusively to the corresponding metric columns in the wide table. This approach thoroughly eliminates inter-stream dependencies.</li>
+<li class=""><strong>Server-Side Intelligent Column-Level Merging:</strong> Fluss leverages the Partial Update feature, utilizing <code>BitSet</code> bitmap technology to identify target columns in write requests. Within the storage engine, only the target columns are read and updated (via accumulation or overwrite), while non-target columns retain their historical values in <code>RocksDB</code>. This avoids transmitting redundant data over the network or in memory, achieving microsecond [...]
+<li class=""><strong>Streaming-Lakehouse Unification with Auto-Tiering:</strong> The merged, up-to-date wide table data provides low-latency point queries and streaming consumption capabilities in real-time. Simultaneously, the Auto-Tiering mechanism asynchronously syncs data to the Paimon lakehouse. This supports offline T+1 (next-day batch) validation, historical backtracking, and AI model training without requiring additional ETL development for data movement.</li>
+<li class=""><strong>Online Schema Evolution:</strong> When new statistical metrics are required, business teams simply execute an <code>ALTER TABLE ADD COLUMN</code> DDL statement and deploy a new write job for that specific column. This takes effect immediately without downtime or restarting existing jobs (e.g., for impressions or orders), enabling agile iteration even during peak promotional events.</li>
+</ul>
+<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="core-ddl-and-per-job-write-implementation">Core DDL and Per-Job Write Implementation<a href="https://fluss.apache.org/blog/taobao-instant-commerce-real-time-decision/#core-ddl-and-per-job-write-implementation" class="hash-link" aria-label="Direct link to Core DDL and Per-Job Write Implementation" title="Direct link to Core DDL and Per-Job Write Implementation" translate="no"></a></h3>
+<div class="language-sql codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#36464e;--prism-background-color:#f5f5f5"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-sql codeBlock_bY9V thin-scrollbar" style="color:#36464e;background-color:#f5f5f5"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#36464e"><span class="token keyword" style="color:#3f6ec6">CREATE</span><span class="token plain"> </span><span class="token keyw [...]
+<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="measured-results-1">Measured Results<a href="https://fluss.apache.org/blog/taobao-instant-commerce-real-time-decision/#measured-results-1" class="hash-link" aria-label="Direct link to Measured Results" title="Direct link to Measured Results" translate="no"></a></h3>
+<p>The Fluss Partial Update solution enables column-level updates and decoupled writes for wide tables, delivering significant improvements in core metrics while reducing operational costs.</p>
+<p><img decoding="async" loading="lazy" src="https://fluss.apache.org/assets/images/results2-c5f2378db8d4e2a01de812a9fb3d607f.png" width="1994" height="1154" class="img_ev3q"></p>
+<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="scenario-3-real-time-order-estimation-efficient-data-fusion-via-fluss-kv-lake-stream-unification">Scenario 3: Real-Time Order Estimation: Efficient Data Fusion via Fluss KV Lake-Stream Unification<a href="https://fluss.apache.org/blog/taobao-instant-commerce-real-time-decision/#scenario-3-real-time-order-estimation-efficient-data-fusion-via-fluss-kv-lake-stream-unification" class="hash-link" aria-label="Direct link to Scenario 3: Real- [...]
+<p>Real-time order forecasting serves as a critical support pillar in Taobao Instant Commerce’s algorithmic decision-making framework.
+During promotional events, the system iterates the prediction model every minute to accurately project the total daily Gross Merchandise Volume (GMV), thereby enabling dynamic adjustments to subsidy strategies and inventory allocation.
+This scenario imposes extreme challenges on the data pipeline: model inputs must deeply integrate real-time cumulative order streams (high-frequency incremental data) with historical baseline data from corresponding periods (massive static data), demanding exceptionally high standards for both data consistency and low latency.</p>
+<p><img decoding="async" loading="lazy" src="https://fluss.apache.org/assets/images/scenario3-956a82e94cd7e6c4b8ce0606207ee19f.png" width="1206" height="942" class="img_ev3q"></p>
+<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="architecture-based-on-fluss-lake-stream-unification">Architecture Based on Fluss Lake-Stream Unification<a href="https://fluss.apache.org/blog/taobao-instant-commerce-real-time-decision/#architecture-based-on-fluss-lake-stream-unification" class="hash-link" aria-label="Direct link to Architecture Based on Fluss Lake-Stream Unification" title="Direct link to Architecture Based on Fluss Lake-Stream Unification" translate="no"></a></h3>
+<p><img decoding="async" loading="lazy" src="https://fluss.apache.org/assets/images/arch3-fff6f1c8fbf2246cfd476cc947d6aca6.png" width="1572" height="520" class="img_ev3q"></p>
+<p>The current implementation leverages Fluss KV Tables as a unified storage layer for both streaming and batch processing. By integrating Streaming-Lakehouse Unification, it enables automated synchronization to the data lake. Since both streaming and batch operations rely on the same KV Table, data consistency is inherently guaranteed. This approach eliminates the need for independent data migration jobs, ensuring low-latency synchronization of prediction results.</p>
+<p>Core Architecture Workflow:</p>
+<ul>
+<li class=""><strong>Real-time Accumulation:</strong> The real-time order stream is written into the Fluss KV Table, enabling the calculation of rolling cumulative order counts on a per-minute basis via stream reads.</li>
+<li class=""><strong>Efficient Stream-Batch Fusion:</strong> A Flink UDF directly reads both real-time data (via stream read) and historical baseline data (via batch read / Snapshot Lookup) from the Fluss KV Table, achieving efficient fusion of streaming and batch data.</li>
+<li class=""><strong>Low-Latency Lake Sync:</strong> Model prediction results are written back to the Fluss KV Table. With automatic Tiering enabled, these results are synchronized to Paimon with low latency (with configurable snapshot intervals).</li>
+<li class=""><strong>Unified Data Consistency:</strong> Downstream algorithm models and operational dashboards read real-time prediction results from the Fluss KV Table and historical prediction results from Paimon, ensuring end-to-end data consistency across the entire pipeline.</li>
+</ul>
+<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="core-ddl-and-write-implementation">Core DDL and Write Implementation<a href="https://fluss.apache.org/blog/taobao-instant-commerce-real-time-decision/#core-ddl-and-write-implementation" class="hash-link" aria-label="Direct link to Core DDL and Write Implementation" title="Direct link to Core DDL and Write Implementation" translate="no"></a></h3>
+<div class="language-sql codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#36464e;--prism-background-color:#f5f5f5"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-sql codeBlock_bY9V thin-scrollbar" style="color:#36464e;background-color:#f5f5f5"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#36464e"><span class="token comment" style="color:#8e908c;font-style:italic">-- Note: ${xxx} represents environment-specific para [...]
+<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="measured-results-2">Measured Results<a href="https://fluss.apache.org/blog/taobao-instant-commerce-real-time-decision/#measured-results-2" class="hash-link" aria-label="Direct link to Measured Results" title="Direct link to Measured Results" translate="no"></a></h3>
+<p>The Fluss KV Streaming-Lakehouse Unification solution achieves unified source integration for streaming and batch data, eliminating independent data migration jobs and delivering significant improvements in core metrics:</p>
+<p><img decoding="async" loading="lazy" src="https://fluss.apache.org/assets/images/results3-61913d100d2167c5013e22186a0b51fa.png" width="1964" height="1554" class="img_ev3q"></p>
+<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="scenario-4-canary-monitoring-efficient-log-processing-via-log-tables-and-column-pruning">Scenario 4: Canary Monitoring: Efficient Log Processing via Log Tables and Column Pruning<a href="https://fluss.apache.org/blog/taobao-instant-commerce-real-time-decision/#scenario-4-canary-monitoring-efficient-log-processing-via-log-tables-and-column-pruning" class="hash-link" aria-label="Direct link to Scenario 4: Canary Monitoring: Efficient Log [...]
+<p>In the context of Taobao Instant Commerce’s high-frequency iteration cycle, frontend telemetry data covering the full user journey (from app launch, site entry, impressions, traffic redirection, store visits, cart additions, and orders through to fulfillment) serves as the core basis for evaluating release quality, monitoring marketing effectiveness, and optimizing search and recommendation strategies. To mitigate release risks, canary releases have become the standard procedure, with [...]
+<p>Fluss has refactored the data foundation for canary monitoring by leveraging:</p>
+<ul>
+<li class="">High-throughput writes via Log Tables;</li>
+<li class="">Server-side column pruning for I/O optimization;</li>
+<li class="">Automatic archiving through Streaming-Lakehouse Unification.</li>
+</ul>
+<p>This transformation upgrades the architecture from <strong>reactive firefighting</strong> to <strong>proactive governance</strong>.</p>
+<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="pain-points-of-traditional-solutions-2">Pain Points of Traditional Solutions<a href="https://fluss.apache.org/blog/taobao-instant-commerce-real-time-decision/#pain-points-of-traditional-solutions-2" class="hash-link" aria-label="Direct link to Pain Points of Traditional Solutions" title="Direct link to Pain Points of Traditional Solutions" translate="no"></a></h3>
+<p><img decoding="async" loading="lazy" src="https://fluss.apache.org/assets/images/painpoints3-be364f89be387994e0475b0162116cc5.png" width="1200" height="515" class="img_ev3q"></p>
+<p>The legacy architecture utilized Kafka as the message queue, Flink for real-time consumption and computation, and Paimon for storing detailed data. However, as data volumes surged and business complexity increased, this architecture exposed several core pain points:</p>
+<table><thead><tr><th><strong>Dimension</strong></th><th><strong>Specific Technical Challenge</strong></th></tr></thead><tbody><tr><td>I/O Resource Waste</td><td>Kafka carries complete message payloads with no server-side column filtering. Monitoring tasks require only ~30 core fields, yet must deserialize entire messages containing large fields like <code>args</code> (90+ columns).</td></tr><tr><td>Redundant & Complex Pipeline</td><td>Two independent Flink jobs must be maintained: o [...]
+<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="architecture-based-on-fluss-log-table-and-column-pruning">Architecture Based on Fluss Log Table and Column Pruning<a href="https://fluss.apache.org/blog/taobao-instant-commerce-real-time-decision/#architecture-based-on-fluss-log-table-and-column-pruning" class="hash-link" aria-label="Direct link to Architecture Based on Fluss Log Table and Column Pruning" title="Direct link to Architecture Based on Fluss Log Table and Column Pruning" t [...]
+<p><img decoding="async" loading="lazy" src="https://fluss.apache.org/assets/images/arch4-1a1c321ddce7027f6bb89f14d3007939.png" width="1080" height="476" class="img_ev3q"></p>
+<p>To address the aforementioned pain points, Taobao Instant Commerce underwent a three-stage architectural evolution, ultimately establishing a unified log governance solution centered on Fluss:</p>
+<ul>
+<li class=""><strong>Phase 1:</strong> Introduced Fluss for a specific client’s data to validate the feasibility of cost optimization and improvements in data freshness.</li>
+<li class=""><strong>Phase 2:</strong> Integrated data from all client endpoints. While this achieved unified data ingestion, computational tasks remained redundant due to difficulties in reusing the intermediate layer.</li>
+<li class=""><strong>Phase 3:</strong> Leveraged Fluss’s server-side column pruning to eliminate invalid I/O, and used automatic Tiering to merge monitoring and synchronization pipelines. This completely resolves the issue of redundant computations.</li>
+</ul>
+<p><img decoding="async" loading="lazy" src="https://fluss.apache.org/assets/images/arch5-ae5729b648a47e8a4e8ed804cd0f2c87.png" width="1600" height="526" class="img_ev3q"></p>
+<p>The new architecture establishes Fluss Log Tables as the single source of truth, creating an efficient <strong>write once, multi-dimensional reuse</strong> data loop:</p>
+<ul>
+<li class=""><strong>Unified High-Throughput Ingestion:</strong> Multi-source canary logs are uniformly written into Fluss Log Tables. Leveraging the Append-Only nature of Log Tables, the system perfectly accommodates high-concurrency write scenarios for massive volumes of logs.</li>
+<li class=""><strong>Server-Side Column Pruning:</strong> During Flink consumption, Projection Pushdown pushes the required columns down to the Fluss server side. The server reads and returns only the specified <strong>30 core fields</strong>, blocking <strong>67%</strong> of invalid network transmission at the source.</li>
+<li class=""><strong>Automated Archiving via Streaming-Lakehouse Unification:</strong> By simply enabling the <code>table.datalake.enabled</code> configuration, the system automatically and asynchronously synchronizes real-time data to Paimon. This eliminates the need for deploying separate Flink archiving jobs. Real-time monitoring and offline analysis share the same data pipeline, achieving seamless stream-batch data fusion.</li>
+<li class=""><strong>Multi-Client Reuse & Within-Seconds Alerting:</strong> Real-time monitoring tasks directly consume the lightweight, pruned data stream, feeding BI dashboards to achieve within-seconds anomaly alerting. Offline analysis queries Paimon tables directly, ensuring inherent consistency between streaming and batch data.</li>
+</ul>
+<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="core-ddl-and-write-implementation-1">Core DDL and Write Implementation<a href="https://fluss.apache.org/blog/taobao-instant-commerce-real-time-decision/#core-ddl-and-write-implementation-1" class="hash-link" aria-label="Direct link to Core DDL and Write Implementation" title="Direct link to Core DDL and Write Implementation" translate="no"></a></h3>
+<div class="language-sql codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#36464e;--prism-background-color:#f5f5f5"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-sql codeBlock_bY9V thin-scrollbar" style="color:#36464e;background-color:#f5f5f5"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#36464e"><span class="token comment" style="color:#8e908c;font-style:italic">-- Note: ${xxx} represents environment-specific para [...]
+<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="measured-results-3">Measured Results<a href="https://fluss.apache.org/blog/taobao-instant-commerce-real-time-decision/#measured-results-3" class="hash-link" aria-label="Direct link to Measured Results" title="Direct link to Measured Results" translate="no"></a></h3>
+<p><img decoding="async" loading="lazy" src="https://fluss.apache.org/assets/images/results4-5656ef59df33ac93eb438b3cfc94e98a.png" width="1990" height="1166" class="img_ev3q"></p>
+<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="scenario-5-global-real-time-uv-statistics-auto-increment-columns-and-aggregation-tables-for-unique-user-counting">Scenario 5: Global Real-Time UV Statistics: Auto-Increment Columns and Aggregation Tables for Unique User Counting<a href="https://fluss.apache.org/blog/taobao-instant-commerce-real-time-decision/#scenario-5-global-real-time-uv-statistics-auto-increment-columns-and-aggregation-tables-for-unique-user-counting" class="hash-li [...]
+<p>In Taobao Instant Commerce’s refined operational framework, unique visitor (UV) counts across the full user journey (covering impressions, visits, clicks, and orders) are core metrics for measuring traffic quality and conversion efficiency. In the original architecture, a hybrid stack of Flink + Hologres + Paimon + StarRocks was used:</p>
+<ul>
+<li class="">Hologres (Alibaba Cloud’s real-time OLAP database) stored user mapping tables to handle ID resolution;</li>
+<li class="">Flink constructed Bitmaps via custom user-defined functions (UDFs) and wrote them to Paimon;</li>
+<li class="">StarRocks accelerated queries using materialized views.</li>
+</ul>
+<p>However, under ultra-large-scale data volumes, this architecture exposed three critical pain points:</p>
+<ul>
+<li class="">Lookup hotspots and latency spikes in Hologres;</li>
+<li class="">Backpressure from unbounded Flink state growth;</li>
+<li class="">High data synchronization latency from Paimon’s compaction model.</li>
+</ul>
+<p>These issues made it impossible to achieve within-seconds real-time monitoring during promotional events. The introduction of Fluss marks a key iteration of this architecture:</p>
+<ul>
+<li class="">It replaces Hologres with Fluss KV Tables for low-latency ID mapping;</li>
+<li class="">It replaces Flink state with Fluss Aggregation Tables for stateless local aggregation;</li>
+<li class="">It replaces the independent Paimon synchronization pipeline with Auto Tiering for within-seconds sync.</li>
+</ul>
+<p>This solution achieves an architectural upgrade from a fragmented, high-latency multi-component stack to a unified, low-latency Streaming-Lakehouse architecture.</p>
+<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="pain-point-of-the-old-approach">Pain Point of the Old Approach<a href="https://fluss.apache.org/blog/taobao-instant-commerce-real-time-decision/#pain-point-of-the-old-approach" class="hash-link" aria-label="Direct link to Pain Point of the Old Approach" title="Direct link to Pain Point of the Old Approach" translate="no"></a></h3>
+<p><img decoding="async" loading="lazy" src="https://fluss.apache.org/assets/images/painpoints4-2ab1271cf7963066a01571e44fced03b.png" width="1200" height="485" class="img_ev3q">
+The pre-iteration architecture suffered from the following critical bottlenecks:</p>
+<ul>
+<li class=""><strong>Hologres Lookup Hotspots and Network Bottlenecks:</strong> Flink issued massive volumes of RPC requests to Hologres. Under high concurrency, this led to data skew and hotspots, causing lookup latency to degrade to several seconds.</li>
+<li class=""><strong>Unbounded Flink State Growth and Checkpoint Failures:</strong> Flink UDFs were required to maintain <strong>TB-scale</strong> Bitmap state. This resulted in excessively long <code>Checkpoint</code> durations (<strong>>10 minutes</strong>), frequent timeouts, and poor job stability.</li>
+<li class=""><strong>Paimon Synchronization Latency:</strong> Paimon <code>compaction</code> introduced minute-level latency, leaving downstream StarRocks Materialized Views with stale data. This made it impossible to meet the requirements for within-seconds monitoring.</li>
+</ul>
+<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="architecture-based-on-fluss-auto-increment-columns-and-aggregation-tables">Architecture Based on Fluss Auto-Increment Columns and Aggregation Tables<a href="https://fluss.apache.org/blog/taobao-instant-commerce-real-time-decision/#architecture-based-on-fluss-auto-increment-columns-and-aggregation-tables" class="hash-link" aria-label="Direct link to Architecture Based on Fluss Auto-Increment Columns and Aggregation Tables" title="Direct [...]
+<p><img decoding="async" loading="lazy" src="https://fluss.apache.org/assets/images/arch6-5394a5c2d2e041c53218b004d30e308b.png" width="1400" height="514" class="img_ev3q"></p>
+<p>To address the three major pain points of the traditional architecture, we leveraged Fluss’s core design with a strategy centered on "mapping sparse business IDs to dense integer IDs for bitmap computation." Through techniques such as full pre-loading, dense integer ID generation, sharded parallelism, and 32-bit bitmap optimization, we achieved high-performance real-time unique visitor counting.</p>
+<ul>
+<li class=""><strong>Auto-Increment KV Mapping Layer:</strong> Using Flink’s built-in dimension table lookup, we built real-time ID resolution capabilities:<!-- -->
+<ul>
+<li class=""><strong>Lock-Free Segment Allocation:</strong> Fluss requests ID segments in batches and caches them locally. This lock-free, thread-level allocation avoids lock contention and GC pauses during concurrent writes, significantly improving ID generation throughput.</li>
+<li class=""><strong>Query-Then-Insert:</strong> In dimension table Lookup scenarios, if a business ID is not found, Fluss automatically triggers an <code>INSERT</code> and returns the new auto-increment ID. This mechanism merges the traditional "check-then-write" two-step interaction into a single request, effectively reducing network traffic and cluster pressure.</li>
+<li class=""><strong>Batching & Pipeline Optimization:</strong> By combining Flink’s asynchronous Lookup batch request mechanism with Fluss client-side Pipeline writes, massive discrete RPCs are aggregated and processed in parallel. This design reduces interaction overhead and further optimizes overall system throughput.</li>
+<li class=""><strong>Full Pre-loading & Dense ID Generation:</strong> Before going live, billions of historical business IDs were batch-imported into the Fluss KV Table to generate unique 64-bit integer IDs using the auto-increment column. This eliminates cross-cluster RPC latency for existing users (<strong>100% cache hit rate</strong>), while new users are assigned IDs on first appearance via <code>INSERT</code>.</li>
+</ul>
+</li>
+<li class=""><strong>Sharded Parallelism:</strong> By taking the modulus of the physical ID, all users are uniformly distributed across N logical shards, enabling localized parallelism for global deduplication tasks. Since behaviors from the same user strictly fall into the same shard, data volume across shards remains absolutely balanced, completely avoiding hotspot skew caused by patterns in business ID ranges.</li>
+<li class=""><strong>32-Bit ID Compression:</strong> When the total number of physical IDs is below 4 billion, 64-bit IDs can be downcast to 32-bit integers, enabling the use of the <code>rbm32</code> (32-bit RoaringBitmap) aggregation function. Compared to <code>rbm64</code>, this reduces memory usage by over <strong>50%</strong> and significantly improves bitwise operation efficiency and CPU cache utilization.</li>
+</ul>
+<h4 class="anchor anchorTargetStickyNavbar_Vzrq" id="dual-path-aggregation-architecture">Dual-Path Aggregation Architecture<a href="https://fluss.apache.org/blog/taobao-instant-commerce-real-time-decision/#dual-path-aggregation-architecture" class="hash-link" aria-label="Direct link to Dual-Path Aggregation Architecture" title="Direct link to Dual-Path Aggregation Architecture" translate="no"></a></h4>
+<p>Based on the aforementioned preprocessing, the team implemented two parallel data pipelines:</p>
+<ul>
+<li class=""><strong>Option A (Fluss Aggregation Table Pre-Aggregation):</strong> The server side performs local Bitmap merging keyed by <code>(ds, hh, mm, shard_id)</code>, allowing Flink to consume only the already-merged results. This offloads the computational work to the storage layer and is ideal for extreme real-time scenarios such as live event war rooms, achieving sub-second latency.</li>
+<li class=""><strong>Option B (Fluss Auto Tiering + StarRocks Native Deduplication):</strong> Detailed data is synchronized to Paimon within seconds, with StarRocks handling the final deduplication. This approach suits flexible multi-dimensional analysis (such as daily operational dashboards) and supports ad-hoc queries across arbitrary dimensions.</li>
+</ul>
+<p>Both paths share the same ID mapping and sharding logic, allowing the team to freely switch between them based on business requirements for real-time performance versus query flexibility.</p>
+<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="core-ddl-and-write-implementation-2">Core DDL and Write Implementation<a href="https://fluss.apache.org/blog/taobao-instant-commerce-real-time-decision/#core-ddl-and-write-implementation-2" class="hash-link" aria-label="Direct link to Core DDL and Write Implementation" title="Direct link to Core DDL and Write Implementation" translate="no"></a></h3>
+<h4 class="anchor anchorTargetStickyNavbar_Vzrq" id="user-mapping-table-with-auto-increment-column-enabled">User Mapping Table (with Auto-Increment Column Enabled)<a href="https://fluss.apache.org/blog/taobao-instant-commerce-real-time-decision/#user-mapping-table-with-auto-increment-column-enabled" class="hash-link" aria-label="Direct link to User Mapping Table (with Auto-Increment Column Enabled)" title="Direct link to User Mapping Table (with Auto-Increment Column Enabled)" translate= [...]
+<div class="language-sql codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#36464e;--prism-background-color:#f5f5f5"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-sql codeBlock_bY9V thin-scrollbar" style="color:#36464e;background-color:#f5f5f5"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#36464e"><span class="token comment" style="color:#8e908c;font-style:italic">-- Note: ${xxx} represents environment-specific para [...]
+<h4 class="anchor anchorTargetStickyNavbar_Vzrq" id="new-user-discovery-and-mapping-ingestion">New User Discovery and Mapping Ingestion<a href="https://fluss.apache.org/blog/taobao-instant-commerce-real-time-decision/#new-user-discovery-and-mapping-ingestion" class="hash-link" aria-label="Direct link to New User Discovery and Mapping Ingestion" title="Direct link to New User Discovery and Mapping Ingestion" translate="no"></a></h4>
+<div class="language-sql codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#36464e;--prism-background-color:#f5f5f5"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-sql codeBlock_bY9V thin-scrollbar" style="color:#36464e;background-color:#f5f5f5"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#36464e"><span class="token keyword" style="color:#3f6ec6">INSERT</span><span class="token plain"> </span><span class="token keyw [...]
+<h4 class="anchor anchorTargetStickyNavbar_Vzrq" id="implementation-of-solution-a-fluss-aggregation-table--flink-global-merge">Implementation of Solution A: Fluss Aggregation Table + Flink Global Merge<a href="https://fluss.apache.org/blog/taobao-instant-commerce-real-time-decision/#implementation-of-solution-a-fluss-aggregation-table--flink-global-merge" class="hash-link" aria-label="Direct link to Implementation of Solution A: Fluss Aggregation Table + Flink Global Merge" title="Direct [...]
+<p>Core Idea: Use the Fluss Aggregation Table to perform partial Bitmap merging on the server side, so Flink only needs to consume the pre-aggregated results for a final global merge.</p>
+<p><strong>Fluss DDL (Aggregation Table)</strong></p>
+<div class="language-sql codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#36464e;--prism-background-color:#f5f5f5"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-sql codeBlock_bY9V thin-scrollbar" style="color:#36464e;background-color:#f5f5f5"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#36464e"><span class="token comment" style="color:#8e908c;font-style:italic">-- Note: ${xxx} represents environment-specific para [...]
+<p><strong>Fluss DML (Aggregation Table)</strong></p>
+<div class="language-sql codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#36464e;--prism-background-color:#f5f5f5"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-sql codeBlock_bY9V thin-scrollbar" style="color:#36464e;background-color:#f5f5f5"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#36464e"><span class="token comment" style="color:#8e908c;font-style:italic">-- Note: N is a power of 2 and should be dynamically [...]
+<h4 class="anchor anchorTargetStickyNavbar_Vzrq" id="implementation-of-solution-b-fluss-auto-tiering--starrocks-native-deduplication">Implementation of Solution B: Fluss Auto Tiering + StarRocks Native Deduplication<a href="https://fluss.apache.org/blog/taobao-instant-commerce-real-time-decision/#implementation-of-solution-b-fluss-auto-tiering--starrocks-native-deduplication" class="hash-link" aria-label="Direct link to Implementation of Solution B: Fluss Auto Tiering + StarRocks Native [...]
+<p>Core Idea: Fluss acts as a high-throughput data pipeline, synchronizing data to Paimon via Auto Tiering. StarRocks then handles the final deduplication using its native OLAP engine.</p>
+<p><strong>Fluss DDL (Log/KV Table with Tiering):</strong></p>
+<div class="language-sql codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#36464e;--prism-background-color:#f5f5f5"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-sql codeBlock_bY9V thin-scrollbar" style="color:#36464e;background-color:#f5f5f5"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#36464e"><span class="token keyword" style="color:#3f6ec6">CREATE</span><span class="token plain"> </span><span class="token keyw [...]
+<p><strong>Fact Table Denormalization (Generating Shard ID and Bitmap Index)</strong></p>
+<div class="language-sql codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#36464e;--prism-background-color:#f5f5f5"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-sql codeBlock_bY9V thin-scrollbar" style="color:#36464e;background-color:#f5f5f5"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#36464e"><span class="token comment" style="color:#8e908c;font-style:italic">-- Note: N is a power of 2 and should be dynamically [...]
+<p><strong>Downstream StarRocks Precise Deduplication Query</strong></p>
+<div class="language-sql codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#36464e;--prism-background-color:#f5f5f5"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-sql codeBlock_bY9V thin-scrollbar" style="color:#36464e;background-color:#f5f5f5"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#36464e"><span class="token comment" style="color:#8e908c;font-style:italic">-- Note: ${xxx} in the text represents environment-s [...]
+<p><strong>Features: Decoupled architecture; StarRocks bears the computational load and supports flexible ad-hoc queries.</strong></p>
+<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="measured-results-4">Measured Results<a href="https://fluss.apache.org/blog/taobao-instant-commerce-real-time-decision/#measured-results-4" class="hash-link" aria-label="Direct link to Measured Results" title="Direct link to Measured Results" translate="no"></a></h3>
+<p>Compared to the legacy solution, both new approaches achieve significant optimizations, but with different focuses:
+<img decoding="async" loading="lazy" src="https://fluss.apache.org/assets/images/results5-c6d0022743553219299f7d2bb86b9fbe.png" width="1984" height="1244" class="img_ev3q"></p>
+<ul>
+<li class="">If the business prioritizes extreme real-time performance and has fixed aggregation logic, Solution A is recommended, as it pushes the computational load down to the storage layer to the greatest extent.</li>
+<li class="">If the business requires flexible multi-dimensional analysis and can tolerate a few seconds of latency, Solution B is recommended, as it fully leverages StarRocks' OLAP capabilities and results in a simpler, more general-purpose architecture.</li>
+</ul>
+<p>By adopting these two solutions, Taobao Instant Commerce successfully achieved real-time, accurate, and cost-effective end-to-end unique visitor (UV) metrics at massive scale. This approach retains StarRocks' query strengths while resolving the upstream pipeline performance bottlenecks through Fluss.</p>
+<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="fluss-implementation-best-practices-and-future-roadmap">Fluss Implementation Best Practices and Future Roadmap<a href="https://fluss.apache.org/blog/taobao-instant-commerce-real-time-decision/#fluss-implementation-best-practices-and-future-roadmap" class="hash-link" aria-label="Direct link to Fluss Implementation Best Practices and Future Roadmap" title="Direct link to Fluss Implementation Best Practices and Future Roadmap" translate=" [...]
+<p>During the rollout of Fluss, Taobao Instant Commerce progressed from single-feature pilots to full pipeline implementations combining multiple Fluss features. This process has produced practical, reusable patterns while also shaping a clear technical roadmap aligned with both business needs and upstream community development.</p>
+<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="key-lessons-learned">Key Lessons Learned<a href="https://fluss.apache.org/blog/taobao-instant-commerce-real-time-decision/#key-lessons-learned" class="hash-link" aria-label="Direct link to Key Lessons Learned" title="Direct link to Key Lessons Learned" translate="no"></a></h3>
+<ul>
+<li class=""><strong>Prioritize DDL Standards:</strong> When creating wide tables, plan the responsible jobs for each column in advance. All non-primary key columns must be declared as <code>NULLABLE</code>, and writers should specify only the target columns. This standard must be integrated into the team’s table creation workflow to prevent update failures caused by improper field configurations.</li>
+<li class=""><strong>Precise Bucketing Strategy:</strong> An insufficient number of buckets can lead to excessive data volume in a single bucket, causing read amplification in <code>RocksDB</code>.</li>
+<li class=""><strong>Maximize Column Pruning Benefits:</strong> Business SQL queries should explicitly specify the required columns to avoid <code>SELECT *</code>. This is particularly important in scenarios involving log wide tables and dimension table joins, allowing Fluss to fully leverage its I/O savings advantages.</li>
+<li class=""><strong>Phased Migration:</strong> There is no need to replace the entire traditional pipeline at once. Start by replacing large-state two-stream joins with Delta Joins, then gradually expand to Partial Update wide tables and lake-stream integration. Each step should deliver independent, quantifiable benefits, and should be promoted broadly only after its effectiveness has been verified.</li>
+</ul>
+<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="future-roadmap">Future Roadmap<a href="https://fluss.apache.org/blog/taobao-instant-commerce-real-time-decision/#future-roadmap" class="hash-link" aria-label="Direct link to Future Roadmap" title="Direct link to Future Roadmap" translate="no"></a></h2>
+<p><img decoding="async" loading="lazy" src="https://fluss.apache.org/assets/images/future1-c553b8da51276a5e56c0e3bd70b706d6.png" width="1200" height="640" class="img_ev3q"></p>
+<p>In the future, the overall data architecture will gradually unify computational logic through Flink SQL, evolve into a unified lake-stream storage foundation based on Fluss and Paimon, and build a unified query acceleration layer leveraging StarRocks.
+The ultimate goal is to achieve <strong>one codebase, one dataset, and one metric definition</strong>, serving both real-time applications and offline analytics simultaneously, thereby thoroughly resolving data inconsistencies and high maintenance costs caused by the separation of stream and batch processing.</p>
+<p><img decoding="async" loading="lazy" src="https://fluss.apache.org/assets/images/future2-6ade7f5fde156c28259354d068c2422c.png" width="840" height="1041" class="img_ev3q"></p>]]></content>
+ <author>
+ <name>Howie Wang</name>
+ <uri>https://github.com/matrixsparse</uri>
+ </author>
+ </entry>
<entry>
<title type="html"><![CDATA[Real-Time Multi-Dimensional Unique Visitor Deduplication in Practice]]></title>
<id>https://fluss.apache.org/blog/roaringbitmap-uv-deduplication/</id>
@@ -2776,83 +3052,4 @@ In the process of building a data warehouse, it is common to organize and manage
<uri>https://github.com/luoyuxia</uri>
</author>
</entry>
- <entry>
- <title type="html"><![CDATA[Introducing Fluss: Streaming Storage for Real-Time Analytics]]></title>
- <id>https://fluss.apache.org/blog/fluss-intro/</id>
- <link href="https://fluss.apache.org/blog/fluss-intro/"/>
- <updated>2024-12-12T00:00:00.000Z</updated>
- <summary type="html"><![CDATA[We have discussed the challenges of using Kafka for real-time analytics in our previous blog post.]]></summary>
- <content type="html"><![CDATA[<p>We have discussed the challenges of using Kafka for real-time analytics in our previous <a class="" href="https://fluss.apache.org/blog/why-fluss/">blog post</a>.
-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 anchorTargetStickyNavbar_Vzrq" id="key-features-of-fluss">Key Features of Fluss<a href="https://fluss.apache.org/blog/fluss-intro/#key-features-of-fluss" class="hash-link" aria-label="Direct link to Key Features of Fluss" title="Direct link to Key Features of Fluss" translate="no"></a></h2>
-<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="columnar-stream">Columnar Stream<a href="https://fluss.apache.org/blog/fluss-intro/#columnar-stream" class="hash-link" aria-label="Direct link to Columnar Stream" title="Direct link to Columnar Stream" translate="no"></a></h3>
-<p><img decoding="async" loading="lazy" alt="FF Announcement" src="https://fluss.apache.org/assets/images/img1-591c05a64a0e27a33a3ce5776391d92d.jpg" width="3634" height="1188" class="img_ev3q">
-Fluss is, as anticipated, a columnar-based streaming storage, leveraging the <a href="https://arrow.apache.org/docs/python/ipc.html" target="_blank" rel="noopener noreferrer" class="">Apache Arrow IPC Streaming Format</a> for its underlying file storage.
-This enables Fluss to achieve highly efficient column pruning while maintaining millisecond-level streaming reads and writes capabilities.</p>
-<p>The performance benefits of Fluss are evident in its benchmarks against Kafka. In the comparison, the horizontal axis represents the number of columns read, while the vertical axis shows the read throughput. The results clearly demonstrate that Fluss's read performance scales proportionally with the reduction in columns read. For example, when the number of columns is reduced by 90%, Fluss achieves a 10x increase in read throughput.</p>
-<p>A key advantage of Fluss is that column pruning is performed server-side and only the needed column data will be transferred to client-side. This architectural design not only enhances performance but also reduces network costs and resource consumption, making Fluss a highly efficient solution for real-time streaming analytics.</p>
-<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="real-time-updates-and-changelog">Real-Time Updates and Changelog<a href="https://fluss.apache.org/blog/fluss-intro/#real-time-updates-and-changelog" class="hash-link" aria-label="Direct link to Real-Time Updates and Changelog" title="Direct link to Real-Time Updates and Changelog" translate="no"></a></h3>
-<p><img decoding="async" loading="lazy" alt="FF Announcement" src="https://fluss.apache.org/assets/images/img2-846063bd092bc571aad305ae7253a190.jpg" width="3484" height="1146" class="img_ev3q">
-Real-time updates and Changelog are very important features required by streaming analytics and Flink.
-At its core, Fluss streaming storage is built on a Log Tablet, with a key-value (KV) index constructed over the Log.
-The relationship between the Log and KV mirrors the concept of stream-table duality:
-updates to the KV generate a changelog that is written to the Log. In the event of a failure, data from the Log is used to recover the KV.</p>
-<p>The KV index is implemented as a Log-Structured Merge (LSM) tree to support large-scale real-time updates,
-and also support partial-update which can be used to build wide tables very efficiently. In addition, the changelog
-generated by KV can be read directly by Flink without additional deduplication cost, which saves a lot of computing resources.</p>
-<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="queryable">Queryable<a href="https://fluss.apache.org/blog/fluss-intro/#queryable" class="hash-link" aria-label="Direct link to Queryable" title="Direct link to Queryable" translate="no"></a></h3>
-<p><img decoding="async" loading="lazy" alt="FF Announcement" src="https://fluss.apache.org/assets/images/img3-f76df2882b217d4aa58efba2edae07d8.jpg" width="3468" height="1148" class="img_ev3q">
-The built-in KV indexes enable high-performance primary key lookups, making Fluss suitable for real-time processing tasks such as dimension table joins. Users can also perform direct data exploration with Fluss, including queries with operations like LIMIT and COUNT, to make debugging data in Fluss very easy.</p>
-<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="unification-of-stream-and-lakehouse">Unification of Stream and Lakehouse<a href="https://fluss.apache.org/blog/fluss-intro/#unification-of-stream-and-lakehouse" class="hash-link" aria-label="Direct link to Unification of Stream and Lakehouse" title="Direct link to Unification of Stream and Lakehouse" translate="no"></a></h3>
-<p><img decoding="async" loading="lazy" alt="FF Announcement" src="https://fluss.apache.org/assets/images/img4-80846362d40e3239bfcd92216276b72d.jpg" width="3698" height="1218" class="img_ev3q">
-One of Fluss's standout features is the unification of stream and Lakehouse. In traditional Lambda architecture, you have to duplicate data in both real-time layer and batch layer. While Fluss eliminates this redundancy by unifying "data stored in stream" and "data stored in lake". This unification ensures consistent data and metadata while reducing storage costs and simplifying data workflows.</p>
-<p>At its core, Fluss incorporates a <code>compaction service</code> that ensures seamless integration between stream and lake storage. This service automatically and continuously converts Fluss data into the data lake format.
-A key feature here is called "Shared Data". The Lakehouse storage serves as the historical data layer for the streaming storage, which is optimized for storing long-term data with minute-level latencies. On the other hand, streaming storage serves as the real-time data layer for Lakehouse storage, which is optimized for storing short-term data with millisecond-level latencies.
-The data is shared with each other, and is exposed as a single table.
-For streaming queries on the table, it firstly uses the Lakehouse storage as historical data to have efficient catch-up read performance, and then seamlessly transitions to the streaming storage for real-time data, ensuring no duplicate data is read.
-For batch queries on the table, streaming storage supplements real-time data for Lakehouse storage, enabling second-level freshness for Lakehouse analytics.
-This capability, termed <strong>Union Read</strong>, allows both layers to work in tandem for highly efficient and accurate data access.</p>
-<p>In addition, the automatically converted data lake tables fully adhere to open table format protocols, ensuring compatibility with existing query engines such as Apache Spark, StarRocks, and Trino.
-These engines can directly query data on Lakehouse storage, seamlessly integrating it into users' existing Lakehouse architectures.</p>
-<p>Fluss has already completed integration with Apache Paimon, and integration with Apache Iceberg is underway. This commitment to compatibility ensures that Fluss remains a flexible and powerful component in the modern data stack, bridging real-time and historical data for unified analytics and storage efficiency.</p>
-<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="overall-architecture">Overall Architecture<a href="https://fluss.apache.org/blog/fluss-intro/#overall-architecture" class="hash-link" aria-label="Direct link to Overall Architecture" title="Direct link to Overall Architecture" translate="no"></a></h2>
-<p><img decoding="async" loading="lazy" alt="FF Announcement" src="https://fluss.apache.org/assets/images/img9-fb689d41f612ef840508c4c20399822c.jpg" width="3686" height="1242" class="img_ev3q">
-This is the overall architecture of Fluss, a cutting-edge streaming storage solution designed specifically for real-time analytics. Fluss operates a server cluster to provide high-performance real-time read and write capabilities, while leveraging remote storage for data tiering to optimize storage costs. Additionally, Fluss integrates seamlessly with Lakehouse architectures, enabling robust query capabilities and a unified data ecosystem.</p>
-<p>The core features of Fluss include real-time streaming reads and writes, column pruning, streaming updates, changelog subscription, real-time lookup queries, and integration of stream and Lakehouse.</p>
-<p>With its robust architecture and comprehensive feature set, Fluss empowers organizations to bridge the gap between real-time and historical data, enabling efficient, scalable, and cost-effective solutions for real-time analytics.</p>
-<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="use-case-delta-join">Use Case: Delta Join<a href="https://fluss.apache.org/blog/fluss-intro/#use-case-delta-join" class="hash-link" aria-label="Direct link to Use Case: Delta Join" title="Direct link to Use Case: Delta Join" translate="no"></a></h2>
-<p><img decoding="async" loading="lazy" alt="FF Announcement" src="https://fluss.apache.org/assets/images/img5-c1bedf1a8c60844ffd67f77f722157f9.jpg" width="3650" height="1222" class="img_ev3q">
-The combination of Fluss’s key features lends itself to a highly effective use case: Delta Join. Apache Flink provides a foundational feature called Stream-Stream Join, widely used for building wide tables. However, it is often one of the most challenging operations in Flink.
-Stream-stream joins require maintaining the full upstream data in the state, leading to significant resource consumption. For instance, one of Taobao's largest Flink jobs is a stream-stream join (exposing associated orders), which needs to maintains a state of over 50 TB. This brings many challenges, such as high cost, unstable job, checkpoint timeout, slow restart recovery, etc.</p>
-<p>To address these challenges, we developed a new Flink join operator implementation called Delta Join, leveraging Fluss’s streaming read and secondary-index lookup capabilities. Delta Join operates like a "bilateral driven lookup join", that is:
-when data arrives from the left stream, the right table is queried using the join key;
-when data arrives from the right stream, the left table is queried using the join key.
-This approach eliminates state like Lookup Join, while preserving the semantics of a Stream-Stream Join (any updates on either side triggers an update to the join result).</p>
-<p>We tested Taobao's largest stream-stream join job and migrated to delta join. The results were impressive:</p>
-<ul>
-<li class=""><strong>Eliminate State:</strong> Migrating from stream-stream join to delta join eliminated the need for <code>50 TB</code> join state, leading to enhanced job stability and avoid checkpoint timeouts.</li>
-<li class=""><strong>Resource Optimization:</strong> Flink resource cost decreased by 10x, dropping from <code>2300 CU</code> to <code>200 CU</code>, while maintaining the same throughput.</li>
-<li class=""><strong>Faster Backfilling:</strong> By leveraging Fluss’s Lakehouse integration, we can use the converted Paimon/Iceberg table and Sort-Merge Join in batch mode for data backfilling. Re-processing one day data was reduced from <code>4 hours</code> to <code>30 minutes</code>.</li>
-</ul>
-<p>Besides the numbers, Delta Join's most significant benefit lies in its user flexibility.
-Unlike traditional stream-stream joins, where the state is tightly coupled with Flink job, operating as an opaque 'black box', any job modification requires a costly and time-consuming state rebuild.
-Delta Join addresses this by decoupling the state from the job, facilitating effortless job modifications without the need to reconstruct the state.
-This separation not only boosts backfilling efficiency but also makes state data easily accessible in Fluss for analysis, thereby enhancing business agility and increasing developer productivity.</p>
-<p>To formalize this innovation, we submitted the Delta Join <a href="https://cwiki.apache.org/confluence/display/FLINK/FLIP-486%3A+Introduce+A+New+DeltaJoin" target="_blank" rel="noopener noreferrer" class="">FLIP-486 proposal</a> to the Apache Flink community. We invite those interested to review and contribute to this exciting advancement.</p>
-<p>Delta Join, powered by Fluss, represents a breakthrough in real-time analytics by significantly reducing resource consumption, enhancing performance, and unlocking flexibility in stateful stream processing.</p>
-<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="future-plan">Future Plan<a href="https://fluss.apache.org/blog/fluss-intro/#future-plan" class="hash-link" aria-label="Direct link to Future Plan" title="Direct link to Future Plan" translate="no"></a></h2>
-<p><img decoding="async" loading="lazy" alt="FF Announcement" src="https://fluss.apache.org/assets/images/img6-3e455650eb36e97091211441c91b48ac.jpg" width="3700" height="1116" class="img_ev3q">
-The future planning for Fluss involves three key aspects, each corresponding to its relationship with three open-source software projects:</p>
-<ul>
-<li class=""><strong>Apache Kafka Protocol Compatibility:</strong> This is aimed at helping existing streaming data migrate to Fluss more effectively.</li>
-<li class=""><strong>Storage for Apache Flink:</strong> Fluss aims to be the best storage for Apache Flink and streaming analytics, offering deep optimization with Flink across the storage, optimizer and execution layer. Delta Join marks our first major step, with many more exciting features on the way.</li>
-<li class=""><strong>Real-Time Data Layer for Apache Iceberg:</strong> By unifying stream and Lakehouse, Fluss is committed to providing a robust real-time data layer for Apache Iceberg and Apache Paimon. This vision includes creating a unified storage solution that supports both real-time and offline analytics.</li>
-</ul>
-<p>There are more exciting work happening in the community. You can check out <a class="" href="https://fluss.apache.org/roadmap/">Fluss Roadmap</a> for a comprehensive future planning.</p>]]></content>
- <author>
- <name>Jark Wu</name>
- <uri>https://github.com/wuchong</uri>
- </author>
- </entry>
</feed>
\ No newline at end of file
diff --git a/blog/authors/index.html b/blog/authors/index.html
index da77da353..05cb3d514 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.5187a663.css">
-<script src="/assets/js/runtime~main.2fc346f3.js" defer="defer"></script>
-<script src="/assets/js/main.9d2d82c2.js" defer="defer"></script>
+<script src="/assets/js/runtime~main.33140780.js" defer="defer"></script>
+<script src="/assets/js/main.2460f850.js" defer="defer"></script>
</head>
<body>
<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>document.documentElement.setAttribute("data-theme","light"),document.documentElement.setAttribute("data-theme-choice","light"),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("docusaurus-data-","data-");document.documentElement.setAttribute(a,e)}}catch(t){}}()</script><div id="__docusaurus"><div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__d [...]
+<script>document.documentElement.setAttribute("data-theme","light"),document.documentElement.setAttribute("data-theme-choice","light"),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("docusaurus-data-","data-");document.documentElement.setAttribute(a,e)}}catch(t){}}()</script><div id="__docusaurus"><div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__d [...]
<p>Copyright © 2026 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-for-ai/index.html b/blog/fluss-for-ai/index.html
index baccd8408..f8381d4d7 100644
--- a/blog/fluss-for-ai/index.html
+++ b/blog/fluss-for-ai/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.5187a663.css">
-<script src="/assets/js/runtime~main.2fc346f3.js" defer="defer"></script>
-<script src="/assets/js/main.9d2d82c2.js" defer="defer"></script>
+<script src="/assets/js/runtime~main.33140780.js" defer="defer"></script>
+<script src="/assets/js/main.2460f850.js" defer="defer"></script>
</head>
<body>
<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>document.documentElement.setAttribute("data-theme","light"),document.documentElement.setAttribute("data-theme-choice","light"),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("docusaurus-data-","data-");document.documentElement.setAttribute(a,e)}}catch(t){}}()</script><div id="__docusaurus"><div class="blog-post-page-no-sidebar"><div role="region" aria-label="Skip to main content">< [...]
+<script>document.documentElement.setAttribute("data-theme","light"),document.documentElement.setAttribute("data-theme-choice","light"),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("docusaurus-data-","data-");document.documentElement.setAttribute(a,e)}}catch(t){}}()</script><div id="__docusaurus"><div class="blog-post-page-no-sidebar"><div role="region" aria-label="Skip to main content">< [...]
<p><img decoding="async" loading="lazy" src="/assets/images/banner-a3fa3c1c723340acae7046f86be1de82.png" width="1024" height="1024" class="img_ev3q">
<strong>Apache Fluss (Incubating) started as streaming storage for real-time analytics</strong>, built to work closely with stream processors like Apache Flink.
Its focus has always been on freshness, efficient analytical access, and continuous data, making fast-changing streams directly usable without forcing them
diff --git a/blog/fluss-intro/index.html b/blog/fluss-intro/index.html
index 635eb8de5..229effa7a 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.5187a663.css">
-<script src="/assets/js/runtime~main.2fc346f3.js" defer="defer"></script>
-<script src="/assets/js/main.9d2d82c2.js" defer="defer"></script>
+<script src="/assets/js/runtime~main.33140780.js" defer="defer"></script>
+<script src="/assets/js/main.2460f850.js" defer="defer"></script>
</head>
<body>
<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>document.documentElement.setAttribute("data-theme","light"),document.documentElement.setAttribute("data-theme-choice","light"),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("docusaurus-data-","data-");document.documentElement.setAttribute(a,e)}}catch(t){}}()</script><div id="__docusaurus"><div class="blog-post-page-no-sidebar"><div role="region" aria-label="Skip to main content">< [...]
+<script>document.documentElement.setAttribute("data-theme","light"),document.documentElement.setAttribute("data-theme-choice","light"),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("docusaurus-data-","data-");document.documentElement.setAttribute(a,e)}}catch(t){}}()</script><div id="__docusaurus"><div class="blog-post-page-no-sidebar"><div role="region" aria-label="Skip to main content">< [...]
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 anchorTargetStickyNavbar_Vzrq" 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" translate="no"></a></h2>
diff --git a/blog/fluss-java-client/index.html b/blog/fluss-java-client/index.html
index 4432c6be9..1bf9c736b 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.5187a663.css">
-<script src="/assets/js/runtime~main.2fc346f3.js" defer="defer"></script>
-<script src="/assets/js/main.9d2d82c2.js" defer="defer"></script>
+<script src="/assets/js/runtime~main.33140780.js" defer="defer"></script>
+<script src="/assets/js/main.2460f850.js" defer="defer"></script>
</head>
<body>
<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>document.documentElement.setAttribute("data-theme","light"),document.documentElement.setAttribute("data-theme-choice","light"),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("docusaurus-data-","data-");document.documentElement.setAttribute(a,e)}}catch(t){}}()</script><div id="__docusaurus"><div class="blog-post-page-no-sidebar"><div role="region" aria-label="Skip to main content">< [...]
+<script>document.documentElement.setAttribute("data-theme","light"),document.documentElement.setAttribute("data-theme-choice","light"),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("docusaurus-data-","data-");document.documentElement.setAttribute(a,e)}}catch(t){}}()</script><div id="__docusaurus"><div class="blog-post-page-no-sidebar"><div role="region" aria-label="Skip to main content">< [...]
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="introduction">Introduction<a href="#introduction" class="hash-link" aria-label="Direct link to Introduction" title="Direct link to Introduction" translate="no"></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 4b95d878f..9d24a22de 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.5187a663.css">
-<script src="/assets/js/runtime~main.2fc346f3.js" defer="defer"></script>
-<script src="/assets/js/main.9d2d82c2.js" defer="defer"></script>
+<script src="/assets/js/runtime~main.33140780.js" defer="defer"></script>
+<script src="/assets/js/main.2460f850.js" defer="defer"></script>
</head>
<body>
<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>document.documentElement.setAttribute("data-theme","light"),document.documentElement.setAttribute("data-theme-choice","light"),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("docusaurus-data-","data-");document.documentElement.setAttribute(a,e)}}catch(t){}}()</script><div id="__docusaurus"><div class="blog-post-page-no-sidebar"><div role="region" aria-label="Skip to main content">< [...]
+<script>document.documentElement.setAttribute("data-theme","light"),document.documentElement.setAttribute("data-theme-choice","light"),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("docusaurus-data-","data-");document.documentElement.setAttribute(a,e)}}catch(t){}}()</script><div id="__docusaurus"><div class="blog-post-page-no-sidebar"><div role="region" aria-label="Skip to main content">< [...]
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 992ca1200..346eee778 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.5187a663.css">
-<script src="/assets/js/runtime~main.2fc346f3.js" defer="defer"></script>
-<script src="/assets/js/main.9d2d82c2.js" defer="defer"></script>
+<script src="/assets/js/runtime~main.33140780.js" defer="defer"></script>
+<script src="/assets/js/main.2460f850.js" defer="defer"></script>
</head>
<body>
<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>document.documentElement.setAttribute("data-theme","light"),document.documentElement.setAttribute("data-theme-choice","light"),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("docusaurus-data-","data-");document.documentElement.setAttribute(a,e)}}catch(t){}}()</script><div id="__docusaurus"><div class="blog-post-page-no-sidebar"><div role="region" aria-label="Skip to main content">< [...]
+<script>document.documentElement.setAttribute("data-theme","light"),document.documentElement.setAttribute("data-theme-choice","light"),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("docusaurus-data-","data-");document.documentElement.setAttribute(a,e)}}catch(t){}}()</script><div id="__docusaurus"><div class="blog-post-page-no-sidebar"><div role="region" aria-label="Skip to main content">< [...]
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" class="">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" class="">Apache Flink CDC</a>, and <a href="https://paimon.apache.org/" target="_blank" rel="noop [...]
diff --git a/blog/fluss_fraud_detection/index.html b/blog/fluss_fraud_detection/index.html
index c74a3ac14..f56404a77 100644
--- a/blog/fluss_fraud_detection/index.html
+++ b/blog/fluss_fraud_detection/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.5187a663.css">
-<script src="/assets/js/runtime~main.2fc346f3.js" defer="defer"></script>
-<script src="/assets/js/main.9d2d82c2.js" defer="defer"></script>
+<script src="/assets/js/runtime~main.33140780.js" defer="defer"></script>
+<script src="/assets/js/main.2460f850.js" defer="defer"></script>
</head>
<body>
<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>document.documentElement.setAttribute("data-theme","light"),document.documentElement.setAttribute("data-theme-choice","light"),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("docusaurus-data-","data-");document.documentElement.setAttribute(a,e)}}catch(t){}}()</script><div id="__docusaurus"><div class="blog-post-page-no-sidebar"><div role="region" aria-label="Skip to main content">< [...]
+<script>document.documentElement.setAttribute("data-theme","light"),document.documentElement.setAttribute("data-theme-choice","light"),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("docusaurus-data-","data-");document.documentElement.setAttribute(a,e)}}catch(t){}}()</script><div id="__docusaurus"><div class="blog-post-page-no-sidebar"><div role="region" aria-label="Skip to main content">< [...]
<p>Fraud detection is a mission-critical capability for businesses operating in financial services, e-commerce, and digital payments. Detecting suspicious transactions in real time can prevent significant losses and protect customers. This blog demonstrates how to build a streamhouse that processes bank transactions in real time, detects fraud, and serves data seamlessly across hot (sub‑second latency) and cold (minutes‑latency) layers.
Real-time detection and historical analytics are combined, enabling businesses to act quickly while maintaining a complete audit trail.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="streamhouse-architecture">Streamhouse Architecture<a href="#streamhouse-architecture" class="hash-link" aria-label="Direct link to Streamhouse Architecture" title="Direct link to Streamhouse Architecture" translate="no"></a></h2>
diff --git a/blog/fluss_rust_client_release/index.html b/blog/fluss_rust_client_release/index.html
index 9d181510a..436a36d20 100644
--- a/blog/fluss_rust_client_release/index.html
+++ b/blog/fluss_rust_client_release/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.5187a663.css">
-<script src="/assets/js/runtime~main.2fc346f3.js" defer="defer"></script>
-<script src="/assets/js/main.9d2d82c2.js" defer="defer"></script>
+<script src="/assets/js/runtime~main.33140780.js" defer="defer"></script>
+<script src="/assets/js/main.2460f850.js" defer="defer"></script>
</head>
<body>
<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>document.documentElement.setAttribute("data-theme","light"),document.documentElement.setAttribute("data-theme-choice","light"),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("docusaurus-data-","data-");document.documentElement.setAttribute(a,e)}}catch(t){}}()</script><div id="__docusaurus"><div class="blog-post-page-no-sidebar"><div role="region" aria-label="Skip to main content">< [...]
+<script>document.documentElement.setAttribute("data-theme","light"),document.documentElement.setAttribute("data-theme-choice","light"),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("docusaurus-data-","data-");document.documentElement.setAttribute(a,e)}}catch(t){}}()</script><div id="__docusaurus"><div class="blog-post-page-no-sidebar"><div role="region" aria-label="Skip to main content">< [...]
<p>We are excited to announce the release of <a href="https://github.com/apache/fluss-rust" target="_blank" rel="noopener noreferrer" class="">fluss-rust clients</a> 0.1.0, the first official release of the <a href="https://clients.fluss.apache.org/user-guide/rust/installation" target="_blank" rel="noopener noreferrer" class="">Rust</a>, <a href="https://clients.fluss.apache.org/user-guide/python/installation" target="_blank" rel="noopener noreferrer" class="">Python</a>, and <a href="ht [...]
<p>Under the hood, all three clients share a single Rust core that handles protocol negotiation, batching, retries, and <a href="https://arrow.apache.org/" target="_blank" rel="noopener noreferrer" class="">Apache Arrow</a>-based data exchange, with thin language-specific bindings on top. This was a deliberate community decision to deliver native performance and feature parity across every language from day one.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="highlights">Highlights<a href="#highlights" class="hash-link" aria-label="Direct link to Highlights" title="Direct link to Highlights" translate="no"></a></h2>
diff --git a/blog/hands-on-fluss-lakehouse/index.html b/blog/hands-on-fluss-lakehouse/index.html
index c3d983d8f..cc2f69b74 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.5187a663.css">
-<script src="/assets/js/runtime~main.2fc346f3.js" defer="defer"></script>
-<script src="/assets/js/main.9d2d82c2.js" defer="defer"></script>
+<script src="/assets/js/runtime~main.33140780.js" defer="defer"></script>
+<script src="/assets/js/main.2460f850.js" defer="defer"></script>
</head>
<body>
<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>document.documentElement.setAttribute("data-theme","light"),document.documentElement.setAttribute("data-theme-choice","light"),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("docusaurus-data-","data-");document.documentElement.setAttribute(a,e)}}catch(t){}}()</script><div id="__docusaurus"><div class="blog-post-page-no-sidebar"><div role="region" aria-label="Skip to main content">< [...]
+<script>document.documentElement.setAttribute("data-theme","light"),document.documentElement.setAttribute("data-theme-choice","light"),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("docusaurus-data-","data-");document.documentElement.setAttribute(a,e)}}catch(t){}}()</script><div id="__docusaurus"><div class="blog-post-page-no-sidebar"><div role="region" aria-label="Skip to main content">< [...]
<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 anchorTargetStickyNavbar_Vzrq" 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" translate="no"></a></h2>
diff --git a/blog/index.html b/blog/index.html
index e536263a7..94cfb8776 100644
--- a/blog/index.html
+++ b/blog/index.html
@@ -3,7 +3,7 @@
<head>
<meta charset="UTF-8">
<meta name="generator" content="Docusaurus v3.10.0">
-<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,27 @@
<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.5187a663.css">
-<script src="/assets/js/runtime~main.2fc346f3.js" defer="defer"></script>
-<script src="/assets/js/main.9d2d82c2.js" defer="defer"></script>
+<script src="/assets/js/runtime~main.33140780.js" defer="defer"></script>
+<script src="/assets/js/main.2460f850.js" defer="defer"></script>
</head>
<body>
<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>document.documentElement.setAttribute("data-theme","light"),document.documentElement.setAttribute("data-theme-choice","light"),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("docusaurus-data-","data-");document.documentElement.setAttribute(a,e)}}catch(t){}}()</script><div id="__docusaurus"><div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__d [...]
+<script>document.documentElement.setAttribute("data-theme","light"),document.documentElement.setAttribute("data-theme-choice","light"),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("docusaurus-data-","data-");document.documentElement.setAttribute(a,e)}}catch(t){}}()</script><div id="__docusaurus"><div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__d [...]
+<p>Every autumn in China, social media floods with posts about "The First Cup of Milk Tea in Autumn." With a tap on their phone, consumers expect their order delivered within 30 minutes. That effortless experience is no accident: it is the result of Taobao Instant Commerce making thousands of data-driven decisions every second.</p>
+<p>Taobao Instant Commerce has scaled from a single-category food delivery service into a high-frequency platform spanning fresh produce, consumer electronics (3C), and beauty products. It operates under two very different modes: steady high-frequency daily transactions, and explosive traffic surges during promotional events where order volumes can multiply within minutes. Both demand the same thing: real-time responsiveness across hundreds of millions of SKUs.</p>
+<p><strong>Real-time</strong> is not a nice-to-have here; it is the lifeline for three critical functions:</p>
+<ul>
+<li class=""><strong>Operations:</strong> Refresh conversion rates and funnels within 30 seconds.</li>
+<li class=""><strong>Algorithms:</strong> Order prediction models must iterate at minute-level granularity.</li>
+<li class=""><strong>Quality Assurance:</strong> Canary release anomalies must be detected within seconds and trigger instant alerts.</li>
+</ul>
+<p>The existing pipeline (built on Kafka, Flink, Paimon, and StarRocks) handled this at one scale.</p>
+<blockquote>
+<p><strong>Note:</strong> In Alibaba's internal infrastructure, <strong>TT (TimeTunnel)</strong> is the internal equivalent of Apache Kafka — a high-throughput distributed message queue. Throughout this post, "Kafka" refers to TT in the Taobao Instant Commerce context. But as the business grew, three fundamental bottlenecks emerged: unbounded state growth from stream joins, mounting complexity in building multi-stream denormalized tables, and excessive resource consumption [...]
+</blockquote>
+<p>Fluss broke this impasse. By replacing the fragmented stream-batch architecture with a unified storage layer, its features (Delta Join, Partial Update, Streaming-Lakehouse Unification, Column Pruning, and Auto-Increment Columns) systematically eliminated all three bottlenecks and fundamentally reshaped how Taobao Instant Commerce handles real-time decision-making at scale.</p></div><footer class="row docusaurus-mt-lg"><div class="col text--right"><a aria-label="Read more about Taobao [...]
<p><strong>UV (Unique Visitors)</strong> measures the count of distinct users who visited a page or triggered an event within a given time window — unlike <strong>PV (Page Views)</strong>, which counts every request regardless of who made it. For any product or platform, accurate real-time UV statistics across dimensions like channel, city, date, and hour are a core analytical requirement.
The full combination of four dimensions means <strong>16 grouping methods</strong>; when the dimension count increases to seven, the number of possible groupings reaches <strong>128</strong>.</p>
<p>How can multi-dimensional deduplication be both accurate and flexible while maintaining real-time performance? Behind this challenge lie two very different computing paradigms: direct deduplication of raw data, or set operations based on bitmaps.</p></div><footer class="row docusaurus-mt-lg"><div class="col text--right"><a aria-label="Read more about Real-Time Multi-Dimensional Unique Visitor Deduplication in Practice" href="/blog/roaringbitmap-uv-deduplication/"><b>Read more</b></a>< [...]
@@ -87,14 +100,7 @@ These persistent state tables provide the same semantics as running both a log a
Every write produces a durable log entry and an immediately consistent key-value update.
Snapshots and log replay guarantee deterministic recovery, while clients benefit from the simplicity of interacting with one system for reads, writes, and queries.</p>
<p>In this post, we will explore how Fluss PK Tables work, why unifying log and cache into a persistent design is a critical advancement,
-and how this model resolves long-standing challenges of maintaining consistency across multiple systems.</p></div><footer class="row docusaurus-mt-lg"><div class="col text--right"><a aria-label="Read more about Primary Key Tables: Unifying Log and Cache for 🚀 Streaming" href="/blog/pk-key-tables-log-cache-streaming/"><b>Read more</b></a></div></footer></article><article class="margin-bottom--xl"><header><h2 class="title_f1Hy"><a href="/blog/taobao-practice/">How Taobao uses Apache Fluss [...]
-<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="introduction">Introduction<a href="#introduction" class="hash-link" aria-label="Direct link to Introduction" title="Direct link to Introduction" translate="no"></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><nav class="pagination-nav" aria-label="Blog list page [...]
+and how this model resolves long-standing challenges of maintaining consistency across multiple systems.</p></div><footer class="row docusaurus-mt-lg"><div class="col text--right"><a aria-label="Read more about Primary Key Tables: Unifying Log and Cache for 🚀 Streaming" href="/blog/pk-key-tables-log-cache-streaming/"><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" hr [...]
<p>Copyright © 2026 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 a71bc9e64..d6f99d479 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.10.0">
-<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.5187a663.css">
-<script src="/assets/js/runtime~main.2fc346f3.js" defer="defer"></script>
-<script src="/assets/js/main.9d2d82c2.js" defer="defer"></script>
+<script src="/assets/js/runtime~main.33140780.js" defer="defer"></script>
+<script src="/assets/js/main.2460f850.js" defer="defer"></script>
</head>
<body>
<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>document.documentElement.setAttribute("data-theme","light"),document.documentElement.setAttribute("data-theme-choice","light"),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("docusaurus-data-","data-");document.documentElement.setAttribute(a,e)}}catch(t){}}()</script><div id="__docusaurus"><div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__d [...]
+<script>document.documentElement.setAttribute("data-theme","light"),document.documentElement.setAttribute("data-theme-choice","light"),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("docusaurus-data-","data-");document.documentElement.setAttribute(a,e)}}catch(t){}}()</script><div id="__docusaurus"><div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__d [...]
+<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="introduction">Introduction<a href="#introduction" class="hash-link" aria-label="Direct link to Introduction" title="Direct link to Introduction" translate="no"></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 class=""><strong>Changelog Generation:</strong> Supports changelog generation and consumption.</li>
<li class=""><strong>Real-Time Lookup Queries:</strong> Facilitates instant lookup queries on primary keys.</li>
<li class=""><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--prev" href="/blog/"><div class="pagination-nav__label">Newer entries</div></a><a class="pagination-nav__link pagination [...]
<p>Copyright © 2026 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/3/index.html b/blog/page/3/index.html
index 142c29462..f1067ebc9 100644
--- a/blog/page/3/index.html
+++ b/blog/page/3/index.html
@@ -3,7 +3,7 @@
<head>
<meta charset="UTF-8">
<meta name="generator" content="Docusaurus v3.10.0">
-<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.5187a663.css">
-<script src="/assets/js/runtime~main.2fc346f3.js" defer="defer"></script>
-<script src="/assets/js/main.9d2d82c2.js" defer="defer"></script>
+<script src="/assets/js/runtime~main.33140780.js" defer="defer"></script>
+<script src="/assets/js/main.2460f850.js" defer="defer"></script>
</head>
<body>
<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>document.documentElement.setAttribute("data-theme","light"),document.documentElement.setAttribute("data-theme-choice","light"),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("docusaurus-data-","data-");document.documentElement.setAttribute(a,e)}}catch(t){}}()</script><div id="__docusaurus"><div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__d [...]
+<script>document.documentElement.setAttribute("data-theme","light"),document.documentElement.setAttribute("data-theme-choice","light"),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("docusaurus-data-","data-");document.documentElement.setAttribute(a,e)}}catch(t){}}()</script><div id="__docusaurus"><div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__d [...]
+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 257c7d616..c88b0f703 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.5187a663.css">
-<script src="/assets/js/runtime~main.2fc346f3.js" defer="defer"></script>
-<script src="/assets/js/main.9d2d82c2.js" defer="defer"></script>
+<script src="/assets/js/runtime~main.33140780.js" defer="defer"></script>
+<script src="/assets/js/main.2460f850.js" defer="defer"></script>
</head>
<body>
<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>document.documentElement.setAttribute("data-theme","light"),document.documentElement.setAttribute("data-theme-choice","light"),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("docusaurus-data-","data-");document.documentElement.setAttribute(a,e)}}catch(t){}}()</script><div id="__docusaurus"><div class="blog-post-page-no-sidebar"><div role="region" aria-label="Skip to main content">< [...]
+<script>document.documentElement.setAttribute("data-theme","light"),document.documentElement.setAttribute("data-theme-choice","light"),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("docusaurus-data-","data-");document.documentElement.setAttribute(a,e)}}catch(t){}}()</script><div id="__docusaurus"><div class="blog-post-page-no-sidebar"><div role="region" aria-label="Skip to main content">< [...]
<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/pk-key-tables-log-cache-streaming/index.html b/blog/pk-key-tables-log-cache-streaming/index.html
index 6f20323e3..513794405 100644
--- a/blog/pk-key-tables-log-cache-streaming/index.html
+++ b/blog/pk-key-tables-log-cache-streaming/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.5187a663.css">
-<script src="/assets/js/runtime~main.2fc346f3.js" defer="defer"></script>
-<script src="/assets/js/main.9d2d82c2.js" defer="defer"></script>
+<script src="/assets/js/runtime~main.33140780.js" defer="defer"></script>
+<script src="/assets/js/main.2460f850.js" defer="defer"></script>
</head>
<body>
<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>document.documentElement.setAttribute("data-theme","light"),document.documentElement.setAttribute("data-theme-choice","light"),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("docusaurus-data-","data-");document.documentElement.setAttribute(a,e)}}catch(t){}}()</script><div id="__docusaurus"><div class="blog-post-page-no-sidebar"><div role="region" aria-label="Skip to main content">< [...]
+<script>document.documentElement.setAttribute("data-theme","light"),document.documentElement.setAttribute("data-theme-choice","light"),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("docusaurus-data-","data-");document.documentElement.setAttribute(a,e)}}catch(t){}}()</script><div id="__docusaurus"><div class="blog-post-page-no-sidebar"><div role="region" aria-label="Skip to main content">< [...]
Common architectures include combinations such as Kafka with Redis, or Debezium feeding changes into a key-value store.
While these patterns underpin a significant portion of production infrastructure, they also introduce <strong>complexity</strong>, <strong>fragility</strong>, and <strong>operational overhead</strong>.</p>
<p>Apache Fluss (Incubating) addresses this challenge with an elegant solution: <strong>Primary Key Tables (PK Tables)</strong>.
diff --git a/blog/releases/0.6/index.html b/blog/releases/0.6/index.html
index 6f7e9dded..f80ed4014 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.5187a663.css">
-<script src="/assets/js/runtime~main.2fc346f3.js" defer="defer"></script>
-<script src="/assets/js/main.9d2d82c2.js" defer="defer"></script>
+<script src="/assets/js/runtime~main.33140780.js" defer="defer"></script>
+<script src="/assets/js/main.2460f850.js" defer="defer"></script>
</head>
<body>
<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>document.documentElement.setAttribute("data-theme","light"),document.documentElement.setAttribute("data-theme-choice","light"),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("docusaurus-data-","data-");document.documentElement.setAttribute(a,e)}}catch(t){}}()</script><div id="__docusaurus"><div class="blog-post-page-no-sidebar"><div role="region" aria-label="Skip to main content">< [...]
+<script>document.documentElement.setAttribute("data-theme","light"),document.documentElement.setAttribute("data-theme-choice","light"),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("docusaurus-data-","data-");document.documentElement.setAttribute(a,e)}}catch(t){}}()</script><div id="__docusaurus"><div class="blog-post-page-no-sidebar"><div role="region" aria-label="Skip to main content">< [...]
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 c8bcb3ff8..d3682a36b 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.5187a663.css">
-<script src="/assets/js/runtime~main.2fc346f3.js" defer="defer"></script>
-<script src="/assets/js/main.9d2d82c2.js" defer="defer"></script>
+<script src="/assets/js/runtime~main.33140780.js" defer="defer"></script>
+<script src="/assets/js/main.2460f850.js" defer="defer"></script>
</head>
<body>
<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>document.documentElement.setAttribute("data-theme","light"),document.documentElement.setAttribute("data-theme-choice","light"),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("docusaurus-data-","data-");document.documentElement.setAttribute(a,e)}}catch(t){}}()</script><div id="__docusaurus"><div class="blog-post-page-no-sidebar"><div role="region" aria-label="Skip to main content">< [...]
+<script>document.documentElement.setAttribute("data-theme","light"),document.documentElement.setAttribute("data-theme-choice","light"),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("docusaurus-data-","data-");document.documentElement.setAttribute(a,e)}}catch(t){}}()</script><div id="__docusaurus"><div class="blog-post-page-no-sidebar"><div role="region" aria-label="Skip to main content">< [...]
<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/releases/0.8/index.html b/blog/releases/0.8/index.html
index dd5f1f7db..81471997a 100644
--- a/blog/releases/0.8/index.html
+++ b/blog/releases/0.8/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.5187a663.css">
-<script src="/assets/js/runtime~main.2fc346f3.js" defer="defer"></script>
-<script src="/assets/js/main.9d2d82c2.js" defer="defer"></script>
+<script src="/assets/js/runtime~main.33140780.js" defer="defer"></script>
+<script src="/assets/js/main.2460f850.js" defer="defer"></script>
</head>
<body>
<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>document.documentElement.setAttribute("data-theme","light"),document.documentElement.setAttribute("data-theme-choice","light"),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("docusaurus-data-","data-");document.documentElement.setAttribute(a,e)}}catch(t){}}()</script><div id="__docusaurus"><div class="blog-post-page-no-sidebar"><div role="region" aria-label="Skip to main content">< [...]
+<script>document.documentElement.setAttribute("data-theme","light"),document.documentElement.setAttribute("data-theme-choice","light"),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("docusaurus-data-","data-");document.documentElement.setAttribute(a,e)}}catch(t){}}()</script><div id="__docusaurus"><div class="blog-post-page-no-sidebar"><div role="region" aria-label="Skip to main content">< [...]
<p>🌊 We are excited to announce the official release of <strong>Apache Fluss (Incubating) 0.8</strong>!</p>
<p>This is our first release under the incubator of the Apache Software Foundation, marking a significant milestone in our journey to provide a robust streaming storage platform for real-time analytics.</p>
<p>Over the past four months, the community has made tremendous progress, delivering nearly 400 commits that push the boundaries of the Streaming Lakehouse ecosystem. This release includes multiple stability optimizations and introduces deeper integrations, performance breakthroughs, and next-generation stream processing capabilities. Highlights:</p>
diff --git a/blog/releases/0.9/index.html b/blog/releases/0.9/index.html
index 10c7b3d01..20af81209 100644
--- a/blog/releases/0.9/index.html
+++ b/blog/releases/0.9/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.5187a663.css">
-<script src="/assets/js/runtime~main.2fc346f3.js" defer="defer"></script>
-<script src="/assets/js/main.9d2d82c2.js" defer="defer"></script>
+<script src="/assets/js/runtime~main.33140780.js" defer="defer"></script>
+<script src="/assets/js/main.2460f850.js" defer="defer"></script>
</head>
<body>
<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>document.documentElement.setAttribute("data-theme","light"),document.documentElement.setAttribute("data-theme-choice","light"),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("docusaurus-data-","data-");document.documentElement.setAttribute(a,e)}}catch(t){}}()</script><div id="__docusaurus"><div class="blog-post-page-no-sidebar"><div role="region" aria-label="Skip to main content">< [...]
+<script>document.documentElement.setAttribute("data-theme","light"),document.documentElement.setAttribute("data-theme-choice","light"),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("docusaurus-data-","data-");document.documentElement.setAttribute(a,e)}}catch(t){}}()</script><div id="__docusaurus"><div class="blog-post-page-no-sidebar"><div role="region" aria-label="Skip to main content">< [...]
<p>🌊 We are excited to announce the official release of <strong>Apache Fluss (Incubating) 0.9</strong>!</p>
<p>This release marks a major milestone for the project. Fluss 0.9 significantly expands Fluss’s capabilities as a <strong>streaming storage system for real-time analytics, AI, and state-heavy streaming workloads</strong>, with a strong focus on:</p>
<ul>
@@ -231,7 +231,7 @@ Following the rebalancing operation, <strong>all metrics are evenly distributed<
<p>The Fluss community is committed to delivering a smooth upgrade experience. This 0.9 release maintains compatibility at the levels of network protocols and storage formats, with full bidirectional compatibility between clients and servers:</p>
<p>However, we changed some default behavior and added new features that may require adjustments in your applications and operational practices. Please refer to the <a href="https://fluss.apache.org/docs/0.9/maintenance/operations/upgrade-notes-0.9/" target="_blank" rel="noopener noreferrer" class="">upgrade notes</a> for a comprehensive list of adjustments to make and issues to check during the upgrading process.</p>
<p>For a detailed list of all changes in this release, please refer to the <a href="https://github.com/apache/fluss/releases/tag/v0.9.0-incubating" target="_blank" rel="noopener noreferrer" class="">release notes</a>.</p>
-<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="list-of-contributors">List of contributors<a href="#list-of-contributors" class="hash-link" aria-label="Direct link to List of contributors" title="Direct link to List of contributors" translate="no">