You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@fluss.apache.org by ja...@apache.org on 2025/07/01 15:54:24 UTC
(fluss-website) branch asf-site updated: Deploy website - based on 98c2f47f2deb702bbdbdb163cff49c64daeb4af3
This is an automated email from the ASF dual-hosted git repository.
jark 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 3f3266c Deploy website - based on 98c2f47f2deb702bbdbdb163cff49c64daeb4af3
3f3266c is described below
commit 3f3266c61b633e77d81f272c154271642065c1fb
Author: Jark Wu <ja...@apache.org>
AuthorDate: Tue Jul 1 23:53:30 2025 +0800
Deploy website - based on 98c2f47f2deb702bbdbdb163cff49c64daeb4af3
---
.DS_Store | Bin 0 -> 6148 bytes
.asf.yaml | 33 -
.nojekyll | 0
404.html | 27 +
assets/css/styles.3ca55d09.css | 1 +
...ervability-b1c7c2103cbbdea2b24816ff0d6f914d.zip | Bin 0 -> 15864 bytes
.../announce-9ab924e071ec69fe7af8765954f9e966.png | Bin 0 -> 985074 bytes
...chitecture-b318beb94d717f94d6fe64b6303e79ab.png | Bin 0 -> 1377946 bytes
...chitecture-c818a634d5e3360846b1ee299ff8df2e.png | Bin 0 -> 331654 bytes
...background-0dd420cc202b6881c3fb4529c48f05a8.jpg | Bin 0 -> 577329 bytes
.../banner-5523bd3a3f5145b15e36c6bfb46796be.png | Bin 0 -> 683060 bytes
.../banner-8cc4ea9295caf8358e14adf7a69beb01.png | Bin 0 -> 1597598 bytes
.../banner-a09e6bac14dc2bee3dbc698347cb2d7f.png | Bin 0 -> 1334623 bytes
...lored_logo-570a85568f48c50f3ce9cdcfc57c8670.png | Bin 0 -> 45184 bytes
...mpression1-0b666a1467321b28376db725380eda3c.jpg | Bin 0 -> 76902 bytes
...mpression2-c0feecf4a8fbff819c1ad37ce03ca6e9.jpg | Bin 0 -> 79261 bytes
...mpression3-1f5de9eec6dd66394a793f26395a8f49.jpg | Bin 0 -> 95320 bytes
...ganization-c63fd910ab4f86359e60234f855bbb74.png | Bin 0 -> 270646 bytes
...ganization-e23ab4af273d5615b2da661138af36dd.png | Bin 0 -> 279481 bytes
...delta-join-ad3cf73fc7f3f01e306ad02fd765d26d.jpg | Bin 0 -> 187565 bytes
...t_overview-9108e1465903f9424cddd023a8301fb2.png | Bin 0 -> 294231 bytes
...t_overview-e08f87d880eb2d10920b7f34ccbd9fa1.png | Bin 0 -> 185222 bytes
.../ff_os-2589690ef465b4d2c76c7861438ad18b.png | Bin 0 -> 2004705 bytes
.../fluss-9455a8d9e5ebfcf475a714923665b1c7.png | Bin 0 -> 198902 bytes
.../image1-6acb85f09ad799d93582a37896aabf30.png | Bin 0 -> 896951 bytes
.../image2-b9a57e1c35eb09c32fa4fcd07406ceeb.png | Bin 0 -> 2673225 bytes
.../image3-37c9a30c044c5afbc6e35fa21c1793bc.png | Bin 0 -> 946276 bytes
.../image4-c4082ae4730f49472a0414543ab5075a.png | Bin 0 -> 160229 bytes
.../image5-7b6a1c8656ea141b803b8787e89d75df.png | Bin 0 -> 1460538 bytes
.../image6-ec1c384b777aef0f617d3fcb08a5e39e.png | Bin 0 -> 418612 bytes
.../image7-246c5eae97745ed3ae9872e84a86b134.png | Bin 0 -> 743331 bytes
.../img1-163f1412a1ed7b661686302df5bf9edb.png | Bin 0 -> 162433 bytes
.../img1-591c05a64a0e27a33a3ce5776391d92d.jpg | Bin 0 -> 539082 bytes
.../img1-a29d423ce0b5f952b79ad2babb903cf5.jpg | Bin 0 -> 588711 bytes
.../img2-846063bd092bc571aad305ae7253a190.jpg | Bin 0 -> 454768 bytes
.../img2-86b0eb7b0f26884f8ead16dc4a8db648.png | Bin 0 -> 237274 bytes
.../img2-d2d1a314768a1be3da0308e20851d3f3.jpg | Bin 0 -> 471126 bytes
.../img3-32732f50a5420dad7d1dd6c5b3d17d6f.jpg | Bin 0 -> 526324 bytes
.../img3-d0ea956fb83807118c4d522bdd7b30f4.png | Bin 0 -> 176746 bytes
.../img3-f76df2882b217d4aa58efba2edae07d8.jpg | Bin 0 -> 405077 bytes
.../img4-06aab50ae6bb5a5df5cc0e2658815c1f.png | Bin 0 -> 143425 bytes
.../img4-5a57c638bb5dd478a86a9fcd1683734f.jpg | Bin 0 -> 493022 bytes
.../img4-80846362d40e3239bfcd92216276b72d.jpg | Bin 0 -> 498533 bytes
.../img5-36f56d95c22f50252c6a5caedbfed1d4.png | Bin 0 -> 168941 bytes
.../img5-c1bedf1a8c60844ffd67f77f722157f9.jpg | Bin 0 -> 585648 bytes
.../img5-e185731d5e249a6c80b962b77b5a16ad.jpg | Bin 0 -> 494481 bytes
.../img6-3e455650eb36e97091211441c91b48ac.jpg | Bin 0 -> 378941 bytes
.../img6-4741286b7e5d1410d5a8d7036e3cad8d.jpg | Bin 0 -> 428351 bytes
.../img6-5fdec641b3032d1c0f236cf990d914da.png | Bin 0 -> 120940 bytes
.../img7-06886bca9797751895c82d707cb04b2d.jpg | Bin 0 -> 476875 bytes
.../img7-8b8e86a6e036ca0f37b6d53f8fc5ae77.png | Bin 0 -> 129012 bytes
.../img8-87cfb5887e9a49febaacd805de5216fe.jpg | Bin 0 -> 301463 bytes
.../img9-fb689d41f612ef840508c4c20399822c.jpg | Bin 0 -> 610480 bytes
...o_overview-3a76e21a805e31d6bbf8e32563a22eb2.jpg | Bin 0 -> 601260 bytes
...ng_service-4509c1a4b51c6821c0fe622cdda534e4.png | Bin 0 -> 224178 bytes
.../overview-255047ec7648f12c63660b40d1147c86.png | Bin 0 -> 153634 bytes
...ial_update-d529bf24211a76b31444bc7918872d59.png | Bin 0 -> 119475 bytes
.../read_perf-66abe9aa4ee1bf9ef52dc10c59072c0f.jpg | Bin 0 -> 103397 bytes
...treamhouse-5a2a3447bdfe72cc96b6ffa7e1eee39e.png | Bin 0 -> 250947 bytes
...treamhouse-7b7f1260fc996ca89b50dbb9454584ab.png | Bin 0 -> 243122 bytes
...treamhouse-8069e2c65c0cf01ec3db98818555089a.png | Bin 0 -> 231195 bytes
...aming_join-761699227c5633f3575e2036b9e2ac61.png | Bin 0 -> 130881 bytes
...ed-storage-07376e693fff78ba48fa2cb58a1aca67.png | Bin 0 -> 146759 bytes
...ed-storage-7a1d1d0d91fa9b682bc80cb2713831a3.png | Bin 0 -> 88982 bytes
...ed-storage-d4ec96e1b2955c7786ce217a19fe91b5.png | Bin 0 -> 87502 bytes
...write_perf-25c062766e117f2c092a79653cf69a85.jpg | Bin 0 -> 56630 bytes
assets/js/0159e4b3.a1d1c71d.js | 1 +
assets/js/019059a8.5b3a9fd0.js | 1 +
assets/js/01a85c17.97728021.js | 1 +
assets/js/02e30128.5892e7ee.js | 1 +
assets/js/03d2caf8.e98329fa.js | 1 +
assets/js/04b1c040.de2a0d3b.js | 1 +
assets/js/05418681.6fc95e8e.js | 1 +
assets/js/061ac8d1.3c858347.js | 1 +
assets/js/063063cd.9ae7fa2b.js | 1 +
assets/js/08af526d.be0d7b34.js | 1 +
assets/js/0be3fcda.6327730a.js | 1 +
assets/js/0cac70d5.5a20b7dd.js | 1 +
assets/js/0d32679b.d98582c4.js | 1 +
assets/js/0e04ef0e.c88e745d.js | 1 +
assets/js/0e384e19.767d16de.js | 1 +
assets/js/0f7eeec5.b8867f3d.js | 1 +
assets/js/1099.428aa052.js | 1 +
assets/js/11b43341.30e7d45b.js | 1 +
assets/js/12079287.d61bbd17.js | 1 +
assets/js/121d09c9.2b00b45d.js | 1 +
assets/js/155d5593.743d5e64.js | 1 +
assets/js/16fc9cae.cb8f075d.js | 1 +
assets/js/17301193.a4fb931c.js | 1 +
assets/js/17896441.b1dee11c.js | 1 +
assets/js/18d3069c.e597f833.js | 1 +
assets/js/1a4e3797.970f8127.js | 1 +
assets/js/1b7d0bf1.477cbc4b.js | 1 +
assets/js/1c857efc.7340880a.js | 1 +
assets/js/1df93b7f.e67b8626.js | 1 +
assets/js/1e7fbca2.72c47230.js | 1 +
assets/js/1f391b9e.c4da6e31.js | 1 +
assets/js/1f864603.9c08aa17.js | 1 +
assets/js/2063472f.cada080b.js | 1 +
assets/js/21ca1076.fdb09e15.js | 1 +
assets/js/2237.c731bb05.js | 1 +
assets/js/2282b9e6.ffe270ef.js | 1 +
assets/js/2351863b.039e294e.js | 1 +
assets/js/2362.71b193b1.js | 1 +
assets/js/23b051ad.94430174.js | 1 +
assets/js/2421e55a.81216e2f.js | 1 +
assets/js/26fffdeb.6a066b8e.js | 1 +
assets/js/27606b7d.9f9fe63f.js | 1 +
assets/js/2f1b6021.a871f4dc.js | 1 +
assets/js/2f611e4f.7b4fb968.js | 1 +
assets/js/2fcb5bc8.9de2a3df.js | 1 +
assets/js/30cd2908.f58c7c7f.js | 1 +
assets/js/3383ef6c.2b552a69.js | 1 +
assets/js/34b70234.f2e26d48.js | 1 +
assets/js/3592d2f2.a2c747f9.js | 1 +
assets/js/36994c47.caee855f.js | 1 +
assets/js/36a7f4b5.0c490199.js | 1 +
assets/js/3b7198be.9de7aa70.js | 1 +
assets/js/3cd58720.8859d5d7.js | 1 +
assets/js/3d4c8ad2.ec6fd162.js | 1 +
assets/js/416.33bb0ef6.js | 1 +
assets/js/41a78b98.c3d2e9f8.js | 1 +
assets/js/42ce4c3f.5d8dc95f.js | 1 +
assets/js/4334.59d2d31f.js | 1 +
assets/js/458b5a55.1c0f6d2d.js | 1 +
assets/js/47a7ac9f.7ddcdf88.js | 1 +
assets/js/4a4f9f4e.079729e8.js | 1 +
assets/js/4adbe500.508fb63a.js | 1 +
assets/js/4b45c76d.48887489.js | 1 +
assets/js/4c32ba49.829e6eea.js | 1 +
assets/js/4d1f660e.fe58eb7b.js | 1 +
assets/js/4f3276ea.822436cb.js | 1 +
assets/js/5142b284.0055ce46.js | 1 +
assets/js/53b982b6.ba7f6e03.js | 1 +
assets/js/53e6ccc4.5193c29f.js | 1 +
assets/js/53f4d36d.56a9ebab.js | 1 +
assets/js/543bd0fc.57a6a8d0.js | 1 +
assets/js/551ad8d7.52cd1fd1.js | 1 +
assets/js/55bbe4da.1b8fb9ee.js | 1 +
assets/js/570364a4.4772b91e.js | 1 +
assets/js/578e9f93.35ce0d1d.js | 1 +
assets/js/58eba370.2205147a.js | 1 +
assets/js/59852834.2244b34d.js | 1 +
assets/js/5ae8404d.2a206122.js | 1 +
assets/js/5b51c36f.29d7209f.js | 1 +
assets/js/5b5e36b9.fe6c15e3.js | 1 +
assets/js/5c1b820e.6b9a6e84.js | 1 +
assets/js/5c9f4624.63b805a6.js | 1 +
assets/js/5e95c892.b0b1bb64.js | 1 +
assets/js/5eb2b302.c50021d8.js | 1 +
assets/js/5f03234c.db475889.js | 1 +
assets/js/61744635.663e727f.js | 1 +
assets/js/61e3d4cc.5a748462.js | 1 +
assets/js/621db11d.11d26f97.js | 1 +
assets/js/62a7ca7a.7cbc4cfd.js | 1 +
assets/js/6633675b.152a5aa5.js | 1 +
assets/js/671ce0dc.2e85b86f.js | 1 +
assets/js/67628f41.3cebbfec.js | 1 +
assets/js/6872a836.83c6a7a9.js | 1 +
assets/js/6875c492.6005760d.js | 1 +
assets/js/6892f617.8d5c279a.js | 1 +
assets/js/6ada9c37.e19625ea.js | 1 +
assets/js/6e1c1147.ad5293df.js | 1 +
assets/js/6f39ec98.45eeb395.js | 1 +
assets/js/6f951a55.51feb855.js | 1 +
assets/js/6fa4a995.52b891b8.js | 1 +
assets/js/7042dea6.aef4482b.js | 1 +
assets/js/7341f5c8.ba95cdab.js | 1 +
assets/js/74c0211a.a89d76c6.js | 1 +
assets/js/7518.ce485ab7.js | 1 +
assets/js/75814064.622992bb.js | 1 +
assets/js/766a25e8.14effa8a.js | 1 +
assets/js/793af37f.de43513f.js | 1 +
assets/js/7a67eafe.240f8edf.js | 1 +
assets/js/7b6674ff.4e53dd13.js | 1 +
assets/js/7eb6f3f2.640ea4da.js | 1 +
assets/js/7fff8ac1.a485420d.js | 1 +
assets/js/814f3328.9279044d.js | 1 +
assets/js/8158.9845449e.js | 1 +
assets/js/819b95c6.6f199823.js | 1 +
assets/js/81a7527c.5e5d99c5.js | 1 +
assets/js/82b3d388.b7e34806.js | 1 +
assets/js/831425ee.44b4dde7.js | 1 +
assets/js/84700fe1.5f474ed8.js | 1 +
assets/js/87ceda19.bb5e8c0e.js | 1 +
assets/js/8913.091ca4da.js | 1 +
assets/js/8a1416ba.b2413a8e.js | 1 +
assets/js/8b1cd994.de28797f.js | 1 +
assets/js/8d16c60e.c0c98296.js | 1 +
assets/js/8e2e4f36.ea6d803d.js | 1 +
assets/js/8e9d555c.8e8cb9d1.js | 1 +
assets/js/8f16bea6.f9641cb2.js | 1 +
assets/js/95c5923f.348ace97.js | 1 +
assets/js/95cf59a1.fa0c2a42.js | 1 +
assets/js/9730.01eafbca.js | 1 +
assets/js/993f72ea.52a8f949.js | 1 +
assets/js/994319c2.80968371.js | 1 +
assets/js/9a4f2fbf.f2ed9082.js | 1 +
assets/js/9a99019d.b44119d4.js | 1 +
assets/js/9cc26f6c.49043a70.js | 1 +
assets/js/9cd743c9.73105920.js | 1 +
assets/js/9df7d16b.b61beae9.js | 1 +
assets/js/9e4087bc.359656f3.js | 1 +
assets/js/9ed1c870.946eb50a.js | 1 +
assets/js/a2263507.d08e162d.js | 1 +
assets/js/a41cbb43.5679dc01.js | 1 +
assets/js/a468dcbb.bcbf443b.js | 1 +
assets/js/a6aa9e1f.ad1370f0.js | 1 +
assets/js/a7456010.c3e92d8b.js | 1 +
assets/js/a78cedb8.2f79dec9.js | 1 +
assets/js/a7bd4aaa.66cafdc7.js | 1 +
assets/js/a94703ab.c15b0b34.js | 1 +
assets/js/aa2d6c3d.9f46bb50.js | 1 +
assets/js/aada36dd.34931ef7.js | 1 +
assets/js/ab240437.05be38ae.js | 1 +
assets/js/aba21aa0.71167bed.js | 1 +
assets/js/abf5c5c3.7ac3d297.js | 1 +
assets/js/acecf23e.5f6d9927.js | 1 +
assets/js/add778d1.3cb6f6e2.js | 1 +
assets/js/add8cc11.716b17ab.js | 1 +
assets/js/aeb4150a.f5df3b14.js | 1 +
assets/js/b0a08aa7.88c4a943.js | 1 +
assets/js/b405f593.c44a49bf.js | 1 +
assets/js/b4e94af8.1db02b2d.js | 1 +
assets/js/b56224f4.fade629f.js | 1 +
assets/js/b689a7df.b5208a49.js | 1 +
assets/js/b86fbb72.6dcdacfd.js | 1 +
assets/js/b9d28c39.c7f955fb.js | 1 +
assets/js/bac2b925.0799462b.js | 1 +
assets/js/bcac6c77.2f068085.js | 1 +
assets/js/bdf1472e.711c56ac.js | 1 +
assets/js/bdfb83fe.e7ede2d1.js | 1 +
assets/js/c018ef01.b75f04c7.js | 1 +
assets/js/c141421f.483a0d8b.js | 1 +
assets/js/c143539c.d6a6ec00.js | 1 +
assets/js/c1d17d03.e515a5ab.js | 1 +
assets/js/c603b338.4e7d556b.js | 1 +
assets/js/c642c7e8.305b183a.js | 1 +
assets/js/c7122660.f857c136.js | 1 +
assets/js/c88e3dd6.92065d26.js | 1 +
assets/js/ca57b231.0b2d4ab6.js | 1 +
assets/js/ca81dda5.75ddc20a.js | 1 +
assets/js/cc72a6c3.99f02ce5.js | 1 +
assets/js/ccc49370.195c2233.js | 1 +
assets/js/cd3822f9.ca849a85.js | 1 +
assets/js/cddbb034.45d1dfd2.js | 1 +
assets/js/ce40231b.8434e747.js | 1 +
assets/js/cfedf80e.2ed761d9.js | 1 +
assets/js/d0be6a34.7f9b7175.js | 1 +
assets/js/d24ecfdc.d1c7cff7.js | 1 +
assets/js/d2806a11.06459ec3.js | 1 +
assets/js/d2da4636.451d60b1.js | 1 +
assets/js/d38c956e.5c89b423.js | 1 +
assets/js/d45d71f1.bebf8efd.js | 1 +
assets/js/d46a98c6.57028b53.js | 1 +
assets/js/d4e85a9d.c53f4fc7.js | 1 +
assets/js/d5c4569c.5cdcfaa4.js | 1 +
assets/js/d717c9f5.1fb05db0.js | 1 +
assets/js/d75cfc85.c76bbcfb.js | 1 +
assets/js/d8b46579.5764ef5d.js | 1 +
assets/js/d9129b64.a2436b54.js | 1 +
assets/js/d97251e6.bc2720a2.js | 1 +
assets/js/da5fc804.c7d719c4.js | 1 +
assets/js/db256351.da20f1b7.js | 1 +
assets/js/db5d1f48.bb8274e9.js | 1 +
assets/js/dbfc4782.8f7a7243.js | 1 +
assets/js/dd04b75e.5bd3fbc9.js | 1 +
assets/js/de008c00.f2be1a26.js | 1 +
assets/js/ded36ae0.ae2899af.js | 1 +
assets/js/df47852f.7970589b.js | 1 +
assets/js/dff54d80.69b506dc.js | 1 +
assets/js/e01b5f8c.d0862de7.js | 1 +
assets/js/e025f2f4.c31d48b8.js | 1 +
assets/js/e0719818.a6531520.js | 1 +
assets/js/e0e92cc1.e0c24eb8.js | 1 +
assets/js/e2cc254d.0c77013b.js | 1 +
assets/js/e2f56b1d.a06a6f0f.js | 1 +
assets/js/e5327ea2.20e04a09.js | 1 +
assets/js/e7d4f839.40c97085.js | 1 +
assets/js/e8397ce1.a99a757c.js | 1 +
assets/js/e8a73003.2f97a716.js | 1 +
assets/js/e8ef73cd.867ed824.js | 1 +
assets/js/eb05eaac.1bab7ae5.js | 1 +
assets/js/eb5be0bf.0656c776.js | 1 +
assets/js/ee8ec7f8.f759db31.js | 1 +
assets/js/f39116bd.e9352550.js | 1 +
assets/js/f47dd6e5.daa143cf.js | 1 +
assets/js/f593d43a.87812e5d.js | 1 +
assets/js/f5e8f464.3473abca.js | 1 +
assets/js/f79b4041.5490eddd.js | 1 +
assets/js/f8dbdc9a.f5e2af1b.js | 1 +
assets/js/fe66138b.b2cdef42.js | 1 +
assets/js/ff2ceeff.06a4dc1f.js | 1 +
assets/js/ffad4089.a4b4fe06.js | 1 +
assets/js/main.a06cb6b9.js | 2 +
assets/js/main.a06cb6b9.js.LICENSE.txt | 64 +
assets/js/runtime~main.264c6f6f.js | 1 +
blog/archive/index.html | 27 +
blog/atom.css | 75 +
blog/atom.xml | 799 ++++
blog/atom.xsl | 92 +
blog/authors/index.html | 27 +
blog/fluss-intro/index.html | 94 +
blog/fluss-open-source/index.html | 56 +
blog/index.html | 60 +
blog/partial-updates/index.html | 111 +
blog/releases/0.6/index.html | 150 +
blog/releases/0.7/index.html | 143 +
blog/rss.css | 75 +
blog/rss.xml | 765 ++++
blog/rss.xsl | 86 +
blog/tags/index.html | 27 +
blog/tags/releases/index.html | 32 +
blog/unified-streaming-lakehouse/index.html | 198 +
blog/unveil-fluss-logo/index.html | 63 +
blog/why-fluss/index.html | 88 +
community/dev/building/index.html | 56 +
community/dev/ide-setup/index.html | 169 +
community/fluss-logos/index.html | 56 +
.../how-to-contribute/contribute-code/index.html | 75 +
.../how-to-contribute/contribute-docs/index.html | 137 +
.../review-pull-requests/index.html | 57 +
community/how-to-release/index.html | 28 +
community/welcome/index.html | 43 +
docs/0.5/concepts/architecture/index.html | 68 +
docs/0.5/dev/building/index.html | 43 +
docs/0.5/dev/ide-setup/index.html | 151 +
docs/0.5/engine-flink/ddl/index.html | 63 +
docs/0.5/engine-flink/getting-started/index.html | 92 +
docs/0.5/engine-flink/lookups/index.html | 44 +
docs/0.5/engine-flink/reads/index.html | 77 +
docs/0.5/engine-flink/writes/index.html | 53 +
.../deploying-distributed-cluster/index.html | 98 +
.../deploying-local-cluster/index.html | 60 +
.../deploying-with-docker/index.html | 135 +
docs/0.5/install-deploy/overview/index.html | 49 +
docs/0.5/intro/index.html | 42 +
docs/0.5/maintenance/configuration/index.html | 73 +
docs/0.5/maintenance/filesystems/hdfs/index.html | 34 +
docs/0.5/maintenance/filesystems/oss/index.html | 42 +
.../maintenance/filesystems/overview/index.html | 51 +
docs/0.5/maintenance/filesystems/s3/index.html | 31 +
docs/0.5/maintenance/logging/index.html | 74 +
docs/0.5/maintenance/metric-reporters/index.html | 67 +
docs/0.5/maintenance/monitor-metrics/index.html | 111 +
.../tiered-storage/lakehouse-storage/index.html | 53 +
.../maintenance/tiered-storage/overview/index.html | 35 +
.../tiered-storage/remote-storage/index.html | 53 +
docs/0.5/quickstart/flink/index.html | 165 +
.../integrate-data-lakes/paimon/index.html | 70 +
docs/0.5/streaming-lakehouse/overview/index.html | 60 +
.../data-distribution/bucketing/index.html | 45 +
.../data-distribution/partitioning/index.html | 55 +
.../table-design/data-distribution/ttl/index.html | 30 +
docs/0.5/table-design/data-types/index.html | 29 +
docs/0.5/table-design/overview/index.html | 72 +
.../table-design/table-types/log-table/index.html | 49 +
.../table-design/table-types/pk-table/index.html | 55 +
docs/0.6/concepts/architecture/index.html | 68 +
docs/0.6/engine-flink/ddl/index.html | 95 +
docs/0.6/engine-flink/getting-started/index.html | 96 +
docs/0.6/engine-flink/lookups/index.html | 87 +
docs/0.6/engine-flink/options/index.html | 54 +
docs/0.6/engine-flink/reads/index.html | 86 +
docs/0.6/engine-flink/writes/index.html | 58 +
.../deploying-distributed-cluster/index.html | 98 +
.../deploying-local-cluster/index.html | 60 +
.../deploying-with-docker/index.html | 134 +
docs/0.6/install-deploy/overview/index.html | 49 +
docs/0.6/intro/index.html | 42 +
docs/0.6/maintenance/configuration/index.html | 55 +
docs/0.6/maintenance/filesystems/hdfs/index.html | 34 +
docs/0.6/maintenance/filesystems/oss/index.html | 42 +
.../maintenance/filesystems/overview/index.html | 51 +
docs/0.6/maintenance/filesystems/s3/index.html | 31 +
.../maintenance/observability/logging/index.html | 75 +
.../observability/metric-reporters/index.html | 67 +
.../observability/monitor-metrics/index.html | 111 +
.../observability/quickstart/index.html | 77 +
.../tiered-storage/lakehouse-storage/index.html | 53 +
.../maintenance/tiered-storage/overview/index.html | 35 +
.../tiered-storage/remote-storage/index.html | 53 +
docs/0.6/quickstart/flink/index.html | 166 +
.../integrate-data-lakes/paimon/index.html | 72 +
docs/0.6/streaming-lakehouse/overview/index.html | 60 +
.../data-distribution/bucketing/index.html | 45 +
.../data-distribution/partitioning/index.html | 60 +
.../table-design/data-distribution/ttl/index.html | 30 +
docs/0.6/table-design/data-types/index.html | 29 +
docs/0.6/table-design/overview/index.html | 72 +
.../table-design/table-types/log-table/index.html | 83 +
.../table-design/table-types/pk-table/index.html | 85 +
.../pk-table/merge-engines/first-row/index.html | 39 +
.../table-types/pk-table/merge-engines/index.html | 36 +
.../pk-table/merge-engines/versioned/index.html | 50 +
docs/apis/java-client/index.html | 85 +
docs/concepts/architecture/index.html | 68 +
docs/engine-flink/datastream/index.html | 147 +
docs/engine-flink/ddl/index.html | 101 +
docs/engine-flink/getting-started/index.html | 98 +
docs/engine-flink/lookups/index.html | 87 +
docs/engine-flink/options/index.html | 54 +
docs/engine-flink/reads/index.html | 131 +
docs/engine-flink/writes/index.html | 58 +
.../deploying-distributed-cluster/index.html | 103 +
.../deploying-local-cluster/index.html | 60 +
.../deploying-with-docker/index.html | 110 +
docs/install-deploy/overview/index.html | 49 +
docs/intro/index.html | 56 +
docs/maintenance/configuration/index.html | 58 +
docs/maintenance/filesystems/hdfs/index.html | 34 +
docs/maintenance/filesystems/oss/index.html | 48 +
docs/maintenance/filesystems/overview/index.html | 51 +
docs/maintenance/filesystems/s3/index.html | 31 +
docs/maintenance/observability/logging/index.html | 75 +
.../observability/metric-reporters/index.html | 67 +
.../observability/monitor-metrics/index.html | 115 +
.../observability/quickstart/index.html | 75 +
docs/maintenance/operations/racks/index.html | 45 +
docs/maintenance/operations/upgrading/index.html | 74 +
.../tiered-storage/lakehouse-storage/index.html | 81 +
.../maintenance/tiered-storage/overview/index.html | 35 +
.../tiered-storage/remote-storage/index.html | 53 +
docs/next/apis/java-client/index.html | 85 +
docs/next/concepts/architecture/index.html | 68 +
docs/next/engine-flink/datastream/index.html | 147 +
docs/next/engine-flink/ddl/index.html | 101 +
docs/next/engine-flink/getting-started/index.html | 98 +
docs/next/engine-flink/lookups/index.html | 87 +
docs/next/engine-flink/options/index.html | 54 +
docs/next/engine-flink/reads/index.html | 131 +
docs/next/engine-flink/writes/index.html | 58 +
.../deploying-distributed-cluster/index.html | 103 +
.../deploying-local-cluster/index.html | 60 +
.../deploying-with-docker/index.html | 110 +
docs/next/install-deploy/overview/index.html | 49 +
docs/next/intro/index.html | 56 +
docs/next/maintenance/configuration/index.html | 58 +
docs/next/maintenance/filesystems/hdfs/index.html | 34 +
docs/next/maintenance/filesystems/oss/index.html | 48 +
.../maintenance/filesystems/overview/index.html | 51 +
docs/next/maintenance/filesystems/s3/index.html | 31 +
.../maintenance/observability/logging/index.html | 75 +
.../observability/metric-reporters/index.html | 67 +
.../observability/monitor-metrics/index.html | 115 +
.../observability/quickstart/index.html | 75 +
docs/next/maintenance/operations/racks/index.html | 45 +
.../maintenance/operations/upgrading/index.html | 74 +
.../tiered-storage/lakehouse-storage/index.html | 81 +
.../maintenance/tiered-storage/overview/index.html | 35 +
.../tiered-storage/remote-storage/index.html | 53 +
docs/next/quickstart/flink/index.html | 168 +
docs/next/quickstart/security/index.html | 161 +
docs/next/security/authentication/index.html | 77 +
docs/next/security/authorization/index.html | 84 +
docs/next/security/overview/index.html | 115 +
.../integrate-data-lakes/paimon/index.html | 72 +
docs/next/streaming-lakehouse/overview/index.html | 60 +
.../data-distribution/bucketing/index.html | 45 +
.../data-distribution/partitioning/index.html | 70 +
.../table-design/data-distribution/ttl/index.html | 30 +
docs/next/table-design/data-types/index.html | 29 +
docs/next/table-design/overview/index.html | 72 +
.../table-design/table-types/log-table/index.html | 83 +
.../table-design/table-types/pk-table/index.html | 87 +
.../pk-table/merge-engines/default/index.html | 33 +
.../pk-table/merge-engines/first-row/index.html | 39 +
.../table-types/pk-table/merge-engines/index.html | 36 +
.../pk-table/merge-engines/versioned/index.html | 50 +
docs/quickstart/flink/index.html | 168 +
docs/quickstart/security/index.html | 161 +
docs/security/authentication/index.html | 77 +
docs/security/authorization/index.html | 84 +
docs/security/overview/index.html | 115 +
.../integrate-data-lakes/paimon/index.html | 72 +
docs/streaming-lakehouse/overview/index.html | 60 +
.../data-distribution/bucketing/index.html | 45 +
.../data-distribution/partitioning/index.html | 70 +
docs/table-design/data-distribution/ttl/index.html | 30 +
docs/table-design/data-types/index.html | 29 +
docs/table-design/overview/index.html | 72 +
docs/table-design/table-types/log-table/index.html | 83 +
docs/table-design/table-types/pk-table/index.html | 87 +
.../pk-table/merge-engines/default/index.html | 33 +
.../pk-table/merge-engines/first-row/index.html | 39 +
.../table-types/pk-table/merge-engines/index.html | 36 +
.../pk-table/merge-engines/versioned/index.html | 50 +
downloads/index.html | 77 +
img/.DS_Store | Bin 0 -> 6148 bytes
img/background.jpg | Bin 0 -> 577329 bytes
img/banner.png | Bin 0 -> 649744 bytes
img/feature_changelog.svg | 53 +
img/feature_column.svg | 38 +
img/feature_lake.svg | 36 +
img/feature_lookup.svg | 36 +
img/feature_query.svg | 37 +
img/feature_real_time.svg | 36 +
img/feature_update.svg | 42 +
img/fluss.png | Bin 0 -> 198902 bytes
img/github_icon.svg | 21 +
img/logo/.DS_Store | Bin 0 -> 6148 bytes
img/logo/fluss_favicon.svg | 19 +
img/logo/logo_overview.jpg | Bin 0 -> 601260 bytes
img/logo/png/.DS_Store | Bin 0 -> 6148 bytes
img/logo/png/black_outline.png | Bin 0 -> 29923 bytes
img/logo/png/black_outline_notext.png | Bin 0 -> 31082 bytes
img/logo/png/colored_logo.png | Bin 0 -> 45184 bytes
img/logo/png/colored_logo_notext.png | Bin 0 -> 68924 bytes
img/logo/png/white_color_logo.png | Bin 0 -> 54294 bytes
img/logo/png/white_color_logo_notext.png | Bin 0 -> 61041 bytes
img/logo/png/white_filled.png | Bin 0 -> 38091 bytes
img/logo/png/white_filled_notext.png | Bin 0 -> 49183 bytes
img/logo/svg/.DS_Store | Bin 0 -> 6148 bytes
img/logo/svg/black_outline.svg | 33 +
img/logo/svg/black_outline_notext.svg | 19 +
img/logo/svg/colored_logo.svg | 19 +
img/logo/svg/colored_logo_notext.svg | 19 +
img/logo/svg/white_color_logo.svg | 19 +
img/logo/svg/white_color_logo_notext.svg | 19 +
img/logo/svg/white_filled.svg | 20 +
img/logo/svg/white_filled_notext.svg | 19 +
img/slack_icon.svg | 21 +
index.html | 27 +
manifest.json | 16 +
opensearch.xml | 11 +
roadmap/index.html | 72 +
search/index.html | 27 +
sitemap.xml | 1 +
sw.js | 4622 ++++++++++++++++++++
sw.js.map | 1 +
530 files changed, 20659 insertions(+), 33 deletions(-)
diff --git a/.DS_Store b/.DS_Store
new file mode 100644
index 0000000..b961cce
Binary files /dev/null and b/.DS_Store differ
diff --git a/.asf.yaml b/.asf.yaml
deleted file mode 100644
index c134c08..0000000
--- a/.asf.yaml
+++ /dev/null
@@ -1,33 +0,0 @@
-# Licensed to the Apache Software Foundation (ASF) under one
-# or more contributor license agreements. See the NOTICE file
-# distributed with this work for additional information
-# regarding copyright ownership. The ASF licenses this file
-# to you under the Apache License, Version 2.0 (the
-# "License"); you may not use this file except in compliance
-# with the License. You may obtain a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing,
-# software distributed under the License is distributed on an
-# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-# KIND, either express or implied. See the License for the
-# specific language governing permissions and limitations
-# under the License.
-
-github:
- description: "Apache Fluss Website"
- homepage: https://fluss.apache.org/
- features:
- issues: false
- projects: false
- wiki: false
- labels:
- - fluss
- enabled_merge_buttons:
- squash: true
- merge: false
- rebase: false
-
-publish:
- whoami: asf-site
\ No newline at end of file
diff --git a/.nojekyll b/.nojekyll
new file mode 100644
index 0000000..e69de29
diff --git a/404.html b/404.html
new file mode 100644
index 0000000..3b24bbb
--- /dev/null
+++ b/404.html
@@ -0,0 +1,27 @@
+<!doctype html>
+<html lang="en" dir="ltr" class="plugin-native plugin-id-default" data-has-hydrated="false">
+<head>
+<meta charset="UTF-8">
+<meta name="generator" content="Docusaurus v3.8.1">
+<title data-rh="true">Page Not Found | Fluss</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/docusaurus-social-card.jpg"><meta data-rh="true" name="twitter:image" content="https://fluss.apache.org/img/docusaurus-social-card.jpg"><meta data-rh="true" property="og:url" content="https://fluss.apache.org [...]
+<link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Fluss Atom Feed">
+
+
+
+
+<link rel="search" type="application/opensearchdescription+xml" title="Fluss" href="/opensearch.xml">
+
+<link rel="icon" href="/img/logo.svg">
+<link rel="manifest" href="/manifest.json">
+<meta name="theme-color" content="#0071e3"><link rel="stylesheet" href="/assets/css/styles.3ca55d09.css">
+<script src="/assets/js/runtime~main.264c6f6f.js" defer="defer"></script>
+<script src="/assets/js/main.a06cb6b9.js" defer="defer"></script>
+</head>
+<body class="navigation-with-keyboard">
+<svg xmlns="http://www.w3.org/2000/svg" style="display: none;"><defs>
+<symbol id="theme-svg-external-link" viewBox="0 0 24 24"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"/></symbol>
+</defs></svg>
+<script>!function(){var t="light";var e=function(){try{return new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}}()||function(){try{return window.localStorage.getItem("theme")}catch(t){}}();document.documentElement.setAttribute("data-theme",e||t),document.documentElement.setAttribute("data-theme-choice",e||t)}(),function(){try{const c=new URLSearchParams(window.location.search).entries();for(var[t,e]of c)if(t.startsWith("docusaurus-data-")){var a=t.replace("do [...]
+ Apache®, Apache Flink®, Flink®, Apache Kafka®, Kafka®, Spark® and associated open source project names and logos are trademarks of the Apache Software Foundation.</div></div></div></footer></div>
+</body>
+</html>
\ No newline at end of file
diff --git a/assets/css/styles.3ca55d09.css b/assets/css/styles.3ca55d09.css
new file mode 100644
index 0000000..2f7f042
--- /dev/null
+++ b/assets/css/styles.3ca55d09.css
@@ -0,0 +1 @@
+.col,.container{padding:0 var(--ifm-spacing-horizontal);width:100%}.markdown>h2,.markdown>h3,.markdown>h4,.markdown>h5,.markdown>h6{margin-bottom:calc(var(--ifm-heading-vertical-rhythm-bottom)*var(--ifm-leading))}.markdown li,body{word-wrap:break-word}body,ol ol,ol ul,ul ol,ul ul{margin:0}pre,table{overflow:auto}blockquote,pre{margin:0 0 var(--ifm-spacing-vertical)}.breadcrumbs__link,.button{transition-timing-function:var(--ifm-transition-timing-default)}.button,code{vertical-align:middl [...]
\ No newline at end of file
diff --git a/assets/files/fluss-quickstart-observability-b1c7c2103cbbdea2b24816ff0d6f914d.zip b/assets/files/fluss-quickstart-observability-b1c7c2103cbbdea2b24816ff0d6f914d.zip
new file mode 100644
index 0000000..8a1ecda
Binary files /dev/null and b/assets/files/fluss-quickstart-observability-b1c7c2103cbbdea2b24816ff0d6f914d.zip differ
diff --git a/assets/images/announce-9ab924e071ec69fe7af8765954f9e966.png b/assets/images/announce-9ab924e071ec69fe7af8765954f9e966.png
new file mode 100644
index 0000000..0c8e888
Binary files /dev/null and b/assets/images/announce-9ab924e071ec69fe7af8765954f9e966.png differ
diff --git a/assets/images/architecture-b318beb94d717f94d6fe64b6303e79ab.png b/assets/images/architecture-b318beb94d717f94d6fe64b6303e79ab.png
new file mode 100644
index 0000000..34ccaf9
Binary files /dev/null and b/assets/images/architecture-b318beb94d717f94d6fe64b6303e79ab.png differ
diff --git a/assets/images/architecture-c818a634d5e3360846b1ee299ff8df2e.png b/assets/images/architecture-c818a634d5e3360846b1ee299ff8df2e.png
new file mode 100644
index 0000000..d6cb9ee
Binary files /dev/null and b/assets/images/architecture-c818a634d5e3360846b1ee299ff8df2e.png differ
diff --git a/assets/images/background-0dd420cc202b6881c3fb4529c48f05a8.jpg b/assets/images/background-0dd420cc202b6881c3fb4529c48f05a8.jpg
new file mode 100644
index 0000000..ea84e01
Binary files /dev/null and b/assets/images/background-0dd420cc202b6881c3fb4529c48f05a8.jpg differ
diff --git a/assets/images/banner-5523bd3a3f5145b15e36c6bfb46796be.png b/assets/images/banner-5523bd3a3f5145b15e36c6bfb46796be.png
new file mode 100644
index 0000000..168c7e5
Binary files /dev/null and b/assets/images/banner-5523bd3a3f5145b15e36c6bfb46796be.png differ
diff --git a/assets/images/banner-8cc4ea9295caf8358e14adf7a69beb01.png b/assets/images/banner-8cc4ea9295caf8358e14adf7a69beb01.png
new file mode 100644
index 0000000..24a6586
Binary files /dev/null and b/assets/images/banner-8cc4ea9295caf8358e14adf7a69beb01.png differ
diff --git a/assets/images/banner-a09e6bac14dc2bee3dbc698347cb2d7f.png b/assets/images/banner-a09e6bac14dc2bee3dbc698347cb2d7f.png
new file mode 100644
index 0000000..55f50c8
Binary files /dev/null and b/assets/images/banner-a09e6bac14dc2bee3dbc698347cb2d7f.png differ
diff --git a/assets/images/colored_logo-570a85568f48c50f3ce9cdcfc57c8670.png b/assets/images/colored_logo-570a85568f48c50f3ce9cdcfc57c8670.png
new file mode 100644
index 0000000..2cd7dd3
Binary files /dev/null and b/assets/images/colored_logo-570a85568f48c50f3ce9cdcfc57c8670.png differ
diff --git a/assets/images/compression1-0b666a1467321b28376db725380eda3c.jpg b/assets/images/compression1-0b666a1467321b28376db725380eda3c.jpg
new file mode 100644
index 0000000..3f8ca4a
Binary files /dev/null and b/assets/images/compression1-0b666a1467321b28376db725380eda3c.jpg differ
diff --git a/assets/images/compression2-c0feecf4a8fbff819c1ad37ce03ca6e9.jpg b/assets/images/compression2-c0feecf4a8fbff819c1ad37ce03ca6e9.jpg
new file mode 100644
index 0000000..fb7a400
Binary files /dev/null and b/assets/images/compression2-c0feecf4a8fbff819c1ad37ce03ca6e9.jpg differ
diff --git a/assets/images/compression3-1f5de9eec6dd66394a793f26395a8f49.jpg b/assets/images/compression3-1f5de9eec6dd66394a793f26395a8f49.jpg
new file mode 100644
index 0000000..8abf66b
Binary files /dev/null and b/assets/images/compression3-1f5de9eec6dd66394a793f26395a8f49.jpg differ
diff --git a/assets/images/data_organization-c63fd910ab4f86359e60234f855bbb74.png b/assets/images/data_organization-c63fd910ab4f86359e60234f855bbb74.png
new file mode 100644
index 0000000..c868b9e
Binary files /dev/null and b/assets/images/data_organization-c63fd910ab4f86359e60234f855bbb74.png differ
diff --git a/assets/images/data_organization-e23ab4af273d5615b2da661138af36dd.png b/assets/images/data_organization-e23ab4af273d5615b2da661138af36dd.png
new file mode 100644
index 0000000..ce52810
Binary files /dev/null and b/assets/images/data_organization-e23ab4af273d5615b2da661138af36dd.png differ
diff --git a/assets/images/delta-join-ad3cf73fc7f3f01e306ad02fd765d26d.jpg b/assets/images/delta-join-ad3cf73fc7f3f01e306ad02fd765d26d.jpg
new file mode 100644
index 0000000..2cc66dc
Binary files /dev/null and b/assets/images/delta-join-ad3cf73fc7f3f01e306ad02fd765d26d.jpg differ
diff --git a/assets/images/deployment_overview-9108e1465903f9424cddd023a8301fb2.png b/assets/images/deployment_overview-9108e1465903f9424cddd023a8301fb2.png
new file mode 100644
index 0000000..c2c44f5
Binary files /dev/null and b/assets/images/deployment_overview-9108e1465903f9424cddd023a8301fb2.png differ
diff --git a/assets/images/deployment_overview-e08f87d880eb2d10920b7f34ccbd9fa1.png b/assets/images/deployment_overview-e08f87d880eb2d10920b7f34ccbd9fa1.png
new file mode 100644
index 0000000..928b511
Binary files /dev/null and b/assets/images/deployment_overview-e08f87d880eb2d10920b7f34ccbd9fa1.png differ
diff --git a/assets/images/ff_os-2589690ef465b4d2c76c7861438ad18b.png b/assets/images/ff_os-2589690ef465b4d2c76c7861438ad18b.png
new file mode 100644
index 0000000..a31b7a5
Binary files /dev/null and b/assets/images/ff_os-2589690ef465b4d2c76c7861438ad18b.png differ
diff --git a/assets/images/fluss-9455a8d9e5ebfcf475a714923665b1c7.png b/assets/images/fluss-9455a8d9e5ebfcf475a714923665b1c7.png
new file mode 100644
index 0000000..2cf5f9c
Binary files /dev/null and b/assets/images/fluss-9455a8d9e5ebfcf475a714923665b1c7.png differ
diff --git a/assets/images/image1-6acb85f09ad799d93582a37896aabf30.png b/assets/images/image1-6acb85f09ad799d93582a37896aabf30.png
new file mode 100644
index 0000000..438b3b1
Binary files /dev/null and b/assets/images/image1-6acb85f09ad799d93582a37896aabf30.png differ
diff --git a/assets/images/image2-b9a57e1c35eb09c32fa4fcd07406ceeb.png b/assets/images/image2-b9a57e1c35eb09c32fa4fcd07406ceeb.png
new file mode 100644
index 0000000..e8f2485
Binary files /dev/null and b/assets/images/image2-b9a57e1c35eb09c32fa4fcd07406ceeb.png differ
diff --git a/assets/images/image3-37c9a30c044c5afbc6e35fa21c1793bc.png b/assets/images/image3-37c9a30c044c5afbc6e35fa21c1793bc.png
new file mode 100644
index 0000000..6f5b300
Binary files /dev/null and b/assets/images/image3-37c9a30c044c5afbc6e35fa21c1793bc.png differ
diff --git a/assets/images/image4-c4082ae4730f49472a0414543ab5075a.png b/assets/images/image4-c4082ae4730f49472a0414543ab5075a.png
new file mode 100644
index 0000000..e26aa8e
Binary files /dev/null and b/assets/images/image4-c4082ae4730f49472a0414543ab5075a.png differ
diff --git a/assets/images/image5-7b6a1c8656ea141b803b8787e89d75df.png b/assets/images/image5-7b6a1c8656ea141b803b8787e89d75df.png
new file mode 100644
index 0000000..4f742a9
Binary files /dev/null and b/assets/images/image5-7b6a1c8656ea141b803b8787e89d75df.png differ
diff --git a/assets/images/image6-ec1c384b777aef0f617d3fcb08a5e39e.png b/assets/images/image6-ec1c384b777aef0f617d3fcb08a5e39e.png
new file mode 100644
index 0000000..3e8470e
Binary files /dev/null and b/assets/images/image6-ec1c384b777aef0f617d3fcb08a5e39e.png differ
diff --git a/assets/images/image7-246c5eae97745ed3ae9872e84a86b134.png b/assets/images/image7-246c5eae97745ed3ae9872e84a86b134.png
new file mode 100644
index 0000000..ffff855
Binary files /dev/null and b/assets/images/image7-246c5eae97745ed3ae9872e84a86b134.png differ
diff --git a/assets/images/img1-163f1412a1ed7b661686302df5bf9edb.png b/assets/images/img1-163f1412a1ed7b661686302df5bf9edb.png
new file mode 100644
index 0000000..716456b
Binary files /dev/null and b/assets/images/img1-163f1412a1ed7b661686302df5bf9edb.png differ
diff --git a/assets/images/img1-591c05a64a0e27a33a3ce5776391d92d.jpg b/assets/images/img1-591c05a64a0e27a33a3ce5776391d92d.jpg
new file mode 100644
index 0000000..dd305b0
Binary files /dev/null and b/assets/images/img1-591c05a64a0e27a33a3ce5776391d92d.jpg differ
diff --git a/assets/images/img1-a29d423ce0b5f952b79ad2babb903cf5.jpg b/assets/images/img1-a29d423ce0b5f952b79ad2babb903cf5.jpg
new file mode 100644
index 0000000..f0d4671
Binary files /dev/null and b/assets/images/img1-a29d423ce0b5f952b79ad2babb903cf5.jpg differ
diff --git a/assets/images/img2-846063bd092bc571aad305ae7253a190.jpg b/assets/images/img2-846063bd092bc571aad305ae7253a190.jpg
new file mode 100644
index 0000000..819370f
Binary files /dev/null and b/assets/images/img2-846063bd092bc571aad305ae7253a190.jpg differ
diff --git a/assets/images/img2-86b0eb7b0f26884f8ead16dc4a8db648.png b/assets/images/img2-86b0eb7b0f26884f8ead16dc4a8db648.png
new file mode 100644
index 0000000..17b35c8
Binary files /dev/null and b/assets/images/img2-86b0eb7b0f26884f8ead16dc4a8db648.png differ
diff --git a/assets/images/img2-d2d1a314768a1be3da0308e20851d3f3.jpg b/assets/images/img2-d2d1a314768a1be3da0308e20851d3f3.jpg
new file mode 100644
index 0000000..60cf887
Binary files /dev/null and b/assets/images/img2-d2d1a314768a1be3da0308e20851d3f3.jpg differ
diff --git a/assets/images/img3-32732f50a5420dad7d1dd6c5b3d17d6f.jpg b/assets/images/img3-32732f50a5420dad7d1dd6c5b3d17d6f.jpg
new file mode 100644
index 0000000..c56638b
Binary files /dev/null and b/assets/images/img3-32732f50a5420dad7d1dd6c5b3d17d6f.jpg differ
diff --git a/assets/images/img3-d0ea956fb83807118c4d522bdd7b30f4.png b/assets/images/img3-d0ea956fb83807118c4d522bdd7b30f4.png
new file mode 100644
index 0000000..31b7326
Binary files /dev/null and b/assets/images/img3-d0ea956fb83807118c4d522bdd7b30f4.png differ
diff --git a/assets/images/img3-f76df2882b217d4aa58efba2edae07d8.jpg b/assets/images/img3-f76df2882b217d4aa58efba2edae07d8.jpg
new file mode 100644
index 0000000..9bdd56e
Binary files /dev/null and b/assets/images/img3-f76df2882b217d4aa58efba2edae07d8.jpg differ
diff --git a/assets/images/img4-06aab50ae6bb5a5df5cc0e2658815c1f.png b/assets/images/img4-06aab50ae6bb5a5df5cc0e2658815c1f.png
new file mode 100644
index 0000000..abff06e
Binary files /dev/null and b/assets/images/img4-06aab50ae6bb5a5df5cc0e2658815c1f.png differ
diff --git a/assets/images/img4-5a57c638bb5dd478a86a9fcd1683734f.jpg b/assets/images/img4-5a57c638bb5dd478a86a9fcd1683734f.jpg
new file mode 100644
index 0000000..8125b31
Binary files /dev/null and b/assets/images/img4-5a57c638bb5dd478a86a9fcd1683734f.jpg differ
diff --git a/assets/images/img4-80846362d40e3239bfcd92216276b72d.jpg b/assets/images/img4-80846362d40e3239bfcd92216276b72d.jpg
new file mode 100644
index 0000000..379cfd2
Binary files /dev/null and b/assets/images/img4-80846362d40e3239bfcd92216276b72d.jpg differ
diff --git a/assets/images/img5-36f56d95c22f50252c6a5caedbfed1d4.png b/assets/images/img5-36f56d95c22f50252c6a5caedbfed1d4.png
new file mode 100644
index 0000000..bba6dc4
Binary files /dev/null and b/assets/images/img5-36f56d95c22f50252c6a5caedbfed1d4.png differ
diff --git a/assets/images/img5-c1bedf1a8c60844ffd67f77f722157f9.jpg b/assets/images/img5-c1bedf1a8c60844ffd67f77f722157f9.jpg
new file mode 100644
index 0000000..fee4e41
Binary files /dev/null and b/assets/images/img5-c1bedf1a8c60844ffd67f77f722157f9.jpg differ
diff --git a/assets/images/img5-e185731d5e249a6c80b962b77b5a16ad.jpg b/assets/images/img5-e185731d5e249a6c80b962b77b5a16ad.jpg
new file mode 100644
index 0000000..970974f
Binary files /dev/null and b/assets/images/img5-e185731d5e249a6c80b962b77b5a16ad.jpg differ
diff --git a/assets/images/img6-3e455650eb36e97091211441c91b48ac.jpg b/assets/images/img6-3e455650eb36e97091211441c91b48ac.jpg
new file mode 100644
index 0000000..48ed084
Binary files /dev/null and b/assets/images/img6-3e455650eb36e97091211441c91b48ac.jpg differ
diff --git a/assets/images/img6-4741286b7e5d1410d5a8d7036e3cad8d.jpg b/assets/images/img6-4741286b7e5d1410d5a8d7036e3cad8d.jpg
new file mode 100644
index 0000000..347ad8a
Binary files /dev/null and b/assets/images/img6-4741286b7e5d1410d5a8d7036e3cad8d.jpg differ
diff --git a/assets/images/img6-5fdec641b3032d1c0f236cf990d914da.png b/assets/images/img6-5fdec641b3032d1c0f236cf990d914da.png
new file mode 100644
index 0000000..6565bb2
Binary files /dev/null and b/assets/images/img6-5fdec641b3032d1c0f236cf990d914da.png differ
diff --git a/assets/images/img7-06886bca9797751895c82d707cb04b2d.jpg b/assets/images/img7-06886bca9797751895c82d707cb04b2d.jpg
new file mode 100644
index 0000000..5f7094f
Binary files /dev/null and b/assets/images/img7-06886bca9797751895c82d707cb04b2d.jpg differ
diff --git a/assets/images/img7-8b8e86a6e036ca0f37b6d53f8fc5ae77.png b/assets/images/img7-8b8e86a6e036ca0f37b6d53f8fc5ae77.png
new file mode 100644
index 0000000..0496b5f
Binary files /dev/null and b/assets/images/img7-8b8e86a6e036ca0f37b6d53f8fc5ae77.png differ
diff --git a/assets/images/img8-87cfb5887e9a49febaacd805de5216fe.jpg b/assets/images/img8-87cfb5887e9a49febaacd805de5216fe.jpg
new file mode 100644
index 0000000..f9f107a
Binary files /dev/null and b/assets/images/img8-87cfb5887e9a49febaacd805de5216fe.jpg differ
diff --git a/assets/images/img9-fb689d41f612ef840508c4c20399822c.jpg b/assets/images/img9-fb689d41f612ef840508c4c20399822c.jpg
new file mode 100644
index 0000000..3536371
Binary files /dev/null and b/assets/images/img9-fb689d41f612ef840508c4c20399822c.jpg differ
diff --git a/assets/images/logo_overview-3a76e21a805e31d6bbf8e32563a22eb2.jpg b/assets/images/logo_overview-3a76e21a805e31d6bbf8e32563a22eb2.jpg
new file mode 100644
index 0000000..99a049a
Binary files /dev/null and b/assets/images/logo_overview-3a76e21a805e31d6bbf8e32563a22eb2.jpg differ
diff --git a/assets/images/new_tiering_service-4509c1a4b51c6821c0fe622cdda534e4.png b/assets/images/new_tiering_service-4509c1a4b51c6821c0fe622cdda534e4.png
new file mode 100644
index 0000000..11d0aa2
Binary files /dev/null and b/assets/images/new_tiering_service-4509c1a4b51c6821c0fe622cdda534e4.png differ
diff --git a/assets/images/overview-255047ec7648f12c63660b40d1147c86.png b/assets/images/overview-255047ec7648f12c63660b40d1147c86.png
new file mode 100644
index 0000000..c1f9291
Binary files /dev/null and b/assets/images/overview-255047ec7648f12c63660b40d1147c86.png differ
diff --git a/assets/images/partial_update-d529bf24211a76b31444bc7918872d59.png b/assets/images/partial_update-d529bf24211a76b31444bc7918872d59.png
new file mode 100644
index 0000000..9a35191
Binary files /dev/null and b/assets/images/partial_update-d529bf24211a76b31444bc7918872d59.png differ
diff --git a/assets/images/read_perf-66abe9aa4ee1bf9ef52dc10c59072c0f.jpg b/assets/images/read_perf-66abe9aa4ee1bf9ef52dc10c59072c0f.jpg
new file mode 100644
index 0000000..ce47448
Binary files /dev/null and b/assets/images/read_perf-66abe9aa4ee1bf9ef52dc10c59072c0f.jpg differ
diff --git a/assets/images/streamhouse-5a2a3447bdfe72cc96b6ffa7e1eee39e.png b/assets/images/streamhouse-5a2a3447bdfe72cc96b6ffa7e1eee39e.png
new file mode 100644
index 0000000..a59ec39
Binary files /dev/null and b/assets/images/streamhouse-5a2a3447bdfe72cc96b6ffa7e1eee39e.png differ
diff --git a/assets/images/streamhouse-7b7f1260fc996ca89b50dbb9454584ab.png b/assets/images/streamhouse-7b7f1260fc996ca89b50dbb9454584ab.png
new file mode 100644
index 0000000..7092c12
Binary files /dev/null and b/assets/images/streamhouse-7b7f1260fc996ca89b50dbb9454584ab.png differ
diff --git a/assets/images/streamhouse-8069e2c65c0cf01ec3db98818555089a.png b/assets/images/streamhouse-8069e2c65c0cf01ec3db98818555089a.png
new file mode 100644
index 0000000..45de7cf
Binary files /dev/null and b/assets/images/streamhouse-8069e2c65c0cf01ec3db98818555089a.png differ
diff --git a/assets/images/streaming_join-761699227c5633f3575e2036b9e2ac61.png b/assets/images/streaming_join-761699227c5633f3575e2036b9e2ac61.png
new file mode 100644
index 0000000..daf17ac
Binary files /dev/null and b/assets/images/streaming_join-761699227c5633f3575e2036b9e2ac61.png differ
diff --git a/assets/images/tiered-storage-07376e693fff78ba48fa2cb58a1aca67.png b/assets/images/tiered-storage-07376e693fff78ba48fa2cb58a1aca67.png
new file mode 100644
index 0000000..9ca1e1d
Binary files /dev/null and b/assets/images/tiered-storage-07376e693fff78ba48fa2cb58a1aca67.png differ
diff --git a/assets/images/tiered-storage-7a1d1d0d91fa9b682bc80cb2713831a3.png b/assets/images/tiered-storage-7a1d1d0d91fa9b682bc80cb2713831a3.png
new file mode 100644
index 0000000..6312659
Binary files /dev/null and b/assets/images/tiered-storage-7a1d1d0d91fa9b682bc80cb2713831a3.png differ
diff --git a/assets/images/tiered-storage-d4ec96e1b2955c7786ce217a19fe91b5.png b/assets/images/tiered-storage-d4ec96e1b2955c7786ce217a19fe91b5.png
new file mode 100644
index 0000000..2803890
Binary files /dev/null and b/assets/images/tiered-storage-d4ec96e1b2955c7786ce217a19fe91b5.png differ
diff --git a/assets/images/write_perf-25c062766e117f2c092a79653cf69a85.jpg b/assets/images/write_perf-25c062766e117f2c092a79653cf69a85.jpg
new file mode 100644
index 0000000..628a776
Binary files /dev/null and b/assets/images/write_perf-25c062766e117f2c092a79653cf69a85.jpg differ
diff --git a/assets/js/0159e4b3.a1d1c71d.js b/assets/js/0159e4b3.a1d1c71d.js
new file mode 100644
index 0000000..4e3e564
--- /dev/null
+++ b/assets/js/0159e4b3.a1d1c71d.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkfluss_website=self.webpackChunkfluss_website||[]).push([[1838],{8605:(e,a,t)=>{t.r(a),t.d(a,{assets:()=>l,contentTitle:()=>i,default:()=>d,frontMatter:()=>o,metadata:()=>s,toc:()=>c});const s=JSON.parse('{"id":"maintenance/tiered-storage/lakehouse-storage","title":"Lakehouse Storage","description":"Lakehouse represents a new, open architecture that combines the best elements of data lakes and data warehouses.","source":"@site/versioned_docs/version-0.6/main [...]
\ No newline at end of file
diff --git a/assets/js/019059a8.5b3a9fd0.js b/assets/js/019059a8.5b3a9fd0.js
new file mode 100644
index 0000000..2119f5b
--- /dev/null
+++ b/assets/js/019059a8.5b3a9fd0.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkfluss_website=self.webpackChunkfluss_website||[]).push([[4944],{3097:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>c,contentTitle:()=>r,default:()=>h,frontMatter:()=>a,metadata:()=>i,toc:()=>o});const i=JSON.parse('{"id":"engine-flink/reads","title":"Flink Reads","description":"\x3c!--","source":"@site/docs/engine-flink/reads.md","sourceDirName":"engine-flink","slug":"/engine-flink/reads","permalink":"/docs/next/engine-flink/reads","draft":false,"unlisted":false,"edit [...]
\ No newline at end of file
diff --git a/assets/js/01a85c17.97728021.js b/assets/js/01a85c17.97728021.js
new file mode 100644
index 0000000..efdd690
--- /dev/null
+++ b/assets/js/01a85c17.97728021.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkfluss_website=self.webpackChunkfluss_website||[]).push([[8209],{1715:(e,t,a)=>{a.d(t,{in:()=>c,OU:()=>P,Ki:()=>y,kJ:()=>b,x:()=>l,e7:()=>m,J_:()=>f,Gx:()=>A});var s=a(6540),n=a(9532),i=a(6803),r=a(4848);function l(){const e=(0,i.A)(),t=e?.data?.blogMetadata;if(!t)throw new Error("useBlogMetadata() can't be called on the current route because the blog metadata could not be found in route context");return t}const o=s.createContext(null);function c({children:e [...]
\ No newline at end of file
diff --git a/assets/js/02e30128.5892e7ee.js b/assets/js/02e30128.5892e7ee.js
new file mode 100644
index 0000000..539f499
--- /dev/null
+++ b/assets/js/02e30128.5892e7ee.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkfluss_website=self.webpackChunkfluss_website||[]).push([[8474],{2715:(e,t,r)=>{r.r(t),r.d(t,{assets:()=>c,contentTitle:()=>l,default:()=>a,frontMatter:()=>i,metadata:()=>s,toc:()=>h});const s=JSON.parse('{"id":"maintenance/observability/monitor-metrics","title":"Monitor Metrics","description":"\x3c!--","source":"@site/docs/maintenance/observability/monitor-metrics.md","sourceDirName":"maintenance/observability","slug":"/maintenance/observability/monitor-met [...]
\ No newline at end of file
diff --git a/assets/js/03d2caf8.e98329fa.js b/assets/js/03d2caf8.e98329fa.js
new file mode 100644
index 0000000..22fe7b2
--- /dev/null
+++ b/assets/js/03d2caf8.e98329fa.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkfluss_website=self.webpackChunkfluss_website||[]).push([[1116],{3940:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>o,contentTitle:()=>l,default:()=>g,frontMatter:()=>a,metadata:()=>s,toc:()=>d});const s=JSON.parse('{"id":"table-design/table-types/pk-table/merge-engines/first-row","title":"FirstRow Merge Engine","description":"\x3c!--","source":"@site/docs/table-design/table-types/pk-table/merge-engines/first-row.md","sourceDirName":"table-design/table-types/pk-table/m [...]
\ No newline at end of file
diff --git a/assets/js/04b1c040.de2a0d3b.js b/assets/js/04b1c040.de2a0d3b.js
new file mode 100644
index 0000000..8f3ce3f
--- /dev/null
+++ b/assets/js/04b1c040.de2a0d3b.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkfluss_website=self.webpackChunkfluss_website||[]).push([[957],{9132:(e,t,o)=>{o.r(t),o.d(t,{assets:()=>l,contentTitle:()=>a,default:()=>d,frontMatter:()=>r,metadata:()=>n,toc:()=>c});const n=JSON.parse('{"id":"how-to-release","title":"How to Release","description":"\x3c!--","source":"@site/community/how-to-release.md","sourceDirName":".","slug":"/how-to-release","permalink":"/community/how-to-release","draft":false,"unlisted":false,"editUrl":"https://github [...]
\ No newline at end of file
diff --git a/assets/js/05418681.6fc95e8e.js b/assets/js/05418681.6fc95e8e.js
new file mode 100644
index 0000000..c323866
--- /dev/null
+++ b/assets/js/05418681.6fc95e8e.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkfluss_website=self.webpackChunkfluss_website||[]).push([[3592],{6212:(e,t,i)=>{i.r(t),i.d(t,{assets:()=>d,contentTitle:()=>o,default:()=>h,frontMatter:()=>l,metadata:()=>r,toc:()=>a});const r=JSON.parse('{"id":"engine-flink/options","title":"Connector Options","description":"\x3c!--","source":"@site/versioned_docs/version-0.7/engine-flink/options.md","sourceDirName":"engine-flink","slug":"/engine-flink/options","permalink":"/docs/engine-flink/options","draf [...]
\ No newline at end of file
diff --git a/assets/js/061ac8d1.3c858347.js b/assets/js/061ac8d1.3c858347.js
new file mode 100644
index 0000000..9b804c4
--- /dev/null
+++ b/assets/js/061ac8d1.3c858347.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkfluss_website=self.webpackChunkfluss_website||[]).push([[1007],{5663:(e,t,s)=>{s.r(t),s.d(t,{assets:()=>l,contentTitle:()=>i,default:()=>g,frontMatter:()=>o,metadata:()=>n,toc:()=>u});var n=s(7848),r=s(4848),a=s(8453);const o={slug:"fluss-intro",title:"Introducing Fluss: Streaming Storage for Real-Time Analytics",sidebar_label:"Introducing Fluss",authors:["jark"]},i=void 0,l={authorsImageUrls:[void 0]},u=[];function c(e){const t={a:"a",p:"p",...(0,a.R)(),.. [...]
\ No newline at end of file
diff --git a/assets/js/063063cd.9ae7fa2b.js b/assets/js/063063cd.9ae7fa2b.js
new file mode 100644
index 0000000..8f15eb3
--- /dev/null
+++ b/assets/js/063063cd.9ae7fa2b.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkfluss_website=self.webpackChunkfluss_website||[]).push([[252],{9189:(e,i,n)=>{n.r(i),n.d(i,{assets:()=>o,contentTitle:()=>l,default:()=>h,frontMatter:()=>c,metadata:()=>t,toc:()=>a});const t=JSON.parse('{"id":"security/authentication","title":"Security Authentication","description":"\x3c!--","source":"@site/versioned_docs/version-0.7/security/authentication.md","sourceDirName":"security","slug":"/security/authentication","permalink":"/docs/security/authenti [...]
\ No newline at end of file
diff --git a/assets/js/08af526d.be0d7b34.js b/assets/js/08af526d.be0d7b34.js
new file mode 100644
index 0000000..59e8ee9
--- /dev/null
+++ b/assets/js/08af526d.be0d7b34.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkfluss_website=self.webpackChunkfluss_website||[]).push([[529],{1344:e=>{e.exports=JSON.parse('{"metadata":{"permalink":"/blog","page":1,"postsPerPage":10,"totalPages":1,"totalCount":8,"blogDescription":"Blog","blogTitle":"Blog"}}')}}]);
\ No newline at end of file
diff --git a/assets/js/0be3fcda.6327730a.js b/assets/js/0be3fcda.6327730a.js
new file mode 100644
index 0000000..52a320d
--- /dev/null
+++ b/assets/js/0be3fcda.6327730a.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkfluss_website=self.webpackChunkfluss_website||[]).push([[1965],{218:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>d,contentTitle:()=>r,default:()=>u,frontMatter:()=>i,metadata:()=>a,toc:()=>o});const a=JSON.parse('{"id":"engine-flink/writes","title":"Flink Writes","description":"You can directly insert or update data into a Fluss table using the INSERT INTO statement.","source":"@site/versioned_docs/version-0.6/engine-flink/writes.md","sourceDirName":"engine-flink","s [...]
\ No newline at end of file
diff --git a/assets/js/0cac70d5.5a20b7dd.js b/assets/js/0cac70d5.5a20b7dd.js
new file mode 100644
index 0000000..4435392
--- /dev/null
+++ b/assets/js/0cac70d5.5a20b7dd.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkfluss_website=self.webpackChunkfluss_website||[]).push([[8616],{6191:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>o,contentTitle:()=>l,default:()=>c,frontMatter:()=>r,metadata:()=>a,toc:()=>d});const a=JSON.parse('{"id":"table-design/table-types/pk-table/merge-engines/default","title":"Default Merge Engine","description":"\x3c!--","source":"@site/docs/table-design/table-types/pk-table/merge-engines/default.md","sourceDirName":"table-design/table-types/pk-table/merge- [...]
\ No newline at end of file
diff --git a/assets/js/0d32679b.d98582c4.js b/assets/js/0d32679b.d98582c4.js
new file mode 100644
index 0000000..817c573
--- /dev/null
+++ b/assets/js/0d32679b.d98582c4.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkfluss_website=self.webpackChunkfluss_website||[]).push([[7844],{9825:(t,e,i)=>{i.r(e),i.d(e,{assets:()=>d,contentTitle:()=>r,default:()=>u,frontMatter:()=>o,metadata:()=>a,toc:()=>l});const a=JSON.parse('{"id":"table-design/data-distribution/ttl","title":"TTL","description":"\x3c!--","source":"@site/versioned_docs/version-0.7/table-design/data-distribution/ttl.md","sourceDirName":"table-design/data-distribution","slug":"/table-design/data-distribution/ttl", [...]
\ No newline at end of file
diff --git a/assets/js/0e04ef0e.c88e745d.js b/assets/js/0e04ef0e.c88e745d.js
new file mode 100644
index 0000000..6ee39cd
--- /dev/null
+++ b/assets/js/0e04ef0e.c88e745d.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkfluss_website=self.webpackChunkfluss_website||[]).push([[8710],{5830:(e,t,r)=>{r.r(t),r.d(t,{assets:()=>l,contentTitle:()=>a,default:()=>h,frontMatter:()=>i,metadata:()=>n,toc:()=>d});const n=JSON.parse('{"id":"concepts/architecture","title":"Architecture","description":"A Fluss cluster consists of two main processes: the CoordinatorServer and the TabletServer.","source":"@site/versioned_docs/version-0.6/concepts/architecture.md","sourceDirName":"concepts", [...]
\ No newline at end of file
diff --git a/assets/js/0e384e19.767d16de.js b/assets/js/0e384e19.767d16de.js
new file mode 100644
index 0000000..e65f234
--- /dev/null
+++ b/assets/js/0e384e19.767d16de.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkfluss_website=self.webpackChunkfluss_website||[]).push([[3976],{2053:(e,n,s)=>{s.r(n),s.d(n,{assets:()=>o,contentTitle:()=>l,default:()=>h,frontMatter:()=>a,metadata:()=>t,toc:()=>c});const t=JSON.parse('{"id":"intro","title":"Introduction","description":"\x3c!--","source":"@site/docs/intro.md","sourceDirName":".","slug":"/intro","permalink":"/docs/next/intro","draft":false,"unlisted":false,"editUrl":"https://github.com/apache/fluss/edit/main/website/docs/i [...]
\ No newline at end of file
diff --git a/assets/js/0f7eeec5.b8867f3d.js b/assets/js/0f7eeec5.b8867f3d.js
new file mode 100644
index 0000000..4667209
--- /dev/null
+++ b/assets/js/0f7eeec5.b8867f3d.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkfluss_website=self.webpackChunkfluss_website||[]).push([[9615],{3798:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>o,contentTitle:()=>l,default:()=>c,frontMatter:()=>r,metadata:()=>s,toc:()=>d});const s=JSON.parse('{"id":"table-design/table-types/pk-table/merge-engines/default","title":"Default Merge Engine","description":"\x3c!--","source":"@site/versioned_docs/version-0.7/table-design/table-types/pk-table/merge-engines/default.md","sourceDirName":"table-design/table [...]
\ No newline at end of file
diff --git a/assets/js/1099.428aa052.js b/assets/js/1099.428aa052.js
new file mode 100644
index 0000000..bc8eb2b
--- /dev/null
+++ b/assets/js/1099.428aa052.js
@@ -0,0 +1 @@
+(self.webpackChunkfluss_website=self.webpackChunkfluss_website||[]).push([[1099],{7293:(e,t,n)=>{"use strict";n.d(t,{A:()=>M});var s=n(6540),a=n(4848);function r(e){const{mdxAdmonitionTitle:t,rest:n}=function(e){const t=s.Children.toArray(e),n=t.find((e=>s.isValidElement(e)&&"mdxAdmonitionTitle"===e.type)),r=t.filter((e=>e!==n)),c=n?.props.children;return{mdxAdmonitionTitle:c,rest:r.length>0?(0,a.jsx)(a.Fragment,{children:r}):null}}(e.children),r=e.title??t;return{...e,...r&&{title:r},ch [...]
\ No newline at end of file
diff --git a/assets/js/11b43341.30e7d45b.js b/assets/js/11b43341.30e7d45b.js
new file mode 100644
index 0000000..f9cef7a
--- /dev/null
+++ b/assets/js/11b43341.30e7d45b.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkfluss_website=self.webpackChunkfluss_website||[]).push([[2256],{7674:e=>{e.exports=JSON.parse('{"version":{"pluginId":"default","version":"0.7","label":"0.7","banner":null,"badge":true,"noIndex":false,"className":"docs-version-0.7","isLast":true,"docsSidebars":{"docsSidebar":[{"type":"link","label":"Introduction","href":"/docs/intro","docId":"intro","unlisted":false},{"type":"category","label":"Quick Start","collapsible":true,"collapsed":true,"items":[{"typ [...]
\ No newline at end of file
diff --git a/assets/js/12079287.d61bbd17.js b/assets/js/12079287.d61bbd17.js
new file mode 100644
index 0000000..e7c2301
--- /dev/null
+++ b/assets/js/12079287.d61bbd17.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkfluss_website=self.webpackChunkfluss_website||[]).push([[7715],{6731:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>o,contentTitle:()=>l,default:()=>g,frontMatter:()=>a,metadata:()=>s,toc:()=>d});const s=JSON.parse('{"id":"table-design/table-types/pk-table/merge-engines/index","title":"Merge Engines","description":"\x3c!--","source":"@site/versioned_docs/version-0.7/table-design/table-types/pk-table/merge-engines/index.md","sourceDirName":"table-design/table-types/pk-t [...]
\ No newline at end of file
diff --git a/assets/js/121d09c9.2b00b45d.js b/assets/js/121d09c9.2b00b45d.js
new file mode 100644
index 0000000..e9e6f5a
--- /dev/null
+++ b/assets/js/121d09c9.2b00b45d.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkfluss_website=self.webpackChunkfluss_website||[]).push([[196],{1318:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>d,contentTitle:()=>l,default:()=>h,frontMatter:()=>r,metadata:()=>i,toc:()=>o});const i=JSON.parse('{"id":"table-design/table-types/pk-table/index","title":"PrimaryKey Table","description":"Basic Concept","source":"@site/versioned_docs/version-0.6/table-design/table-types/pk-table/index.md","sourceDirName":"table-design/table-types/pk-table","slug":"/table [...]
\ No newline at end of file
diff --git a/assets/js/155d5593.743d5e64.js b/assets/js/155d5593.743d5e64.js
new file mode 100644
index 0000000..b2500b8
--- /dev/null
+++ b/assets/js/155d5593.743d5e64.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkfluss_website=self.webpackChunkfluss_website||[]).push([[1440],{6592:(e,n,a)=>{a.r(n),a.d(n,{assets:()=>o,contentTitle:()=>l,default:()=>h,frontMatter:()=>r,metadata:()=>t,toc:()=>d});const t=JSON.parse('{"id":"streaming-lakehouse/integrate-data-lakes/paimon","title":"Paimon","description":"\x3c!--","source":"@site/versioned_docs/version-0.7/streaming-lakehouse/integrate-data-lakes/paimon.md","sourceDirName":"streaming-lakehouse/integrate-data-lakes","slug" [...]
\ No newline at end of file
diff --git a/assets/js/16fc9cae.cb8f075d.js b/assets/js/16fc9cae.cb8f075d.js
new file mode 100644
index 0000000..fedbab0
--- /dev/null
+++ b/assets/js/16fc9cae.cb8f075d.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkfluss_website=self.webpackChunkfluss_website||[]).push([[3085],{2461:(e,n,s)=>{s.r(n),s.d(n,{assets:()=>a,contentTitle:()=>d,default:()=>o,frontMatter:()=>l,metadata:()=>t,toc:()=>c});const t=JSON.parse('{"id":"engine-flink/getting-started","title":"Getting Started with Flink","description":"\x3c!--","source":"@site/versioned_docs/version-0.7/engine-flink/getting-started.md","sourceDirName":"engine-flink","slug":"/engine-flink/getting-started","permalink":" [...]
\ No newline at end of file
diff --git a/assets/js/17301193.a4fb931c.js b/assets/js/17301193.a4fb931c.js
new file mode 100644
index 0000000..0f68607
--- /dev/null
+++ b/assets/js/17301193.a4fb931c.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkfluss_website=self.webpackChunkfluss_website||[]).push([[9456],{1264:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>d,contentTitle:()=>r,default:()=>h,frontMatter:()=>s,metadata:()=>i,toc:()=>o});const i=JSON.parse('{"id":"engine-flink/ddl","title":"Flink DDL","description":"\x3c!--","source":"@site/docs/engine-flink/ddl.md","sourceDirName":"engine-flink","slug":"/engine-flink/ddl","permalink":"/docs/next/engine-flink/ddl","draft":false,"unlisted":false,"editUrl":"http [...]
\ No newline at end of file
diff --git a/assets/js/17896441.b1dee11c.js b/assets/js/17896441.b1dee11c.js
new file mode 100644
index 0000000..c37606d
--- /dev/null
+++ b/assets/js/17896441.b1dee11c.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkfluss_website=self.webpackChunkfluss_website||[]).push([[8401],{2234:(e,n,t)=>{t.d(n,{A:()=>c});t(6540);var s=t(4164),a=t(4084),i=t(7559),l=t(7293),o=t(4848);function r({className:e}){return(0,o.jsx)(l.A,{type:"caution",title:(0,o.jsx)(a.Rc,{}),className:(0,s.A)(e,i.G.common.unlistedBanner),children:(0,o.jsx)(a.Uh,{})})}function c(e){return(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(a.AE,{}),(0,o.jsx)(r,{...e})]})}},1689:(e,n,t)=>{t.d(n,{A:()=>d});t(6540);va [...]
\ No newline at end of file
diff --git a/assets/js/18d3069c.e597f833.js b/assets/js/18d3069c.e597f833.js
new file mode 100644
index 0000000..1089401
--- /dev/null
+++ b/assets/js/18d3069c.e597f833.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkfluss_website=self.webpackChunkfluss_website||[]).push([[1017],{3342:(e,s,t)=>{t.r(s),t.d(s,{assets:()=>c,contentTitle:()=>r,default:()=>u,frontMatter:()=>o,metadata:()=>n,toc:()=>d});const n=JSON.parse('{"id":"maintenance/filesystems/s3","title":"Amazon S3","description":"\x3c!--","source":"@site/docs/maintenance/filesystems/s3.md","sourceDirName":"maintenance/filesystems","slug":"/maintenance/filesystems/s3","permalink":"/docs/next/maintenance/filesystems [...]
\ No newline at end of file
diff --git a/assets/js/1a4e3797.970f8127.js b/assets/js/1a4e3797.970f8127.js
new file mode 100644
index 0000000..8531c34
--- /dev/null
+++ b/assets/js/1a4e3797.970f8127.js
@@ -0,0 +1 @@
+(self.webpackChunkfluss_website=self.webpackChunkfluss_website||[]).push([[2138],{2733:e=>{function t(){this._events=this._events||{},this._maxListeners=this._maxListeners||void 0}function r(e){return"function"==typeof e}function i(e){return"object"==typeof e&&null!==e}function n(e){return void 0===e}e.exports=t,t.prototype._events=void 0,t.prototype._maxListeners=void 0,t.defaultMaxListeners=10,t.prototype.setMaxListeners=function(e){if("number"!=typeof e||e<0||isNaN(e))throw TypeError( [...]
\ No newline at end of file
diff --git a/assets/js/1b7d0bf1.477cbc4b.js b/assets/js/1b7d0bf1.477cbc4b.js
new file mode 100644
index 0000000..1681871
--- /dev/null
+++ b/assets/js/1b7d0bf1.477cbc4b.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkfluss_website=self.webpackChunkfluss_website||[]).push([[1430],{4609:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>l,contentTitle:()=>a,default:()=>h,frontMatter:()=>r,metadata:()=>s,toc:()=>c});const s=JSON.parse('{"id":"table-design/table-types/log-table","title":"Log Table","description":"\x3c!--","source":"@site/versioned_docs/version-0.7/table-design/table-types/log-table.md","sourceDirName":"table-design/table-types","slug":"/table-design/table-types/log-table", [...]
\ No newline at end of file
diff --git a/assets/js/1c857efc.7340880a.js b/assets/js/1c857efc.7340880a.js
new file mode 100644
index 0000000..c624509
--- /dev/null
+++ b/assets/js/1c857efc.7340880a.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkfluss_website=self.webpackChunkfluss_website||[]).push([[7839],{8707:(e,n,o)=>{o.r(n),o.d(n,{assets:()=>a,contentTitle:()=>l,default:()=>u,frontMatter:()=>r,metadata:()=>i,toc:()=>c});const i=JSON.parse('{"id":"engine-flink/lookups","title":"Flink Lookup Joins","description":"\x3c!--","source":"@site/versioned_docs/version-0.7/engine-flink/lookups.md","sourceDirName":"engine-flink","slug":"/engine-flink/lookups","permalink":"/docs/engine-flink/lookups","dra [...]
\ No newline at end of file
diff --git a/assets/js/1df93b7f.e67b8626.js b/assets/js/1df93b7f.e67b8626.js
new file mode 100644
index 0000000..a1ed2bf
--- /dev/null
+++ b/assets/js/1df93b7f.e67b8626.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkfluss_website=self.webpackChunkfluss_website||[]).push([[4583],{5763:(e,t,n)=>{n.d(t,{A:()=>l});var a,i=n(6540);function s(){return s=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var a in n)({}).hasOwnProperty.call(n,a)&&(e[a]=n[a])}return e},s.apply(null,arguments)}const l=({title:e,titleId:t,...n})=>i.createElement("svg",s({xmlns:"http://www.w3.org/2000/svg",fill:"none",shapeRendering:"geometric [...]
\ No newline at end of file
diff --git a/assets/js/1e7fbca2.72c47230.js b/assets/js/1e7fbca2.72c47230.js
new file mode 100644
index 0000000..d0f3381
--- /dev/null
+++ b/assets/js/1e7fbca2.72c47230.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkfluss_website=self.webpackChunkfluss_website||[]).push([[1654],{4584:(e,n,s)=>{s.r(n),s.d(n,{assets:()=>o,contentTitle:()=>r,default:()=>h,frontMatter:()=>i,metadata:()=>t,toc:()=>c});const t=JSON.parse('{"id":"quickstart/flink","title":"Real-Time Analytics With Flink","description":"This guide will get you up and running with Apache Flink to do real-time analytics, covering some powerful features of Fluss,","source":"@site/versioned_docs/version-0.5/quicks [...]
\ No newline at end of file
diff --git a/assets/js/1f391b9e.c4da6e31.js b/assets/js/1f391b9e.c4da6e31.js
new file mode 100644
index 0000000..0b25e4e
--- /dev/null
+++ b/assets/js/1f391b9e.c4da6e31.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkfluss_website=self.webpackChunkfluss_website||[]).push([[6061],{2234:(e,n,t)=>{t.d(n,{A:()=>o});t(6540);var i=t(4164),a=t(4084),s=t(7559),r=t(7293),l=t(4848);function c({className:e}){return(0,l.jsx)(r.A,{type:"caution",title:(0,l.jsx)(a.Rc,{}),className:(0,i.A)(e,s.G.common.unlistedBanner),children:(0,l.jsx)(a.Uh,{})})}function o(e){return(0,l.jsxs)(l.Fragment,{children:[(0,l.jsx)(a.AE,{}),(0,l.jsx)(c,{...e})]})}},1689:(e,n,t)=>{t.d(n,{A:()=>d});t(6540);va [...]
\ No newline at end of file
diff --git a/assets/js/1f864603.9c08aa17.js b/assets/js/1f864603.9c08aa17.js
new file mode 100644
index 0000000..5dfc961
--- /dev/null
+++ b/assets/js/1f864603.9c08aa17.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkfluss_website=self.webpackChunkfluss_website||[]).push([[7237],{6844:(e,n,o)=>{o.r(n),o.d(n,{assets:()=>a,contentTitle:()=>l,default:()=>p,frontMatter:()=>r,metadata:()=>i,toc:()=>c});const i=JSON.parse('{"id":"engine-flink/lookups","title":"Flink Lookup Joins","description":"Flink lookup joins are important because they enable efficient, real-time enrichment of streaming data with reference data, a common requirement in many real-time analytics and process [...]
\ No newline at end of file
diff --git a/assets/js/2063472f.cada080b.js b/assets/js/2063472f.cada080b.js
new file mode 100644
index 0000000..b38a672
--- /dev/null
+++ b/assets/js/2063472f.cada080b.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkfluss_website=self.webpackChunkfluss_website||[]).push([[3215],{7646:e=>{e.exports=JSON.parse('{"tags":[{"label":"releases","permalink":"/blog/tags/releases","description":"Content related release announcement.","count":2}]}')}}]);
\ No newline at end of file
diff --git a/assets/js/21ca1076.fdb09e15.js b/assets/js/21ca1076.fdb09e15.js
new file mode 100644
index 0000000..0970db1
--- /dev/null
+++ b/assets/js/21ca1076.fdb09e15.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkfluss_website=self.webpackChunkfluss_website||[]).push([[7720],{4551:(t,e,i)=>{i.r(e),i.d(e,{assets:()=>d,contentTitle:()=>o,default:()=>h,frontMatter:()=>s,metadata:()=>n,toc:()=>l});const n=JSON.parse('{"id":"table-design/data-distribution/partitioning","title":"Partitioning","description":"Partitioned Tables","source":"@site/versioned_docs/version-0.5/table-design/data-distribution/partitioning.md","sourceDirName":"table-design/data-distribution","slug": [...]
\ No newline at end of file
diff --git a/assets/js/2237.c731bb05.js b/assets/js/2237.c731bb05.js
new file mode 100644
index 0000000..d07550d
--- /dev/null
+++ b/assets/js/2237.c731bb05.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkfluss_website=self.webpackChunkfluss_website||[]).push([[2237],{3363:(e,t,s)=>{s.d(t,{A:()=>a});s(6540);var i=s(4164),n=s(1312),o=s(1107),r=s(4848);function a({className:e}){return(0,r.jsx)("main",{className:(0,i.A)("container margin-vert--xl",e),children:(0,r.jsx)("div",{className:"row",children:(0,r.jsxs)("div",{className:"col col--6 col--offset-3",children:[(0,r.jsx)(o.A,{as:"h1",className:"hero__title",children:(0,r.jsx)(n.A,{id:"theme.NotFound.title",d [...]
\ No newline at end of file
diff --git a/assets/js/2282b9e6.ffe270ef.js b/assets/js/2282b9e6.ffe270ef.js
new file mode 100644
index 0000000..f86db36
--- /dev/null
+++ b/assets/js/2282b9e6.ffe270ef.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkfluss_website=self.webpackChunkfluss_website||[]).push([[3875],{8702:(e,n,s)=>{s.r(n),s.d(n,{assets:()=>l,contentTitle:()=>o,default:()=>g,frontMatter:()=>a,metadata:()=>t,toc:()=>d});const t=JSON.parse('{"id":"table-design/table-types/pk-table/merge-engines/index","title":"Merge Engines","description":"The Merge Engine in Fluss is a core component designed to efficiently handle and consolidate data updates for PrimaryKey Tables.","source":"@site/versioned_ [...]
\ No newline at end of file
diff --git a/assets/js/2351863b.039e294e.js b/assets/js/2351863b.039e294e.js
new file mode 100644
index 0000000..a9f1403
--- /dev/null
+++ b/assets/js/2351863b.039e294e.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkfluss_website=self.webpackChunkfluss_website||[]).push([[7757],{7103:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>o,contentTitle:()=>l,default:()=>g,frontMatter:()=>a,metadata:()=>s,toc:()=>d});const s=JSON.parse('{"id":"table-design/table-types/pk-table/merge-engines/index","title":"Merge Engines","description":"\x3c!--","source":"@site/docs/table-design/table-types/pk-table/merge-engines/index.md","sourceDirName":"table-design/table-types/pk-table/merge-engines","s [...]
\ No newline at end of file
diff --git a/assets/js/2362.71b193b1.js b/assets/js/2362.71b193b1.js
new file mode 100644
index 0000000..1274e67
--- /dev/null
+++ b/assets/js/2362.71b193b1.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkfluss_website=self.webpackChunkfluss_website||[]).push([[2362],{2362:(e,t,o)=>{o.r(t),o.d(t,{default:()=>i});var n=o(6540),s=o(4164),a=o(1312);const l={popup:"popup_wph0",buttonContainer:"buttonContainer_ox5C"};var r=o(4848);function i({onReload:e}){const[t,o]=(0,n.useState)(!0);return t&&(0,r.jsxs)("div",{className:(0,s.A)("alert","alert--secondary",l.popup),children:[(0,r.jsx)("p",{children:(0,r.jsx)(a.A,{id:"theme.PwaReloadPopup.info",description:"The te [...]
\ No newline at end of file
diff --git a/assets/js/23b051ad.94430174.js b/assets/js/23b051ad.94430174.js
new file mode 100644
index 0000000..820b76c
--- /dev/null
+++ b/assets/js/23b051ad.94430174.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkfluss_website=self.webpackChunkfluss_website||[]).push([[2381],{3700:(e,t,s)=>{s.r(t),s.d(t,{assets:()=>l,contentTitle:()=>r,default:()=>h,frontMatter:()=>a,metadata:()=>n,toc:()=>c});var n=s(6560),o=s(4848),i=s(8453);const a={slug:"unveil-fluss-logo",title:"The Story of Fluss Logo",authors:["jark"]},r=void 0,l={authorsImageUrls:[void 0]},c=[{value:"Introducing the Little Otter",id:"introducing-the-little-otter",level:2},{value:"Logo symbolism: what do we w [...]
\ No newline at end of file
diff --git a/assets/js/2421e55a.81216e2f.js b/assets/js/2421e55a.81216e2f.js
new file mode 100644
index 0000000..a88dabe
--- /dev/null
+++ b/assets/js/2421e55a.81216e2f.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkfluss_website=self.webpackChunkfluss_website||[]).push([[3234],{6596:(e,n,s)=>{s.r(n),s.d(n,{assets:()=>l,contentTitle:()=>i,default:()=>h,frontMatter:()=>o,metadata:()=>r,toc:()=>c});const r=JSON.parse('{"id":"maintenance/observability/quickstart","title":"Observability Quickstart Guides","description":"On this page, you can find the following guides to set up an observability stack based on the instructions in the Flink quickstart guide:","source":"@site/ [...]
\ No newline at end of file
diff --git a/assets/js/26fffdeb.6a066b8e.js b/assets/js/26fffdeb.6a066b8e.js
new file mode 100644
index 0000000..1e3c421
--- /dev/null
+++ b/assets/js/26fffdeb.6a066b8e.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkfluss_website=self.webpackChunkfluss_website||[]).push([[3984],{2211:(e,t,r)=>{r.r(t),r.d(t,{assets:()=>l,contentTitle:()=>a,default:()=>h,frontMatter:()=>o,metadata:()=>n,toc:()=>c});const n=JSON.parse('{"id":"concepts/architecture","title":"Architecture","description":"\x3c!--","source":"@site/versioned_docs/version-0.7/concepts/architecture.md","sourceDirName":"concepts","slug":"/concepts/architecture","permalink":"/docs/concepts/architecture","draft":fa [...]
\ No newline at end of file
diff --git a/assets/js/27606b7d.9f9fe63f.js b/assets/js/27606b7d.9f9fe63f.js
new file mode 100644
index 0000000..ad79993
--- /dev/null
+++ b/assets/js/27606b7d.9f9fe63f.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkfluss_website=self.webpackChunkfluss_website||[]).push([[3593],{6598:(e,n,s)=>{s.r(n),s.d(n,{assets:()=>d,contentTitle:()=>o,default:()=>h,frontMatter:()=>l,metadata:()=>r,toc:()=>a});const r=JSON.parse('{"id":"install-deploy/deploying-distributed-cluster","title":"Deploying Distributed Cluster","description":"\x3c!--","source":"@site/versioned_docs/version-0.7/install-deploy/deploying-distributed-cluster.md","sourceDirName":"install-deploy","slug":"/instal [...]
\ No newline at end of file
diff --git a/assets/js/2f1b6021.a871f4dc.js b/assets/js/2f1b6021.a871f4dc.js
new file mode 100644
index 0000000..553e1c1
--- /dev/null
+++ b/assets/js/2f1b6021.a871f4dc.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkfluss_website=self.webpackChunkfluss_website||[]).push([[4359],{3126:(e,n,s)=>{s.r(n),s.d(n,{assets:()=>d,contentTitle:()=>o,default:()=>h,frontMatter:()=>l,metadata:()=>r,toc:()=>a});const r=JSON.parse('{"id":"install-deploy/deploying-distributed-cluster","title":"Deploying Distributed Cluster","description":"This page provides instructions on how to deploy a distributed cluster for Fluss on bare machines.","source":"@site/versioned_docs/version-0.5/instal [...]
\ No newline at end of file
diff --git a/assets/js/2f611e4f.7b4fb968.js b/assets/js/2f611e4f.7b4fb968.js
new file mode 100644
index 0000000..fa6af95
--- /dev/null
+++ b/assets/js/2f611e4f.7b4fb968.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkfluss_website=self.webpackChunkfluss_website||[]).push([[8552],{8428:(e,n,s)=>{s.r(n),s.d(n,{assets:()=>c,contentTitle:()=>a,default:()=>u,frontMatter:()=>r,metadata:()=>o,toc:()=>l});const o=JSON.parse('{"id":"maintenance/filesystems/oss","title":"Aliyun OSS","description":"\x3c!--","source":"@site/docs/maintenance/filesystems/oss.md","sourceDirName":"maintenance/filesystems","slug":"/maintenance/filesystems/oss","permalink":"/docs/next/maintenance/filesys [...]
\ No newline at end of file
diff --git a/assets/js/2fcb5bc8.9de2a3df.js b/assets/js/2fcb5bc8.9de2a3df.js
new file mode 100644
index 0000000..97fd67a
--- /dev/null
+++ b/assets/js/2fcb5bc8.9de2a3df.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkfluss_website=self.webpackChunkfluss_website||[]).push([[7400],{9324:(e,s,t)=>{t.r(s),t.d(s,{assets:()=>d,contentTitle:()=>r,default:()=>p,frontMatter:()=>i,metadata:()=>n,toc:()=>c});const n=JSON.parse('{"id":"maintenance/filesystems/hdfs","title":"HDFS","description":"HDFS (Hadoop Distributed File System) is the primary storage system used by Hadoop applications. Fluss","source":"@site/versioned_docs/version-0.6/maintenance/filesystems/hdfs.md","sourceDir [...]
\ No newline at end of file
diff --git a/assets/js/30cd2908.f58c7c7f.js b/assets/js/30cd2908.f58c7c7f.js
new file mode 100644
index 0000000..491cbc7
--- /dev/null
+++ b/assets/js/30cd2908.f58c7c7f.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkfluss_website=self.webpackChunkfluss_website||[]).push([[4616],{843:(e,n,s)=>{s.r(n),s.d(n,{assets:()=>l,contentTitle:()=>o,default:()=>h,frontMatter:()=>a,metadata:()=>r,toc:()=>d});var r=s(7086),t=s(4848),i=s(8453);const a={slug:"partial-updates",title:"Understanding Partial Updates",authors:["giannis"]},o=void 0,l={authorsImageUrls:[void 0]},d=[{value:"Partial Updates: A Different Approach with Fluss",id:"partial-updates-a-different-approach-with-fluss", [...]
\ No newline at end of file
diff --git a/assets/js/3383ef6c.2b552a69.js b/assets/js/3383ef6c.2b552a69.js
new file mode 100644
index 0000000..c09ae5e
--- /dev/null
+++ b/assets/js/3383ef6c.2b552a69.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkfluss_website=self.webpackChunkfluss_website||[]).push([[322],{4695:(e,s,r)=>{r.r(s),r.d(s,{assets:()=>d,contentTitle:()=>o,default:()=>h,frontMatter:()=>t,metadata:()=>n,toc:()=>a});const n=JSON.parse('{"id":"install-deploy/overview","title":"Overview","description":"Below, we provide an overview of the key components of a Fluss cluster, detailing their functionalities and implementations. Additionally, we will introduce the various deployment methods avai [...]
\ No newline at end of file
diff --git a/assets/js/34b70234.f2e26d48.js b/assets/js/34b70234.f2e26d48.js
new file mode 100644
index 0000000..757d871
--- /dev/null
+++ b/assets/js/34b70234.f2e26d48.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkfluss_website=self.webpackChunkfluss_website||[]).push([[3720],{3935:(t,e,i)=>{i.r(e),i.d(e,{assets:()=>d,contentTitle:()=>o,default:()=>h,frontMatter:()=>s,metadata:()=>n,toc:()=>l});const n=JSON.parse('{"id":"table-design/data-distribution/partitioning","title":"Partitioning","description":"Partitioned Tables","source":"@site/versioned_docs/version-0.6/table-design/data-distribution/partitioning.md","sourceDirName":"table-design/data-distribution","slug": [...]
\ No newline at end of file
diff --git a/assets/js/3592d2f2.a2c747f9.js b/assets/js/3592d2f2.a2c747f9.js
new file mode 100644
index 0000000..45cdaf5
--- /dev/null
+++ b/assets/js/3592d2f2.a2c747f9.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkfluss_website=self.webpackChunkfluss_website||[]).push([[3472],{7307:(e,i,n)=>{n.r(i),n.d(i,{assets:()=>a,contentTitle:()=>c,default:()=>h,frontMatter:()=>o,metadata:()=>t,toc:()=>l});const t=JSON.parse('{"id":"security/overview","title":"Security Overview","description":"\x3c!--","source":"@site/docs/security/overview.md","sourceDirName":"security","slug":"/security/overview","permalink":"/docs/next/security/overview","draft":false,"unlisted":false,"editUr [...]
\ No newline at end of file
diff --git a/assets/js/36994c47.caee855f.js b/assets/js/36994c47.caee855f.js
new file mode 100644
index 0000000..9c44d4a
--- /dev/null
+++ b/assets/js/36994c47.caee855f.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkfluss_website=self.webpackChunkfluss_website||[]).push([[9858],{5516:s=>{s.exports=JSON.parse('{"name":"docusaurus-plugin-content-blog","id":"default"}')}}]);
\ No newline at end of file
diff --git a/assets/js/36a7f4b5.0c490199.js b/assets/js/36a7f4b5.0c490199.js
new file mode 100644
index 0000000..af33ec7
--- /dev/null
+++ b/assets/js/36a7f4b5.0c490199.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkfluss_website=self.webpackChunkfluss_website||[]).push([[8269],{1789:(e,a,t)=>{t.r(a),t.d(a,{assets:()=>l,contentTitle:()=>o,default:()=>c,frontMatter:()=>r,metadata:()=>s,toc:()=>h});const s=JSON.parse('{"id":"streaming-lakehouse/overview","title":"Lakehouse Overview","description":"Introducing Lakehouse","source":"@site/versioned_docs/version-0.6/streaming-lakehouse/overview.md","sourceDirName":"streaming-lakehouse","slug":"/streaming-lakehouse/overview", [...]
\ No newline at end of file
diff --git a/assets/js/3b7198be.9de7aa70.js b/assets/js/3b7198be.9de7aa70.js
new file mode 100644
index 0000000..6f04851
--- /dev/null
+++ b/assets/js/3b7198be.9de7aa70.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkfluss_website=self.webpackChunkfluss_website||[]).push([[6800],{6242:(e,a,n)=>{n.r(a),n.d(a,{assets:()=>r,contentTitle:()=>l,default:()=>h,frontMatter:()=>o,metadata:()=>t,toc:()=>d});const t=JSON.parse('{"id":"table-design/overview","title":"Table Overview","description":"Database","source":"@site/versioned_docs/version-0.5/table-design/overview.md","sourceDirName":"table-design","slug":"/table-design/overview","permalink":"/docs/0.5/table-design/overview" [...]
\ No newline at end of file
diff --git a/assets/js/3cd58720.8859d5d7.js b/assets/js/3cd58720.8859d5d7.js
new file mode 100644
index 0000000..2faed2f
--- /dev/null
+++ b/assets/js/3cd58720.8859d5d7.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkfluss_website=self.webpackChunkfluss_website||[]).push([[5957],{7894:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>c,contentTitle:()=>o,default:()=>h,frontMatter:()=>r,metadata:()=>a,toc:()=>l});const a=JSON.parse('{"id":"apis/java-client","title":"Java Client","description":"\x3c!--","source":"@site/docs/apis/java-client.md","sourceDirName":"apis","slug":"/apis/java-client","permalink":"/docs/next/apis/java-client","draft":false,"unlisted":false,"editUrl":"https://gi [...]
\ No newline at end of file
diff --git a/assets/js/3d4c8ad2.ec6fd162.js b/assets/js/3d4c8ad2.ec6fd162.js
new file mode 100644
index 0000000..15aa905
--- /dev/null
+++ b/assets/js/3d4c8ad2.ec6fd162.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkfluss_website=self.webpackChunkfluss_website||[]).push([[6638],{992:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>o,contentTitle:()=>l,default:()=>g,frontMatter:()=>a,metadata:()=>s,toc:()=>d});const s=JSON.parse('{"id":"table-design/table-types/pk-table/merge-engines/first-row","title":"FirstRow Merge Engine","description":"\x3c!--","source":"@site/versioned_docs/version-0.7/table-design/table-types/pk-table/merge-engines/first-row.md","sourceDirName":"table-design/t [...]
\ No newline at end of file
diff --git a/assets/js/416.33bb0ef6.js b/assets/js/416.33bb0ef6.js
new file mode 100644
index 0000000..fcdd1a8
--- /dev/null
+++ b/assets/js/416.33bb0ef6.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkfluss_website=self.webpackChunkfluss_website||[]).push([[416],{416:(s,e,u)=>{u.r(e)}}]);
\ No newline at end of file
diff --git a/assets/js/41a78b98.c3d2e9f8.js b/assets/js/41a78b98.c3d2e9f8.js
new file mode 100644
index 0000000..c359f02
--- /dev/null
+++ b/assets/js/41a78b98.c3d2e9f8.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkfluss_website=self.webpackChunkfluss_website||[]).push([[323],{9459:(e,n,i)=>{i.r(n),i.d(n,{assets:()=>a,contentTitle:()=>r,default:()=>h,frontMatter:()=>l,metadata:()=>t,toc:()=>c});const t=JSON.parse('{"id":"dev/ide-setup","title":"IDE Setup","description":"\x3c!--","source":"@site/community/dev/ide-setup.md","sourceDirName":"dev","slug":"/dev/ide-setup","permalink":"/community/dev/ide-setup","draft":false,"unlisted":false,"editUrl":"https://github.com/ap [...]
\ No newline at end of file
diff --git a/assets/js/42ce4c3f.5d8dc95f.js b/assets/js/42ce4c3f.5d8dc95f.js
new file mode 100644
index 0000000..85788e3
--- /dev/null
+++ b/assets/js/42ce4c3f.5d8dc95f.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkfluss_website=self.webpackChunkfluss_website||[]).push([[5025],{9006:(e,n,i)=>{i.r(n),i.d(n,{assets:()=>c,contentTitle:()=>l,default:()=>h,frontMatter:()=>r,metadata:()=>s,toc:()=>d});const s=JSON.parse('{"id":"how-to-contribute/contribute-docs","title":"Contribute Documentation","description":"\x3c!--","source":"@site/community/how-to-contribute/contribute-docs.md","sourceDirName":"how-to-contribute","slug":"/how-to-contribute/contribute-docs","permalink": [...]
\ No newline at end of file
diff --git a/assets/js/4334.59d2d31f.js b/assets/js/4334.59d2d31f.js
new file mode 100644
index 0000000..af3d3b8
--- /dev/null
+++ b/assets/js/4334.59d2d31f.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkfluss_website=self.webpackChunkfluss_website||[]).push([[4334],{4334:(e,t,n)=>{n.r(t),n.d(t,{renderReloadPopup:()=>c});n(6540);var s=n(5338),d=n(4848);const o="pwa-popup-container",r=()=>document.getElementById(o),u=()=>{const e=document.createElement("div");return e.id=o,document.body.appendChild(e),e};function c(e){const t=r()??u();return Promise.all([n.e(1869),n.e(2362)]).then(n.bind(n,2362)).then((({default:n})=>{(0,s.createRoot)(t).render((0,d.jsx)(n,{ [...]
\ No newline at end of file
diff --git a/assets/js/458b5a55.1c0f6d2d.js b/assets/js/458b5a55.1c0f6d2d.js
new file mode 100644
index 0000000..3abbe1f
--- /dev/null
+++ b/assets/js/458b5a55.1c0f6d2d.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkfluss_website=self.webpackChunkfluss_website||[]).push([[6060],{7300:(e,a,t)=>{t.r(a),t.d(a,{assets:()=>r,contentTitle:()=>o,default:()=>h,frontMatter:()=>l,metadata:()=>n,toc:()=>d});const n=JSON.parse('{"id":"table-design/overview","title":"Table Overview","description":"\x3c!--","source":"@site/docs/table-design/overview.md","sourceDirName":"table-design","slug":"/table-design/overview","permalink":"/docs/next/table-design/overview","draft":false,"unlist [...]
\ No newline at end of file
diff --git a/assets/js/47a7ac9f.7ddcdf88.js b/assets/js/47a7ac9f.7ddcdf88.js
new file mode 100644
index 0000000..8f4f955
--- /dev/null
+++ b/assets/js/47a7ac9f.7ddcdf88.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkfluss_website=self.webpackChunkfluss_website||[]).push([[7317],{3299:(e,s,r)=>{r.r(s),r.d(s,{assets:()=>c,contentTitle:()=>l,default:()=>h,frontMatter:()=>d,metadata:()=>i,toc:()=>o});const i=JSON.parse('{"id":"security/authorization","title":"Authorization and ACLs","description":"\x3c!--","source":"@site/versioned_docs/version-0.7/security/authorization.md","sourceDirName":"security","slug":"/security/authorization","permalink":"/docs/security/authorizati [...]
\ No newline at end of file
diff --git a/assets/js/4a4f9f4e.079729e8.js b/assets/js/4a4f9f4e.079729e8.js
new file mode 100644
index 0000000..e7eb7eb
--- /dev/null
+++ b/assets/js/4a4f9f4e.079729e8.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkfluss_website=self.webpackChunkfluss_website||[]).push([[9676],{9052:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>o,contentTitle:()=>l,default:()=>p,frontMatter:()=>a,metadata:()=>s,toc:()=>d});const s=JSON.parse('{"id":"table-design/table-types/pk-table/merge-engines/first-row","title":"FirstRow Merge Engine","description":"By setting \'table.merge-engine\' = \'first_row\' in the table properties, users can retain the first record for each primary key.","source":"@s [...]
\ No newline at end of file
diff --git a/assets/js/4adbe500.508fb63a.js b/assets/js/4adbe500.508fb63a.js
new file mode 100644
index 0000000..70eaef9
--- /dev/null
+++ b/assets/js/4adbe500.508fb63a.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkfluss_website=self.webpackChunkfluss_website||[]).push([[4366],{4031:(t,e,i)=>{i.r(e),i.d(e,{assets:()=>l,contentTitle:()=>o,default:()=>h,frontMatter:()=>s,metadata:()=>n,toc:()=>d});const n=JSON.parse('{"id":"table-design/data-distribution/partitioning","title":"Partitioning","description":"\x3c!--","source":"@site/versioned_docs/version-0.7/table-design/data-distribution/partitioning.md","sourceDirName":"table-design/data-distribution","slug":"/table-des [...]
\ No newline at end of file
diff --git a/assets/js/4b45c76d.48887489.js b/assets/js/4b45c76d.48887489.js
new file mode 100644
index 0000000..94fc04b
--- /dev/null
+++ b/assets/js/4b45c76d.48887489.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkfluss_website=self.webpackChunkfluss_website||[]).push([[432],{62:(e,n,s)=>{s.r(n),s.d(n,{assets:()=>a,contentTitle:()=>o,default:()=>u,frontMatter:()=>r,metadata:()=>l,toc:()=>c});const l=JSON.parse('{"id":"install-deploy/deploying-local-cluster","title":"Deploying Local Cluster","description":"This page provides instructions on how to deploy a local cluster (on one machine, but in separate processes) for Fluss.","source":"@site/versioned_docs/version-0.5/ [...]
\ No newline at end of file
diff --git a/assets/js/4c32ba49.829e6eea.js b/assets/js/4c32ba49.829e6eea.js
new file mode 100644
index 0000000..7e9b158
--- /dev/null
+++ b/assets/js/4c32ba49.829e6eea.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkfluss_website=self.webpackChunkfluss_website||[]).push([[2469],{6603:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>d,contentTitle:()=>l,default:()=>u,frontMatter:()=>i,metadata:()=>a,toc:()=>o});const a=JSON.parse('{"id":"engine-flink/writes","title":"Flink Writes","description":"You can directly insert or update data into a Fluss table using the INSERT INTO statement.","source":"@site/versioned_docs/version-0.5/engine-flink/writes.md","sourceDirName":"engine-flink"," [...]
\ No newline at end of file
diff --git a/assets/js/4d1f660e.fe58eb7b.js b/assets/js/4d1f660e.fe58eb7b.js
new file mode 100644
index 0000000..71db7b6
--- /dev/null
+++ b/assets/js/4d1f660e.fe58eb7b.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkfluss_website=self.webpackChunkfluss_website||[]).push([[1011],{5917:(e,n,s)=>{s.r(n),s.d(n,{assets:()=>c,contentTitle:()=>l,default:()=>u,frontMatter:()=>i,metadata:()=>r,toc:()=>o});const r=JSON.parse('{"id":"quickstart/security","title":"Secure Your Fluss Cluster","description":"\x3c!--","source":"@site/versioned_docs/version-0.7/quickstart/security.md","sourceDirName":"quickstart","slug":"/quickstart/security","permalink":"/docs/quickstart/security","dr [...]
\ No newline at end of file
diff --git a/assets/js/4f3276ea.822436cb.js b/assets/js/4f3276ea.822436cb.js
new file mode 100644
index 0000000..aca3aa7
--- /dev/null
+++ b/assets/js/4f3276ea.822436cb.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkfluss_website=self.webpackChunkfluss_website||[]).push([[8323],{9586:(e,a,r)=>{r.r(a),r.d(a,{assets:()=>c,contentTitle:()=>o,default:()=>p,frontMatter:()=>i,metadata:()=>s,toc:()=>l});const s=JSON.parse('{"id":"maintenance/operations/racks","title":"Racks","description":"\x3c!--","source":"@site/versioned_docs/version-0.7/maintenance/operations/racks.md","sourceDirName":"maintenance/operations","slug":"/maintenance/operations/racks","permalink":"/docs/maint [...]
\ No newline at end of file
diff --git a/assets/js/5142b284.0055ce46.js b/assets/js/5142b284.0055ce46.js
new file mode 100644
index 0000000..70246af
--- /dev/null
+++ b/assets/js/5142b284.0055ce46.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkfluss_website=self.webpackChunkfluss_website||[]).push([[6315],{8808:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>c,contentTitle:()=>i,default:()=>h,frontMatter:()=>r,metadata:()=>s,toc:()=>l});var s=n(6836),o=n(4848),a=n(8453);const r={slug:"fluss-open-source",title:"Fluss is Now Open Source",authors:["jark","giannis"]},i=void 0,c={authorsImageUrls:[void 0,void 0]},l=[];function u(e){const t={a:"a",img:"img",p:"p",strong:"strong",...(0,a.R)(),...e.components};return [...]
\ No newline at end of file
diff --git a/assets/js/53b982b6.ba7f6e03.js b/assets/js/53b982b6.ba7f6e03.js
new file mode 100644
index 0000000..819f376
--- /dev/null
+++ b/assets/js/53b982b6.ba7f6e03.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkfluss_website=self.webpackChunkfluss_website||[]).push([[874],{6490:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>d,contentTitle:()=>r,default:()=>u,frontMatter:()=>i,metadata:()=>a,toc:()=>o});const a=JSON.parse('{"id":"engine-flink/writes","title":"Flink Writes","description":"\x3c!--","source":"@site/docs/engine-flink/writes.md","sourceDirName":"engine-flink","slug":"/engine-flink/writes","permalink":"/docs/next/engine-flink/writes","draft":false,"unlisted":false," [...]
\ No newline at end of file
diff --git a/assets/js/53e6ccc4.5193c29f.js b/assets/js/53e6ccc4.5193c29f.js
new file mode 100644
index 0000000..bca550b
--- /dev/null
+++ b/assets/js/53e6ccc4.5193c29f.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkfluss_website=self.webpackChunkfluss_website||[]).push([[2809],{1404:(e,t,s)=>{s.r(t),s.d(t,{assets:()=>l,contentTitle:()=>o,default:()=>d,frontMatter:()=>r,metadata:()=>n,toc:()=>c});var n=s(6836),i=s(4848),a=s(8453);const r={slug:"fluss-open-source",title:"Fluss is Now Open Source",authors:["jark","giannis"]},o=void 0,l={authorsImageUrls:[void 0,void 0]},c=[{value:"Real-Time Streaming Storage for the Lakehouse Era",id:"real-time-streaming-storage-for-the- [...]
\ No newline at end of file
diff --git a/assets/js/53f4d36d.56a9ebab.js b/assets/js/53f4d36d.56a9ebab.js
new file mode 100644
index 0000000..5982b1e
--- /dev/null
+++ b/assets/js/53f4d36d.56a9ebab.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkfluss_website=self.webpackChunkfluss_website||[]).push([[5440],{5630:(e,n,s)=>{s.r(n),s.d(n,{assets:()=>c,contentTitle:()=>d,default:()=>o,frontMatter:()=>l,metadata:()=>t,toc:()=>a});const t=JSON.parse('{"id":"engine-flink/getting-started","title":"Getting Started with Flink Engine","description":"Quick Start","source":"@site/versioned_docs/version-0.5/engine-flink/getting-started.md","sourceDirName":"engine-flink","slug":"/engine-flink/getting-started","p [...]
\ No newline at end of file
diff --git a/assets/js/543bd0fc.57a6a8d0.js b/assets/js/543bd0fc.57a6a8d0.js
new file mode 100644
index 0000000..c0b9bee
--- /dev/null
+++ b/assets/js/543bd0fc.57a6a8d0.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkfluss_website=self.webpackChunkfluss_website||[]).push([[6166],{7421:(t,e,i)=>{i.r(e),i.d(e,{assets:()=>d,contentTitle:()=>r,default:()=>u,frontMatter:()=>o,metadata:()=>a,toc:()=>l});const a=JSON.parse('{"id":"table-design/data-distribution/ttl","title":"TTL","description":"Fluss supports TTL for data by setting the TTL attribute for tables with \'table.log.ttl\' = \'\' (default is 7 days). Fluss can periodically and automatically check for and clean up ex [...]
\ No newline at end of file
diff --git a/assets/js/551ad8d7.52cd1fd1.js b/assets/js/551ad8d7.52cd1fd1.js
new file mode 100644
index 0000000..f0d1c31
--- /dev/null
+++ b/assets/js/551ad8d7.52cd1fd1.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkfluss_website=self.webpackChunkfluss_website||[]).push([[1476],{9951:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>d,contentTitle:()=>r,default:()=>h,frontMatter:()=>l,metadata:()=>i,toc:()=>o});const i=JSON.parse('{"id":"table-design/table-types/pk-table/index","title":"PrimaryKey Table","description":"\x3c!--","source":"@site/docs/table-design/table-types/pk-table/index.md","sourceDirName":"table-design/table-types/pk-table","slug":"/table-design/table-types/pk-tabl [...]
\ No newline at end of file
diff --git a/assets/js/55bbe4da.1b8fb9ee.js b/assets/js/55bbe4da.1b8fb9ee.js
new file mode 100644
index 0000000..155caef
--- /dev/null
+++ b/assets/js/55bbe4da.1b8fb9ee.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkfluss_website=self.webpackChunkfluss_website||[]).push([[9719],{5184:(e,s,t)=>{t.r(s),t.d(s,{assets:()=>c,contentTitle:()=>r,default:()=>m,frontMatter:()=>o,metadata:()=>n,toc:()=>d});const n=JSON.parse('{"id":"maintenance/filesystems/s3","title":"Amazon S3","description":"Amazon Simple Storage Service (Amazon S3) is cloud object storage with industry-leading scalability, data availability, security, and performance.","source":"@site/versioned_docs/version- [...]
\ No newline at end of file
diff --git a/assets/js/570364a4.4772b91e.js b/assets/js/570364a4.4772b91e.js
new file mode 100644
index 0000000..56dda38
--- /dev/null
+++ b/assets/js/570364a4.4772b91e.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkfluss_website=self.webpackChunkfluss_website||[]).push([[6585],{1746:(e,t,r)=>{r.r(t),r.d(t,{assets:()=>o,contentTitle:()=>l,default:()=>a,frontMatter:()=>d,metadata:()=>s,toc:()=>c});const s=JSON.parse('{"id":"maintenance/configuration","title":"Configuration","description":"\x3c!--","source":"@site/docs/maintenance/configuration.md","sourceDirName":"maintenance","slug":"/maintenance/configuration","permalink":"/docs/next/maintenance/configuration","draft" [...]
\ No newline at end of file
diff --git a/assets/js/578e9f93.35ce0d1d.js b/assets/js/578e9f93.35ce0d1d.js
new file mode 100644
index 0000000..b1aac4b
--- /dev/null
+++ b/assets/js/578e9f93.35ce0d1d.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkfluss_website=self.webpackChunkfluss_website||[]).push([[2451],{4250:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>d,contentTitle:()=>r,default:()=>h,frontMatter:()=>s,metadata:()=>i,toc:()=>o});const i=JSON.parse('{"id":"engine-flink/ddl","title":"Flink DDL","description":"Create Catalog","source":"@site/versioned_docs/version-0.6/engine-flink/ddl.md","sourceDirName":"engine-flink","slug":"/engine-flink/ddl","permalink":"/docs/0.6/engine-flink/ddl","draft":false,"unl [...]
\ No newline at end of file
diff --git a/assets/js/58eba370.2205147a.js b/assets/js/58eba370.2205147a.js
new file mode 100644
index 0000000..862d413
--- /dev/null
+++ b/assets/js/58eba370.2205147a.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkfluss_website=self.webpackChunkfluss_website||[]).push([[5588],{3140:(e,t,s)=>{s.r(t),s.d(t,{assets:()=>c,contentTitle:()=>i,default:()=>u,frontMatter:()=>o,metadata:()=>n,toc:()=>d});const n=JSON.parse('{"id":"maintenance/tiered-storage/overview","title":"Overview","description":"With tiered storage, Fluss allows you to scale compute and storage resources independently, provides better client isolation, and","source":"@site/versioned_docs/version-0.6/maint [...]
\ No newline at end of file
diff --git a/assets/js/59852834.2244b34d.js b/assets/js/59852834.2244b34d.js
new file mode 100644
index 0000000..54422d3
--- /dev/null
+++ b/assets/js/59852834.2244b34d.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkfluss_website=self.webpackChunkfluss_website||[]).push([[9707],{7899:(e,n,s)=>{s.r(n),s.d(n,{assets:()=>d,contentTitle:()=>o,default:()=>h,frontMatter:()=>i,metadata:()=>r,toc:()=>a});const r=JSON.parse('{"id":"install-deploy/overview","title":"Installation & Deployment","description":"\x3c!--","source":"@site/docs/install-deploy/overview.md","sourceDirName":"install-deploy","slug":"/install-deploy/overview","permalink":"/docs/next/install-deploy/overview", [...]
\ No newline at end of file
diff --git a/assets/js/5ae8404d.2a206122.js b/assets/js/5ae8404d.2a206122.js
new file mode 100644
index 0000000..b0bfd98
--- /dev/null
+++ b/assets/js/5ae8404d.2a206122.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkfluss_website=self.webpackChunkfluss_website||[]).push([[5902],{5120:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>c,contentTitle:()=>o,default:()=>h,frontMatter:()=>r,metadata:()=>a,toc:()=>l});const a=JSON.parse('{"id":"apis/java-client","title":"Java Client","description":"\x3c!--","source":"@site/versioned_docs/version-0.7/apis/java-client.md","sourceDirName":"apis","slug":"/apis/java-client","permalink":"/docs/apis/java-client","draft":false,"unlisted":false,"edi [...]
\ No newline at end of file
diff --git a/assets/js/5b51c36f.29d7209f.js b/assets/js/5b51c36f.29d7209f.js
new file mode 100644
index 0000000..e871577
--- /dev/null
+++ b/assets/js/5b51c36f.29d7209f.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkfluss_website=self.webpackChunkfluss_website||[]).push([[3030],{2421:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>d,contentTitle:()=>r,default:()=>h,frontMatter:()=>l,metadata:()=>a,toc:()=>o});const a=JSON.parse('{"id":"engine-flink/ddl","title":"Flink DDL","description":"Create Catalog","source":"@site/versioned_docs/version-0.5/engine-flink/ddl.md","sourceDirName":"engine-flink","slug":"/engine-flink/ddl","permalink":"/docs/0.5/engine-flink/ddl","draft":false,"unl [...]
\ No newline at end of file
diff --git a/assets/js/5b5e36b9.fe6c15e3.js b/assets/js/5b5e36b9.fe6c15e3.js
new file mode 100644
index 0000000..0c508de
--- /dev/null
+++ b/assets/js/5b5e36b9.fe6c15e3.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkfluss_website=self.webpackChunkfluss_website||[]).push([[3384],{982:(e,n,i)=>{i.r(n),i.d(n,{assets:()=>c,contentTitle:()=>o,default:()=>u,frontMatter:()=>l,metadata:()=>s,toc:()=>a});const s=JSON.parse('{"id":"dev/building","title":"Building Fluss","description":"\x3c!--","source":"@site/community/dev/building.md","sourceDirName":"dev","slug":"/dev/building","permalink":"/community/dev/building","draft":false,"unlisted":false,"editUrl":"https://github.com/a [...]
\ No newline at end of file
diff --git a/assets/js/5c1b820e.6b9a6e84.js b/assets/js/5c1b820e.6b9a6e84.js
new file mode 100644
index 0000000..dd35cd5
--- /dev/null
+++ b/assets/js/5c1b820e.6b9a6e84.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkfluss_website=self.webpackChunkfluss_website||[]).push([[1197],{925:(e,a,t)=>{t.r(a),t.d(a,{assets:()=>l,contentTitle:()=>i,default:()=>d,frontMatter:()=>o,metadata:()=>s,toc:()=>c});const s=JSON.parse('{"id":"maintenance/tiered-storage/lakehouse-storage","title":"Lakehouse Storage","description":"Lakehouse represents a new, open architecture that combines the best elements of data lakes and data warehouses.","source":"@site/versioned_docs/version-0.5/maint [...]
\ No newline at end of file
diff --git a/assets/js/5c9f4624.63b805a6.js b/assets/js/5c9f4624.63b805a6.js
new file mode 100644
index 0000000..dbbd792
--- /dev/null
+++ b/assets/js/5c9f4624.63b805a6.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkfluss_website=self.webpackChunkfluss_website||[]).push([[9678],{1889:(e,n,s)=>{s.r(n),s.d(n,{assets:()=>l,contentTitle:()=>o,default:()=>m,frontMatter:()=>i,metadata:()=>r,toc:()=>c});const r=JSON.parse('{"id":"maintenance/observability/quickstart","title":"Observability Quickstart Guides","description":"\x3c!--","source":"@site/docs/maintenance/observability/quickstart.md","sourceDirName":"maintenance/observability","slug":"/maintenance/observability/quick [...]
\ No newline at end of file
diff --git a/assets/js/5e95c892.b0b1bb64.js b/assets/js/5e95c892.b0b1bb64.js
new file mode 100644
index 0000000..a7f0a59
--- /dev/null
+++ b/assets/js/5e95c892.b0b1bb64.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkfluss_website=self.webpackChunkfluss_website||[]).push([[9647],{7121:(e,s,r)=>{r.r(s),r.d(s,{default:()=>f});r(6540);var u=r(4164),t=r(5500),a=r(7559),c=r(2831),l=r(6716),n=r(4848);function f(e){return(0,n.jsx)(t.e3,{className:(0,u.A)(a.G.wrapper.docsPages),children:(0,n.jsx)(l.A,{children:(0,c.v)(e.route.routes)})})}}}]);
\ No newline at end of file
diff --git a/assets/js/5eb2b302.c50021d8.js b/assets/js/5eb2b302.c50021d8.js
new file mode 100644
index 0000000..c08a836
--- /dev/null
+++ b/assets/js/5eb2b302.c50021d8.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkfluss_website=self.webpackChunkfluss_website||[]).push([[3766],{5039:(e,i,n)=>{n.r(i),n.d(i,{assets:()=>l,contentTitle:()=>o,default:()=>h,frontMatter:()=>r,metadata:()=>s,toc:()=>c});var s=n(8828),a=n(4848),t=n(8453);const r={slug:"unified-streaming-lakehouse",title:"Towards A Unified Streaming & Lakehouse Architecture",sidebar_label:"Toward Streaming Lakehouse",authors:["yuxia"]},o=void 0,l={authorsImageUrls:[void 0]},c=[{value:"Fluss Unified Streaming &a [...]
\ No newline at end of file
diff --git a/assets/js/5f03234c.db475889.js b/assets/js/5f03234c.db475889.js
new file mode 100644
index 0000000..84c590c
--- /dev/null
+++ b/assets/js/5f03234c.db475889.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkfluss_website=self.webpackChunkfluss_website||[]).push([[4803],{6417:(e,n,s)=>{s.r(n),s.d(n,{assets:()=>o,contentTitle:()=>l,default:()=>h,frontMatter:()=>i,metadata:()=>t,toc:()=>c});const t=JSON.parse('{"id":"quickstart/flink","title":"Real-Time Analytics with Flink.","description":"\x3c!--","source":"@site/versioned_docs/version-0.7/quickstart/flink.md","sourceDirName":"quickstart","slug":"/quickstart/flink","permalink":"/docs/quickstart/flink","draft":f [...]
\ No newline at end of file
diff --git a/assets/js/61744635.663e727f.js b/assets/js/61744635.663e727f.js
new file mode 100644
index 0000000..37de434
--- /dev/null
+++ b/assets/js/61744635.663e727f.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkfluss_website=self.webpackChunkfluss_website||[]).push([[8123],{1847:(e,a,s)=>{s.r(a),s.d(a,{assets:()=>l,contentTitle:()=>o,default:()=>h,frontMatter:()=>i,metadata:()=>t,toc:()=>d});const t=JSON.parse('{"id":"maintenance/tiered-storage/lakehouse-storage","title":"Lakehouse Storage","description":"\x3c!--","source":"@site/versioned_docs/version-0.7/maintenance/tiered-storage/lakehouse-storage.md","sourceDirName":"maintenance/tiered-storage","slug":"/mainte [...]
\ No newline at end of file
diff --git a/assets/js/61e3d4cc.5a748462.js b/assets/js/61e3d4cc.5a748462.js
new file mode 100644
index 0000000..891fab2
--- /dev/null
+++ b/assets/js/61e3d4cc.5a748462.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkfluss_website=self.webpackChunkfluss_website||[]).push([[9910],{2813:(e,t,a)=>{a.r(t),a.d(t,{assets:()=>l,contentTitle:()=>o,default:()=>h,frontMatter:()=>r,metadata:()=>i,toc:()=>c});var i=a(7848),s=a(4848),n=a(8453);const r={slug:"fluss-intro",title:"Introducing Fluss: Streaming Storage for Real-Time Analytics",sidebar_label:"Introducing Fluss",authors:["jark"]},o=void 0,l={authorsImageUrls:[void 0]},c=[{value:"Key Features of Fluss",id:"key-features-of-f [...]
\ No newline at end of file
diff --git a/assets/js/621db11d.11d26f97.js b/assets/js/621db11d.11d26f97.js
new file mode 100644
index 0000000..6ca1aa6
--- /dev/null
+++ b/assets/js/621db11d.11d26f97.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkfluss_website=self.webpackChunkfluss_website||[]).push([[4212],{3250:(s,t,e)=>{e.r(t),e.d(t,{default:()=>m});e(6540);var a=e(4164),r=e(5500),o=e(7559),u=e(6461),l=e(8027),n=e(1463),i=e(1107),c=e(6382);const h={authorListItem:"authorListItem_n3yI"};var g=e(4848);function p({author:s}){return(0,g.jsx)("li",{className:h.authorListItem,children:(0,g.jsx)(c.A,{as:"h2",author:s,count:s.count})})}function d({authors:s}){return(0,g.jsx)("section",{className:(0,a.A) [...]
\ No newline at end of file
diff --git a/assets/js/62a7ca7a.7cbc4cfd.js b/assets/js/62a7ca7a.7cbc4cfd.js
new file mode 100644
index 0000000..5ff6f06
--- /dev/null
+++ b/assets/js/62a7ca7a.7cbc4cfd.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkfluss_website=self.webpackChunkfluss_website||[]).push([[275],{4598:(e,a,n)=>{n.r(a),n.d(a,{assets:()=>r,contentTitle:()=>l,default:()=>h,frontMatter:()=>o,metadata:()=>t,toc:()=>d});const t=JSON.parse('{"id":"table-design/overview","title":"Table Overview","description":"Database","source":"@site/versioned_docs/version-0.6/table-design/overview.md","sourceDirName":"table-design","slug":"/table-design/overview","permalink":"/docs/0.6/table-design/overview", [...]
\ No newline at end of file
diff --git a/assets/js/6633675b.152a5aa5.js b/assets/js/6633675b.152a5aa5.js
new file mode 100644
index 0000000..d2b9394
--- /dev/null
+++ b/assets/js/6633675b.152a5aa5.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkfluss_website=self.webpackChunkfluss_website||[]).push([[4850],{7929:(e,n,s)=>{s.r(n),s.d(n,{assets:()=>d,contentTitle:()=>o,default:()=>h,frontMatter:()=>l,metadata:()=>r,toc:()=>a});const r=JSON.parse('{"id":"install-deploy/deploying-distributed-cluster","title":"Deploying Distributed Cluster","description":"\x3c!--","source":"@site/docs/install-deploy/deploying-distributed-cluster.md","sourceDirName":"install-deploy","slug":"/install-deploy/deploying-dis [...]
\ No newline at end of file
diff --git a/assets/js/671ce0dc.2e85b86f.js b/assets/js/671ce0dc.2e85b86f.js
new file mode 100644
index 0000000..e6f4edd
--- /dev/null
+++ b/assets/js/671ce0dc.2e85b86f.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkfluss_website=self.webpackChunkfluss_website||[]).push([[750],{2246:(e,n,s)=>{s.r(n),s.d(n,{assets:()=>c,contentTitle:()=>a,default:()=>u,frontMatter:()=>r,metadata:()=>o,toc:()=>l});const o=JSON.parse('{"id":"maintenance/filesystems/oss","title":"Aliyun OSS","description":"\x3c!--","source":"@site/versioned_docs/version-0.7/maintenance/filesystems/oss.md","sourceDirName":"maintenance/filesystems","slug":"/maintenance/filesystems/oss","permalink":"/docs/mai [...]
\ No newline at end of file
diff --git a/assets/js/67628f41.3cebbfec.js b/assets/js/67628f41.3cebbfec.js
new file mode 100644
index 0000000..5081483
--- /dev/null
+++ b/assets/js/67628f41.3cebbfec.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkfluss_website=self.webpackChunkfluss_website||[]).push([[8221],{8055:(e,n,s)=>{s.r(n),s.d(n,{assets:()=>o,contentTitle:()=>l,default:()=>h,frontMatter:()=>i,metadata:()=>t,toc:()=>c});const t=JSON.parse('{"id":"quickstart/flink","title":"Real-Time Analytics with Flink.","description":"\x3c!--","source":"@site/docs/quickstart/flink.md","sourceDirName":"quickstart","slug":"/quickstart/flink","permalink":"/docs/next/quickstart/flink","draft":false,"unlisted":f [...]
\ No newline at end of file
diff --git a/assets/js/6872a836.83c6a7a9.js b/assets/js/6872a836.83c6a7a9.js
new file mode 100644
index 0000000..9cb231a
--- /dev/null
+++ b/assets/js/6872a836.83c6a7a9.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkfluss_website=self.webpackChunkfluss_website||[]).push([[9390],{3875:e=>{e.exports=JSON.parse('{"version":{"pluginId":"default","version":"0.6","label":"0.6","banner":"unmaintained","badge":true,"noIndex":false,"className":"docs-version-0.6","isLast":false,"docsSidebars":{"docsSidebar":[{"type":"link","label":"Introduction","href":"/docs/0.6/intro","docId":"intro","unlisted":false},{"type":"category","label":"Quick Start","collapsible":true,"collapsed":true [...]
\ No newline at end of file
diff --git a/assets/js/6875c492.6005760d.js b/assets/js/6875c492.6005760d.js
new file mode 100644
index 0000000..8f64260
--- /dev/null
+++ b/assets/js/6875c492.6005760d.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkfluss_website=self.webpackChunkfluss_website||[]).push([[4813],{7713:(e,t,a)=>{a.d(t,{A:()=>r});a(6540);var n=a(1312),s=a(9022),i=a(4848);function r(e){const{metadata:t}=e,{previousPage:a,nextPage:r}=t;return(0,i.jsxs)("nav",{className:"pagination-nav","aria-label":(0,n.T)({id:"theme.blog.paginator.navAriaLabel",message:"Blog list page navigation",description:"The ARIA label for the blog pagination"}),children:[a&&(0,i.jsx)(s.A,{permalink:a,title:(0,i.jsx)( [...]
\ No newline at end of file
diff --git a/assets/js/6892f617.8d5c279a.js b/assets/js/6892f617.8d5c279a.js
new file mode 100644
index 0000000..8c9f995
--- /dev/null
+++ b/assets/js/6892f617.8d5c279a.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkfluss_website=self.webpackChunkfluss_website||[]).push([[7828],{898:(e,r,t)=>{t.r(r),t.d(r,{assets:()=>a,contentTitle:()=>l,default:()=>h,frontMatter:()=>o,metadata:()=>s,toc:()=>c});const s=JSON.parse('{"id":"maintenance/observability/metric-reporters","title":"Metric Reporters","description":"\x3c!--","source":"@site/docs/maintenance/observability/metric-reporters.md","sourceDirName":"maintenance/observability","slug":"/maintenance/observability/metric-re [...]
\ No newline at end of file
diff --git a/assets/js/6ada9c37.e19625ea.js b/assets/js/6ada9c37.e19625ea.js
new file mode 100644
index 0000000..ca98d2d
--- /dev/null
+++ b/assets/js/6ada9c37.e19625ea.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkfluss_website=self.webpackChunkfluss_website||[]).push([[3295],{5024:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>l,contentTitle:()=>r,default:()=>f,frontMatter:()=>i,metadata:()=>s,toc:()=>u});var s=n(6990),o=n(4848),a=n(8453);const i={slug:"why-fluss",title:"Why Fluss? Top 4 Challenges of Using Kafka for Real-Time Analytics",sidebar_label:"Why Fluss? Top 4 Challenges of Kafka",authors:["jark"]},r=void 0,l={authorsImageUrls:[void 0]},u=[];function c(e){const t={p:"p [...]
\ No newline at end of file
diff --git a/assets/js/6e1c1147.ad5293df.js b/assets/js/6e1c1147.ad5293df.js
new file mode 100644
index 0000000..45fd65a
--- /dev/null
+++ b/assets/js/6e1c1147.ad5293df.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkfluss_website=self.webpackChunkfluss_website||[]).push([[4405],{2313:(e,t,r)=>{r.r(t),r.d(t,{assets:()=>l,contentTitle:()=>a,default:()=>h,frontMatter:()=>i,metadata:()=>n,toc:()=>d});const n=JSON.parse('{"id":"concepts/architecture","title":"Architecture","description":"A Fluss cluster consists of two main processes: the CoordinatorServer and the TabletServer.","source":"@site/versioned_docs/version-0.5/concepts/architecture.md","sourceDirName":"concepts", [...]
\ No newline at end of file
diff --git a/assets/js/6f39ec98.45eeb395.js b/assets/js/6f39ec98.45eeb395.js
new file mode 100644
index 0000000..2870165
--- /dev/null
+++ b/assets/js/6f39ec98.45eeb395.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkfluss_website=self.webpackChunkfluss_website||[]).push([[3676],{3792:(e,t,o)=>{o.r(t),o.d(t,{assets:()=>i,contentTitle:()=>l,default:()=>h,frontMatter:()=>a,metadata:()=>s,toc:()=>d});const s=JSON.parse('{"id":"maintenance/tiered-storage/remote-storage","title":"Remote Storage","description":"Remote storage usually means a cost-efficient and fault-tolerant storage comparing to local disk, such as S3, HDFS, OSS.","source":"@site/versioned_docs/version-0.6/ma [...]
\ No newline at end of file
diff --git a/assets/js/6f951a55.51feb855.js b/assets/js/6f951a55.51feb855.js
new file mode 100644
index 0000000..6f9dc73
--- /dev/null
+++ b/assets/js/6f951a55.51feb855.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkfluss_website=self.webpackChunkfluss_website||[]).push([[1477],{5862:(e,n,i)=>{i.r(n),i.d(n,{assets:()=>l,contentTitle:()=>o,default:()=>h,frontMatter:()=>r,metadata:()=>t,toc:()=>c});var t=i(637),s=i(4848),a=i(8453);const r={title:"Announcing Fluss 0.7",authors:["jark"],date:new Date("2025-06-18T00:00:00.000Z"),tags:["releases"]},o=void 0,l={authorsImageUrls:[void 0]},c=[{value:"Stability Enhancements",id:"stability-enhancements",level:2},{value:"New Archi [...]
\ No newline at end of file
diff --git a/assets/js/6fa4a995.52b891b8.js b/assets/js/6fa4a995.52b891b8.js
new file mode 100644
index 0000000..3931f56
--- /dev/null
+++ b/assets/js/6fa4a995.52b891b8.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkfluss_website=self.webpackChunkfluss_website||[]).push([[8784],{1025:(e,s,r)=>{r.r(s),r.d(s,{assets:()=>d,contentTitle:()=>o,default:()=>h,frontMatter:()=>t,metadata:()=>n,toc:()=>a});const n=JSON.parse('{"id":"install-deploy/overview","title":"Overview","description":"Below, we provide an overview of the key components of a Fluss cluster, detailing their functionalities and implementations. Additionally, we will introduce the various deployment methods ava [...]
\ No newline at end of file
diff --git a/assets/js/7042dea6.aef4482b.js b/assets/js/7042dea6.aef4482b.js
new file mode 100644
index 0000000..d441d84
--- /dev/null
+++ b/assets/js/7042dea6.aef4482b.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkfluss_website=self.webpackChunkfluss_website||[]).push([[2760],{3060:(e,s,n)=>{n.r(s),n.d(s,{assets:()=>d,contentTitle:()=>o,default:()=>u,frontMatter:()=>r,metadata:()=>i,toc:()=>c});const i=JSON.parse('{"id":"dev/building","title":"Building Fluss from Source","description":"This page covers how to build Fluss 0.6.0-SNAPSHOT from sources.","source":"@site/versioned_docs/version-0.5/dev/building.md","sourceDirName":"dev","slug":"/dev/building","permalink":" [...]
\ No newline at end of file
diff --git a/assets/js/7341f5c8.ba95cdab.js b/assets/js/7341f5c8.ba95cdab.js
new file mode 100644
index 0000000..7376ab9
--- /dev/null
+++ b/assets/js/7341f5c8.ba95cdab.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkfluss_website=self.webpackChunkfluss_website||[]).push([[2394],{5604:(e,a,i)=>{i.r(a),i.d(a,{assets:()=>l,contentTitle:()=>o,default:()=>h,frontMatter:()=>r,metadata:()=>s,toc:()=>c});var s=i(6990),t=i(4848),n=i(8453);const r={slug:"why-fluss",title:"Why Fluss? Top 4 Challenges of Using Kafka for Real-Time Analytics",sidebar_label:"Why Fluss? Top 4 Challenges of Kafka",authors:["jark"]},o=void 0,l={authorsImageUrls:[void 0]},c=[{value:"Kafka Falls Short in [...]
\ No newline at end of file
diff --git a/assets/js/74c0211a.a89d76c6.js b/assets/js/74c0211a.a89d76c6.js
new file mode 100644
index 0000000..f744768
--- /dev/null
+++ b/assets/js/74c0211a.a89d76c6.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkfluss_website=self.webpackChunkfluss_website||[]).push([[9918],{8968:(e,t,i)=>{i.r(t),i.d(t,{assets:()=>d,contentTitle:()=>o,default:()=>c,frontMatter:()=>l,metadata:()=>r,toc:()=>a});const r=JSON.parse('{"id":"engine-flink/options","title":"Connector Options","description":"The following table lists the options that can be used to configure the Fluss table in Flink, including the storage format, the read/write behaviors.","source":"@site/versioned_docs/ver [...]
\ No newline at end of file
diff --git a/assets/js/7518.ce485ab7.js b/assets/js/7518.ce485ab7.js
new file mode 100644
index 0000000..b83f230
--- /dev/null
+++ b/assets/js/7518.ce485ab7.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkfluss_website=self.webpackChunkfluss_website||[]).push([[7518],{1715:(e,t,s)=>{s.d(t,{in:()=>c,OU:()=>A,Ki:()=>k,kJ:()=>x,x:()=>l,e7:()=>h,J_:()=>p,Gx:()=>N});var a=s(6540),n=s(9532),i=s(6803),r=s(4848);function l(){const e=(0,i.A)(),t=e?.data?.blogMetadata;if(!t)throw new Error("useBlogMetadata() can't be called on the current route because the blog metadata could not be found in route context");return t}const o=a.createContext(null);function c({children:e [...]
\ No newline at end of file
diff --git a/assets/js/75814064.622992bb.js b/assets/js/75814064.622992bb.js
new file mode 100644
index 0000000..698c5c7
--- /dev/null
+++ b/assets/js/75814064.622992bb.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkfluss_website=self.webpackChunkfluss_website||[]).push([[8152],{6262:(e,l,n)=>{n.r(l),n.d(l,{assets:()=>a,contentTitle:()=>o,default:()=>u,frontMatter:()=>r,metadata:()=>s,toc:()=>c});const s=JSON.parse('{"id":"install-deploy/deploying-local-cluster","title":"Deploying Local Cluster","description":"\x3c!--","source":"@site/docs/install-deploy/deploying-local-cluster.md","sourceDirName":"install-deploy","slug":"/install-deploy/deploying-local-cluster","perma [...]
\ No newline at end of file
diff --git a/assets/js/766a25e8.14effa8a.js b/assets/js/766a25e8.14effa8a.js
new file mode 100644
index 0000000..0e55882
--- /dev/null
+++ b/assets/js/766a25e8.14effa8a.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkfluss_website=self.webpackChunkfluss_website||[]).push([[3211],{6587:(e,t,o)=>{o.r(t),o.d(t,{assets:()=>i,contentTitle:()=>l,default:()=>h,frontMatter:()=>a,metadata:()=>s,toc:()=>d});const s=JSON.parse('{"id":"maintenance/tiered-storage/remote-storage","title":"Remote Storage","description":"\x3c!--","source":"@site/versioned_docs/version-0.7/maintenance/tiered-storage/remote-storage.md","sourceDirName":"maintenance/tiered-storage","slug":"/maintenance/tie [...]
\ No newline at end of file
diff --git a/assets/js/793af37f.de43513f.js b/assets/js/793af37f.de43513f.js
new file mode 100644
index 0000000..99179e6
--- /dev/null
+++ b/assets/js/793af37f.de43513f.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkfluss_website=self.webpackChunkfluss_website||[]).push([[2769],{1481:(e,n,s)=>{s.r(n),s.d(n,{assets:()=>o,contentTitle:()=>l,default:()=>h,frontMatter:()=>a,metadata:()=>i,toc:()=>d});const i=JSON.parse('{"id":"table-design/table-types/pk-table/merge-engines/versioned","title":"Versioned Merge Engine","description":"The Versioned Merge Engine enables data updates based on version numbers or event timestamps. It ensures that only the row with the highest ver [...]
\ No newline at end of file
diff --git a/assets/js/7a67eafe.240f8edf.js b/assets/js/7a67eafe.240f8edf.js
new file mode 100644
index 0000000..37cf59f
--- /dev/null
+++ b/assets/js/7a67eafe.240f8edf.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkfluss_website=self.webpackChunkfluss_website||[]).push([[891],{6467:(e,a,t)=>{t.r(a),t.d(a,{assets:()=>l,contentTitle:()=>o,default:()=>c,frontMatter:()=>r,metadata:()=>s,toc:()=>h});const s=JSON.parse('{"id":"streaming-lakehouse/overview","title":"Lakehouse Overview","description":"\x3c!--","source":"@site/docs/streaming-lakehouse/overview.md","sourceDirName":"streaming-lakehouse","slug":"/streaming-lakehouse/overview","permalink":"/docs/next/streaming-lak [...]
\ No newline at end of file
diff --git a/assets/js/7b6674ff.4e53dd13.js b/assets/js/7b6674ff.4e53dd13.js
new file mode 100644
index 0000000..4bbde14
--- /dev/null
+++ b/assets/js/7b6674ff.4e53dd13.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkfluss_website=self.webpackChunkfluss_website||[]).push([[8729],{1913:(e,s,n)=>{n.r(s),n.d(s,{assets:()=>c,contentTitle:()=>a,default:()=>u,frontMatter:()=>r,metadata:()=>o,toc:()=>d});const o=JSON.parse('{"id":"maintenance/filesystems/oss","title":"Aliyun OSS","description":"OSS: Object Storage Service","source":"@site/versioned_docs/version-0.5/maintenance/filesystems/oss.md","sourceDirName":"maintenance/filesystems","slug":"/maintenance/filesystems/oss"," [...]
\ No newline at end of file
diff --git a/assets/js/7eb6f3f2.640ea4da.js b/assets/js/7eb6f3f2.640ea4da.js
new file mode 100644
index 0000000..bd44512
--- /dev/null
+++ b/assets/js/7eb6f3f2.640ea4da.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkfluss_website=self.webpackChunkfluss_website||[]).push([[90],{9361:(e,t,s)=>{s.r(t),s.d(t,{assets:()=>o,contentTitle:()=>d,default:()=>h,frontMatter:()=>a,metadata:()=>n,toc:()=>c});const n=JSON.parse('{"id":"table-design/data-types","title":"Data Types","description":"\x3c!--","source":"@site/docs/table-design/data-types.md","sourceDirName":"table-design","slug":"/table-design/data-types","permalink":"/docs/next/table-design/data-types","draft":false,"unli [...]
\ No newline at end of file
diff --git a/assets/js/7fff8ac1.a485420d.js b/assets/js/7fff8ac1.a485420d.js
new file mode 100644
index 0000000..08bf8ce
--- /dev/null
+++ b/assets/js/7fff8ac1.a485420d.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkfluss_website=self.webpackChunkfluss_website||[]).push([[2389],{4969:(e,n,i)=>{i.r(n),i.d(n,{assets:()=>o,contentTitle:()=>l,default:()=>h,frontMatter:()=>c,metadata:()=>t,toc:()=>a});const t=JSON.parse('{"id":"security/authentication","title":"Security Authentication","description":"\x3c!--","source":"@site/docs/security/authentication.md","sourceDirName":"security","slug":"/security/authentication","permalink":"/docs/next/security/authentication","draft": [...]
\ No newline at end of file
diff --git a/assets/js/814f3328.9279044d.js b/assets/js/814f3328.9279044d.js
new file mode 100644
index 0000000..73cbd85
--- /dev/null
+++ b/assets/js/814f3328.9279044d.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkfluss_website=self.webpackChunkfluss_website||[]).push([[7472],{5513:e=>{e.exports=JSON.parse('{"title":"All our posts","items":[{"title":"Announcing Fluss 0.7","permalink":"/blog/releases/0.7","unlisted":false,"date":"2025-06-18T00:00:00.000Z"},{"title":"Understanding Partial Updates","permalink":"/blog/partial-updates","unlisted":false,"date":"2025-06-01T00:00:00.000Z"},{"title":"The Story of Fluss Logo","permalink":"/blog/unveil-fluss-logo","unlisted":fa [...]
\ No newline at end of file
diff --git a/assets/js/8158.9845449e.js b/assets/js/8158.9845449e.js
new file mode 100644
index 0000000..f13eef1
--- /dev/null
+++ b/assets/js/8158.9845449e.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkfluss_website=self.webpackChunkfluss_website||[]).push([[8158],{8158:(s,e,a)=>{a.r(e),a.d(e,{DocSearchModal:()=>u.a1});var u=a(3219)}}]);
\ No newline at end of file
diff --git a/assets/js/819b95c6.6f199823.js b/assets/js/819b95c6.6f199823.js
new file mode 100644
index 0000000..a9787d2
--- /dev/null
+++ b/assets/js/819b95c6.6f199823.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkfluss_website=self.webpackChunkfluss_website||[]).push([[9826],{2003:(e,r,s)=>{s.r(r),s.d(r,{assets:()=>i,contentTitle:()=>a,default:()=>u,frontMatter:()=>l,metadata:()=>n,toc:()=>d});const n=JSON.parse('{"id":"install-deploy/deploying-with-docker","title":"Deploying with Docker","description":"This guide will show you how to run a Fluss cluster using Docker. In this guide, we will introduce the prerequisites of","source":"@site/versioned_docs/version-0.5/i [...]
\ No newline at end of file
diff --git a/assets/js/81a7527c.5e5d99c5.js b/assets/js/81a7527c.5e5d99c5.js
new file mode 100644
index 0000000..ce07ad2
--- /dev/null
+++ b/assets/js/81a7527c.5e5d99c5.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkfluss_website=self.webpackChunkfluss_website||[]).push([[8389],{4124:(t,e,i)=>{i.r(e),i.d(e,{assets:()=>d,contentTitle:()=>r,default:()=>u,frontMatter:()=>o,metadata:()=>a,toc:()=>l});const a=JSON.parse('{"id":"table-design/data-distribution/ttl","title":"TTL","description":"Fluss supports TTL for data by setting the TTL attribute for tables with \'table.log.ttl\' = \'\' (default is 7 days). Fluss can periodically and automatically check for and clean up ex [...]
\ No newline at end of file
diff --git a/assets/js/82b3d388.b7e34806.js b/assets/js/82b3d388.b7e34806.js
new file mode 100644
index 0000000..9ba4888
--- /dev/null
+++ b/assets/js/82b3d388.b7e34806.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkfluss_website=self.webpackChunkfluss_website||[]).push([[4715],{5220:(e,s,n)=>{n.r(s),n.d(s,{assets:()=>a,contentTitle:()=>o,default:()=>h,frontMatter:()=>r,metadata:()=>i,toc:()=>c});const i=JSON.parse('{"id":"maintenance/filesystems/overview","title":"File Systems","description":"\x3c!--","source":"@site/versioned_docs/version-0.7/maintenance/filesystems/overview.md","sourceDirName":"maintenance/filesystems","slug":"/maintenance/filesystems/overview","per [...]
\ No newline at end of file
diff --git a/assets/js/831425ee.44b4dde7.js b/assets/js/831425ee.44b4dde7.js
new file mode 100644
index 0000000..ac07698
--- /dev/null
+++ b/assets/js/831425ee.44b4dde7.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkfluss_website=self.webpackChunkfluss_website||[]).push([[7390],{1748:(e,n,s)=>{s.r(n),s.d(n,{assets:()=>o,contentTitle:()=>l,default:()=>h,frontMatter:()=>i,metadata:()=>t,toc:()=>c});const t=JSON.parse('{"id":"quickstart/flink","title":"Real-Time Analytics With Flink","description":"This guide will get you up and running with Apache Flink to do real-time analytics, covering some powerful features of Fluss,","source":"@site/versioned_docs/version-0.6/quicks [...]
\ No newline at end of file
diff --git a/assets/js/84700fe1.5f474ed8.js b/assets/js/84700fe1.5f474ed8.js
new file mode 100644
index 0000000..f1a5924
--- /dev/null
+++ b/assets/js/84700fe1.5f474ed8.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkfluss_website=self.webpackChunkfluss_website||[]).push([[9922],{1925:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>o,contentTitle:()=>r,default:()=>h,frontMatter:()=>l,metadata:()=>s,toc:()=>c});const s=JSON.parse('{"id":"engine-flink/reads","title":"Flink Reads","description":"Fluss supports streaming and batch read with Apache Flink\'s SQL & Table API. Execute the following SQL command to switch execution mode from streaming to batch, and vice versa:","source":"@sit [...]
\ No newline at end of file
diff --git a/assets/js/87ceda19.bb5e8c0e.js b/assets/js/87ceda19.bb5e8c0e.js
new file mode 100644
index 0000000..9039d66
--- /dev/null
+++ b/assets/js/87ceda19.bb5e8c0e.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkfluss_website=self.webpackChunkfluss_website||[]).push([[4503],{623:(e,t,i)=>{i.r(t),i.d(t,{assets:()=>o,contentTitle:()=>c,default:()=>u,frontMatter:()=>a,metadata:()=>n,toc:()=>d});const n=JSON.parse('{"id":"table-design/data-distribution/bucketing","title":"Bucketing","description":"\x3c!--","source":"@site/docs/table-design/data-distribution/bucketing.md","sourceDirName":"table-design/data-distribution","slug":"/table-design/data-distribution/bucketing" [...]
\ No newline at end of file
diff --git a/assets/js/8913.091ca4da.js b/assets/js/8913.091ca4da.js
new file mode 100644
index 0000000..3afafa7
--- /dev/null
+++ b/assets/js/8913.091ca4da.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkfluss_website=self.webpackChunkfluss_website||[]).push([[8913],{8913:(s,e,u)=>{u.r(e)}}]);
\ No newline at end of file
diff --git a/assets/js/8a1416ba.b2413a8e.js b/assets/js/8a1416ba.b2413a8e.js
new file mode 100644
index 0000000..334d938
--- /dev/null
+++ b/assets/js/8a1416ba.b2413a8e.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkfluss_website=self.webpackChunkfluss_website||[]).push([[7699],{5427:(e,t,r)=>{r.r(t),r.d(t,{assets:()=>l,contentTitle:()=>a,default:()=>h,frontMatter:()=>o,metadata:()=>n,toc:()=>c});const n=JSON.parse('{"id":"concepts/architecture","title":"Architecture","description":"\x3c!--","source":"@site/docs/concepts/architecture.md","sourceDirName":"concepts","slug":"/concepts/architecture","permalink":"/docs/next/concepts/architecture","draft":false,"unlisted":fa [...]
\ No newline at end of file
diff --git a/assets/js/8b1cd994.de28797f.js b/assets/js/8b1cd994.de28797f.js
new file mode 100644
index 0000000..27f1522
--- /dev/null
+++ b/assets/js/8b1cd994.de28797f.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkfluss_website=self.webpackChunkfluss_website||[]).push([[2851],{2861:(e,t,r)=>{r.r(t),r.d(t,{assets:()=>o,contentTitle:()=>d,default:()=>a,frontMatter:()=>l,metadata:()=>s,toc:()=>h});const s=JSON.parse('{"id":"maintenance/configuration","title":"Server Configuration","description":"All configurations can be set in Fluss configuration file conf/server.yaml","source":"@site/versioned_docs/version-0.6/maintenance/configuration.md","sourceDirName":"maintenance [...]
\ No newline at end of file
diff --git a/assets/js/8d16c60e.c0c98296.js b/assets/js/8d16c60e.c0c98296.js
new file mode 100644
index 0000000..059b83a
--- /dev/null
+++ b/assets/js/8d16c60e.c0c98296.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkfluss_website=self.webpackChunkfluss_website||[]).push([[8848],{2278:(e,s,t)=>{t.r(s),t.d(s,{assets:()=>d,contentTitle:()=>r,default:()=>p,frontMatter:()=>i,metadata:()=>n,toc:()=>c});const n=JSON.parse('{"id":"maintenance/filesystems/hdfs","title":"HDFS","description":"HDFS (Hadoop Distributed File System) is the primary storage system used by Hadoop applications. Fluss","source":"@site/versioned_docs/version-0.5/maintenance/filesystems/hdfs.md","sourceDir [...]
\ No newline at end of file
diff --git a/assets/js/8e2e4f36.ea6d803d.js b/assets/js/8e2e4f36.ea6d803d.js
new file mode 100644
index 0000000..7b7de9e
--- /dev/null
+++ b/assets/js/8e2e4f36.ea6d803d.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkfluss_website=self.webpackChunkfluss_website||[]).push([[6960],{4215:(t,e,i)=>{i.r(e),i.d(e,{assets:()=>d,contentTitle:()=>r,default:()=>u,frontMatter:()=>o,metadata:()=>a,toc:()=>l});const a=JSON.parse('{"id":"table-design/data-distribution/ttl","title":"TTL","description":"\x3c!--","source":"@site/docs/table-design/data-distribution/ttl.md","sourceDirName":"table-design/data-distribution","slug":"/table-design/data-distribution/ttl","permalink":"/docs/nex [...]
\ No newline at end of file
diff --git a/assets/js/8e9d555c.8e8cb9d1.js b/assets/js/8e9d555c.8e8cb9d1.js
new file mode 100644
index 0000000..e916b45
--- /dev/null
+++ b/assets/js/8e9d555c.8e8cb9d1.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkfluss_website=self.webpackChunkfluss_website||[]).push([[8211],{3645:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>l,contentTitle:()=>o,default:()=>p,frontMatter:()=>i,metadata:()=>s,toc:()=>c});var s=n(7086),a=n(4848),r=n(8453);const i={slug:"partial-updates",title:"Understanding Partial Updates",authors:["giannis"]},o=void 0,l={authorsImageUrls:[void 0]},c=[];function d(e){const t={em:"em",img:"img",p:"p",strong:"strong",...(0,r.R)(),...e.components};return(0,a.jsxs [...]
\ No newline at end of file
diff --git a/assets/js/8f16bea6.f9641cb2.js b/assets/js/8f16bea6.f9641cb2.js
new file mode 100644
index 0000000..b17fb2b
--- /dev/null
+++ b/assets/js/8f16bea6.f9641cb2.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkfluss_website=self.webpackChunkfluss_website||[]).push([[2350],{2760:(e,t,i)=>{i.r(t),i.d(t,{assets:()=>d,contentTitle:()=>r,default:()=>h,frontMatter:()=>s,metadata:()=>n,toc:()=>o});const n=JSON.parse('{"id":"engine-flink/ddl","title":"Flink DDL","description":"\x3c!--","source":"@site/versioned_docs/version-0.7/engine-flink/ddl.md","sourceDirName":"engine-flink","slug":"/engine-flink/ddl","permalink":"/docs/engine-flink/ddl","draft":false,"unlisted":fals [...]
\ No newline at end of file
diff --git a/assets/js/95c5923f.348ace97.js b/assets/js/95c5923f.348ace97.js
new file mode 100644
index 0000000..d50cd69
--- /dev/null
+++ b/assets/js/95c5923f.348ace97.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkfluss_website=self.webpackChunkfluss_website||[]).push([[7703],{7352:(e,n,s)=>{s.r(n),s.d(n,{assets:()=>a,contentTitle:()=>o,default:()=>u,frontMatter:()=>r,metadata:()=>l,toc:()=>c});const l=JSON.parse('{"id":"install-deploy/deploying-local-cluster","title":"Deploying Local Cluster","description":"This page provides instructions on how to deploy a local cluster (on one machine, but in separate processes) for Fluss.","source":"@site/versioned_docs/version-0 [...]
\ No newline at end of file
diff --git a/assets/js/95cf59a1.fa0c2a42.js b/assets/js/95cf59a1.fa0c2a42.js
new file mode 100644
index 0000000..e8530e4
--- /dev/null
+++ b/assets/js/95cf59a1.fa0c2a42.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkfluss_website=self.webpackChunkfluss_website||[]).push([[4254],{6671:(e,t,r)=>{r.r(t),r.d(t,{assets:()=>o,contentTitle:()=>d,default:()=>a,frontMatter:()=>l,metadata:()=>i,toc:()=>c});const i=JSON.parse('{"id":"maintenance/configuration","title":"Configuration","description":"All configurations can be set in Fluss configuration file conf/server.yaml","source":"@site/versioned_docs/version-0.5/maintenance/configuration.md","sourceDirName":"maintenance","slug [...]
\ No newline at end of file
diff --git a/assets/js/9730.01eafbca.js b/assets/js/9730.01eafbca.js
new file mode 100644
index 0000000..81cb4c3
--- /dev/null
+++ b/assets/js/9730.01eafbca.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkfluss_website=self.webpackChunkfluss_website||[]).push([[9730],{9730:(n,t,e)=>{e.r(t),e.d(t,{Workbox:()=>p,WorkboxEvent:()=>f,messageSW:()=>r});try{self["workbox:window:7.2.0"]&&_()}catch(r){}function r(n,t){return new Promise((function(e){var r=new MessageChannel;r.port1.onmessage=function(n){e(n.data)},n.postMessage(t,[r.port2])}))}function i(n){var t=function(n){if("object"!=typeof n||!n)return n;var t=n[Symbol.toPrimitive];if(void 0!==t){var e=t.call(n, [...]
\ No newline at end of file
diff --git a/assets/js/993f72ea.52a8f949.js b/assets/js/993f72ea.52a8f949.js
new file mode 100644
index 0000000..40841dd
--- /dev/null
+++ b/assets/js/993f72ea.52a8f949.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkfluss_website=self.webpackChunkfluss_website||[]).push([[1347],{9260:(e,s,r)=>{r.r(s),r.d(s,{assets:()=>c,contentTitle:()=>l,default:()=>h,frontMatter:()=>d,metadata:()=>i,toc:()=>o});const i=JSON.parse('{"id":"security/authorization","title":"Authorization and ACLs","description":"\x3c!--","source":"@site/docs/security/authorization.md","sourceDirName":"security","slug":"/security/authorization","permalink":"/docs/next/security/authorization","draft":false [...]
\ No newline at end of file
diff --git a/assets/js/994319c2.80968371.js b/assets/js/994319c2.80968371.js
new file mode 100644
index 0000000..975361d
--- /dev/null
+++ b/assets/js/994319c2.80968371.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkfluss_website=self.webpackChunkfluss_website||[]).push([[5175],{7109:(e,n,i)=>{i.r(n),i.d(n,{assets:()=>l,contentTitle:()=>a,default:()=>h,frontMatter:()=>o,metadata:()=>t,toc:()=>c});var t=i(9485),s=i(4848),r=i(8453);const o={title:"Announcing Fluss 0.6",authors:["jark"],date:new Date("2025-03-10T00:00:00.000Z"),tags:["releases"]},a=void 0,l={authorsImageUrls:[void 0]},c=[{value:"Column Compression",id:"column-compression",level:2},{value:"Merge Engine",id [...]
\ No newline at end of file
diff --git a/assets/js/9a4f2fbf.f2ed9082.js b/assets/js/9a4f2fbf.f2ed9082.js
new file mode 100644
index 0000000..773e04d
--- /dev/null
+++ b/assets/js/9a4f2fbf.f2ed9082.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkfluss_website=self.webpackChunkfluss_website||[]).push([[4959],{8742:(e,t,s)=>{s.r(t),s.d(t,{assets:()=>o,contentTitle:()=>d,default:()=>h,frontMatter:()=>r,metadata:()=>n,toc:()=>c});const n=JSON.parse('{"id":"table-design/data-types","title":"Data Types","description":"Fluss has a rich set of native data types available to users. All the data types of Fluss are as follows:","source":"@site/versioned_docs/version-0.5/table-design/data-types.md","sourceDirN [...]
\ No newline at end of file
diff --git a/assets/js/9a99019d.b44119d4.js b/assets/js/9a99019d.b44119d4.js
new file mode 100644
index 0000000..fc28b1e
--- /dev/null
+++ b/assets/js/9a99019d.b44119d4.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkfluss_website=self.webpackChunkfluss_website||[]).push([[801],{8628:(e,s,n)=>{n.r(s),n.d(s,{assets:()=>o,contentTitle:()=>l,default:()=>h,frontMatter:()=>a,metadata:()=>t,toc:()=>c});const t=JSON.parse('{"id":"intro","title":"Introduction","description":"\x3c!--","source":"@site/versioned_docs/version-0.7/intro.md","sourceDirName":".","slug":"/intro","permalink":"/docs/intro","draft":false,"unlisted":false,"editUrl":"https://github.com/apache/fluss/edit/mai [...]
\ No newline at end of file
diff --git a/assets/js/9cc26f6c.49043a70.js b/assets/js/9cc26f6c.49043a70.js
new file mode 100644
index 0000000..5b28954
--- /dev/null
+++ b/assets/js/9cc26f6c.49043a70.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkfluss_website=self.webpackChunkfluss_website||[]).push([[8901],{1151:(e,n,o)=>{o.r(n),o.d(n,{assets:()=>c,contentTitle:()=>l,default:()=>h,frontMatter:()=>r,metadata:()=>t,toc:()=>a});const t=JSON.parse('{"id":"engine-flink/lookups","title":"Flink Lookup Joins","description":"Flink lookup joins are important because they enable efficient, real-time enrichment of streaming data with reference data, a common requirement in many real-time analytics and process [...]
\ No newline at end of file
diff --git a/assets/js/9cd743c9.73105920.js b/assets/js/9cd743c9.73105920.js
new file mode 100644
index 0000000..36fb955
--- /dev/null
+++ b/assets/js/9cd743c9.73105920.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkfluss_website=self.webpackChunkfluss_website||[]).push([[4311],{6401:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>l,contentTitle:()=>o,default:()=>d,frontMatter:()=>r,metadata:()=>s,toc:()=>u});var s=n(8828),i=n(4848),a=n(8453);const r={slug:"unified-streaming-lakehouse",title:"Towards A Unified Streaming & Lakehouse Architecture",sidebar_label:"Toward Streaming Lakehouse",authors:["yuxia"]},o=void 0,l={authorsImageUrls:[void 0]},u=[];function c(e){const t={li:"li",p [...]
\ No newline at end of file
diff --git a/assets/js/9df7d16b.b61beae9.js b/assets/js/9df7d16b.b61beae9.js
new file mode 100644
index 0000000..14450d1
--- /dev/null
+++ b/assets/js/9df7d16b.b61beae9.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkfluss_website=self.webpackChunkfluss_website||[]).push([[7280],{4810:(e,t,o)=>{o.r(t),o.d(t,{assets:()=>i,contentTitle:()=>l,default:()=>h,frontMatter:()=>a,metadata:()=>s,toc:()=>d});const s=JSON.parse('{"id":"maintenance/tiered-storage/remote-storage","title":"Remote Storage","description":"\x3c!--","source":"@site/docs/maintenance/tiered-storage/remote-storage.md","sourceDirName":"maintenance/tiered-storage","slug":"/maintenance/tiered-storage/remote-sto [...]
\ No newline at end of file
diff --git a/assets/js/9e4087bc.359656f3.js b/assets/js/9e4087bc.359656f3.js
new file mode 100644
index 0000000..f0e851e
--- /dev/null
+++ b/assets/js/9e4087bc.359656f3.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkfluss_website=self.webpackChunkfluss_website||[]).push([[2711],{9331:(e,r,a)=>{a.r(r),a.d(r,{default:()=>m});a(6540);var t=a(8774),s=a(1312),n=a(5500),i=a(6266),c=a(6716),l=a(1107),o=a(4848);function d({year:e,posts:r}){const a=(0,i.i)({day:"numeric",month:"long",timeZone:"UTC"});return(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(l.A,{as:"h3",id:e,children:e}),(0,o.jsx)("ul",{children:r.map((e=>{return(0,o.jsx)("li",{children:(0,o.jsxs)(t.A,{to:e.metadata.per [...]
\ No newline at end of file
diff --git a/assets/js/9ed1c870.946eb50a.js b/assets/js/9ed1c870.946eb50a.js
new file mode 100644
index 0000000..e02d3c5
--- /dev/null
+++ b/assets/js/9ed1c870.946eb50a.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkfluss_website=self.webpackChunkfluss_website||[]).push([[6264],{4412:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>l,contentTitle:()=>a,default:()=>h,frontMatter:()=>r,metadata:()=>s,toc:()=>c});const s=JSON.parse('{"id":"table-design/table-types/log-table","title":"Log Table","description":"\x3c!--","source":"@site/docs/table-design/table-types/log-table.md","sourceDirName":"table-design/table-types","slug":"/table-design/table-types/log-table","permalink":"/docs/nex [...]
\ No newline at end of file
diff --git a/assets/js/a2263507.d08e162d.js b/assets/js/a2263507.d08e162d.js
new file mode 100644
index 0000000..53c7610
--- /dev/null
+++ b/assets/js/a2263507.d08e162d.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkfluss_website=self.webpackChunkfluss_website||[]).push([[9841],{5296:(e,t,s)=>{s.r(t),s.d(t,{assets:()=>c,contentTitle:()=>i,default:()=>u,frontMatter:()=>o,metadata:()=>n,toc:()=>d});const n=JSON.parse('{"id":"maintenance/tiered-storage/overview","title":"Overview","description":"With tiered storage, Fluss allows you to scale compute and storage resources independently, provides better client isolation, and","source":"@site/versioned_docs/version-0.5/maint [...]
\ No newline at end of file
diff --git a/assets/js/a41cbb43.5679dc01.js b/assets/js/a41cbb43.5679dc01.js
new file mode 100644
index 0000000..ad8c126
--- /dev/null
+++ b/assets/js/a41cbb43.5679dc01.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkfluss_website=self.webpackChunkfluss_website||[]).push([[1259],{7447:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>o,contentTitle:()=>r,default:()=>m,frontMatter:()=>l,metadata:()=>s,toc:()=>c});const s=JSON.parse('{"id":"engine-flink/reads","title":"Flink Reads","description":"Fluss supports streaming and batch read with Apache Flink\'s SQL & Table API. Execute the following SQL command to switch execution mode from streaming to batch, and vice versa:","source":"@sit [...]
\ No newline at end of file
diff --git a/assets/js/a468dcbb.bcbf443b.js b/assets/js/a468dcbb.bcbf443b.js
new file mode 100644
index 0000000..f73539d
--- /dev/null
+++ b/assets/js/a468dcbb.bcbf443b.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkfluss_website=self.webpackChunkfluss_website||[]).push([[7517],{5419:(e,i,n)=>{n.r(i),n.d(i,{assets:()=>c,contentTitle:()=>t,default:()=>h,frontMatter:()=>r,metadata:()=>o,toc:()=>d});const o=JSON.parse('{"id":"maintenance/observability/logging","title":"Logging","description":"\x3c!--","source":"@site/docs/maintenance/observability/logging.md","sourceDirName":"maintenance/observability","slug":"/maintenance/observability/logging","permalink":"/docs/next/ma [...]
\ No newline at end of file
diff --git a/assets/js/a6aa9e1f.ad1370f0.js b/assets/js/a6aa9e1f.ad1370f0.js
new file mode 100644
index 0000000..911f192
--- /dev/null
+++ b/assets/js/a6aa9e1f.ad1370f0.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkfluss_website=self.webpackChunkfluss_website||[]).push([[7643],{5124:(e,t,a)=>{a.r(t),a.d(t,{default:()=>j});a(6540);var s=a(4164),n=a(4586),i=a(5500),r=a(7559),l=a(8027),o=a(7713),c=a(1463),d=a(3892),g=a(5260),m=a(1715),u=a(4848);function h(e){const t=(0,m.kJ)(e);return(0,u.jsx)(g.A,{children:(0,u.jsx)("script",{type:"application/ld+json",children:JSON.stringify(t)})})}function p(e){const{metadata:t}=e,{siteConfig:{title:a}}=(0,n.A)(),{blogDescription:s,bl [...]
\ No newline at end of file
diff --git a/assets/js/a7456010.c3e92d8b.js b/assets/js/a7456010.c3e92d8b.js
new file mode 100644
index 0000000..554be4e
--- /dev/null
+++ b/assets/js/a7456010.c3e92d8b.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkfluss_website=self.webpackChunkfluss_website||[]).push([[1235],{8552:s=>{s.exports=JSON.parse('{"name":"docusaurus-plugin-content-pages","id":"default"}')}}]);
\ No newline at end of file
diff --git a/assets/js/a78cedb8.2f79dec9.js b/assets/js/a78cedb8.2f79dec9.js
new file mode 100644
index 0000000..ceac7ee
--- /dev/null
+++ b/assets/js/a78cedb8.2f79dec9.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkfluss_website=self.webpackChunkfluss_website||[]).push([[4529],{3723:(e,t,r)=>{r.r(t),r.d(t,{assets:()=>c,contentTitle:()=>l,default:()=>a,frontMatter:()=>i,metadata:()=>s,toc:()=>h});const s=JSON.parse('{"id":"maintenance/observability/monitor-metrics","title":"Monitor Metrics","description":"Fluss has built a metrics system to measure the behaviours of cluster and table, like the active CoordinatorServer,","source":"@site/versioned_docs/version-0.6/mainte [...]
\ No newline at end of file
diff --git a/assets/js/a7bd4aaa.66cafdc7.js b/assets/js/a7bd4aaa.66cafdc7.js
new file mode 100644
index 0000000..61fd038
--- /dev/null
+++ b/assets/js/a7bd4aaa.66cafdc7.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkfluss_website=self.webpackChunkfluss_website||[]).push([[7098],{4532:(e,n,s)=>{s.r(n),s.d(n,{default:()=>x});s(6540);var r=s(5500),t=s(2565),o=s(3025),i=s(2831),c=s(1463),u=s(4848);function l(e){const{version:n}=e;return(0,u.jsxs)(u.Fragment,{children:[(0,u.jsx)(c.A,{version:n.version,tag:(0,t.k)(n.pluginId,n.version)}),(0,u.jsx)(r.be,{children:n.noIndex&&(0,u.jsx)("meta",{name:"robots",content:"noindex, nofollow"})})]})}function a(e){const{version:n,route: [...]
\ No newline at end of file
diff --git a/assets/js/a94703ab.c15b0b34.js b/assets/js/a94703ab.c15b0b34.js
new file mode 100644
index 0000000..7c2ed8f
--- /dev/null
+++ b/assets/js/a94703ab.c15b0b34.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkfluss_website=self.webpackChunkfluss_website||[]).push([[9048],{1377:(e,t,n)=>{n.r(t),n.d(t,{default:()=>pe});var a=n(6540),o=n(4164),i=n(5500),s=n(7559),r=n(6972),c=n(609),l=n(1312),d=n(3104),u=n(5062);const m={backToTopButton:"backToTopButton_sjWU",backToTopButtonShow:"backToTopButtonShow_xfvO"};var b=n(4848);function h(){const{shown:e,scrollToTop:t}=function({threshold:e}){const[t,n]=(0,a.useState)(!1),o=(0,a.useRef)(!1),{startScroll:i,cancelScroll:s}=(0 [...]
\ No newline at end of file
diff --git a/assets/js/aa2d6c3d.9f46bb50.js b/assets/js/aa2d6c3d.9f46bb50.js
new file mode 100644
index 0000000..fb5a20b
--- /dev/null
+++ b/assets/js/aa2d6c3d.9f46bb50.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkfluss_website=self.webpackChunkfluss_website||[]).push([[1903],{6707:(e,s,t)=>{t.r(s),t.d(s,{assets:()=>c,contentTitle:()=>r,default:()=>h,frontMatter:()=>i,metadata:()=>n,toc:()=>d});const n=JSON.parse('{"id":"maintenance/filesystems/hdfs","title":"HDFS","description":"\x3c!--","source":"@site/docs/maintenance/filesystems/hdfs.md","sourceDirName":"maintenance/filesystems","slug":"/maintenance/filesystems/hdfs","permalink":"/docs/next/maintenance/filesystem [...]
\ No newline at end of file
diff --git a/assets/js/aada36dd.34931ef7.js b/assets/js/aada36dd.34931ef7.js
new file mode 100644
index 0000000..91d305f
--- /dev/null
+++ b/assets/js/aada36dd.34931ef7.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkfluss_website=self.webpackChunkfluss_website||[]).push([[2543],{3481:e=>{e.exports=JSON.parse('{"version":{"pluginId":"community","version":"current","label":"Next","banner":null,"badge":false,"noIndex":false,"className":"docs-version-current","isLast":true,"docsSidebars":{"community":[{"type":"link","label":"Welcome","href":"/community/welcome","docId":"welcome","unlisted":false},{"type":"category","label":"How to Contribute","collapsible":true,"collapsed" [...]
\ No newline at end of file
diff --git a/assets/js/ab240437.05be38ae.js b/assets/js/ab240437.05be38ae.js
new file mode 100644
index 0000000..3062dd9
--- /dev/null
+++ b/assets/js/ab240437.05be38ae.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkfluss_website=self.webpackChunkfluss_website||[]).push([[5702],{3615:(e,a,t)=>{t.r(a),t.d(a,{assets:()=>l,contentTitle:()=>r,default:()=>c,frontMatter:()=>o,metadata:()=>s,toc:()=>h});const s=JSON.parse('{"id":"streaming-lakehouse/overview","title":"Lakehouse Overview","description":"Introducing Lakehouse","source":"@site/versioned_docs/version-0.5/streaming-lakehouse/overview.md","sourceDirName":"streaming-lakehouse","slug":"/streaming-lakehouse/overview", [...]
\ No newline at end of file
diff --git a/assets/js/aba21aa0.71167bed.js b/assets/js/aba21aa0.71167bed.js
new file mode 100644
index 0000000..bc18a2e
--- /dev/null
+++ b/assets/js/aba21aa0.71167bed.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkfluss_website=self.webpackChunkfluss_website||[]).push([[5742],{7093:s=>{s.exports=JSON.parse('{"name":"docusaurus-plugin-content-docs","id":"default"}')}}]);
\ No newline at end of file
diff --git a/assets/js/abf5c5c3.7ac3d297.js b/assets/js/abf5c5c3.7ac3d297.js
new file mode 100644
index 0000000..bd6d60c
--- /dev/null
+++ b/assets/js/abf5c5c3.7ac3d297.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkfluss_website=self.webpackChunkfluss_website||[]).push([[6191],{5058:(e,r,t)=>{t.r(r),t.d(r,{assets:()=>a,contentTitle:()=>l,default:()=>h,frontMatter:()=>o,metadata:()=>s,toc:()=>c});const s=JSON.parse('{"id":"maintenance/observability/metric-reporters","title":"Metric Reporters","description":"\x3c!--","source":"@site/versioned_docs/version-0.7/maintenance/observability/metric-reporters.md","sourceDirName":"maintenance/observability","slug":"/maintenance/ [...]
\ No newline at end of file
diff --git a/assets/js/acecf23e.5f6d9927.js b/assets/js/acecf23e.5f6d9927.js
new file mode 100644
index 0000000..fe7ebf4
--- /dev/null
+++ b/assets/js/acecf23e.5f6d9927.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkfluss_website=self.webpackChunkfluss_website||[]).push([[4284],{1912:s=>{s.exports=JSON.parse('{"blogBasePath":"/blog","blogTitle":"Blog","authorsListPath":"/blog/authors"}')}}]);
\ No newline at end of file
diff --git a/assets/js/add778d1.3cb6f6e2.js b/assets/js/add778d1.3cb6f6e2.js
new file mode 100644
index 0000000..534c1f5
--- /dev/null
+++ b/assets/js/add778d1.3cb6f6e2.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkfluss_website=self.webpackChunkfluss_website||[]).push([[3855],{554:(e,s,t)=>{t.r(s),t.d(s,{assets:()=>c,contentTitle:()=>r,default:()=>h,frontMatter:()=>i,metadata:()=>n,toc:()=>d});const n=JSON.parse('{"id":"maintenance/filesystems/hdfs","title":"HDFS","description":"\x3c!--","source":"@site/versioned_docs/version-0.7/maintenance/filesystems/hdfs.md","sourceDirName":"maintenance/filesystems","slug":"/maintenance/filesystems/hdfs","permalink":"/docs/mainte [...]
\ No newline at end of file
diff --git a/assets/js/add8cc11.716b17ab.js b/assets/js/add8cc11.716b17ab.js
new file mode 100644
index 0000000..682a0aa
--- /dev/null
+++ b/assets/js/add8cc11.716b17ab.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkfluss_website=self.webpackChunkfluss_website||[]).push([[8168],{4279:(e,n,s)=>{s.r(n),s.d(n,{assets:()=>c,contentTitle:()=>d,default:()=>o,frontMatter:()=>l,metadata:()=>t,toc:()=>a});const t=JSON.parse('{"id":"engine-flink/getting-started","title":"Getting Started with Flink Engine","description":"Quick Start","source":"@site/versioned_docs/version-0.6/engine-flink/getting-started.md","sourceDirName":"engine-flink","slug":"/engine-flink/getting-started","p [...]
\ No newline at end of file
diff --git a/assets/js/aeb4150a.f5df3b14.js b/assets/js/aeb4150a.f5df3b14.js
new file mode 100644
index 0000000..35419ee
--- /dev/null
+++ b/assets/js/aeb4150a.f5df3b14.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkfluss_website=self.webpackChunkfluss_website||[]).push([[6488],{7865:(e,i,n)=>{n.r(i),n.d(i,{assets:()=>a,contentTitle:()=>r,default:()=>h,frontMatter:()=>l,metadata:()=>t,toc:()=>c});const t=JSON.parse('{"id":"dev/ide-setup","title":"Import Fluss into an IDE","description":"The sections below describe how to import the Fluss project into an IDE","source":"@site/versioned_docs/version-0.5/dev/ide-setup.md","sourceDirName":"dev","slug":"/dev/ide-setup","perm [...]
\ No newline at end of file
diff --git a/assets/js/b0a08aa7.88c4a943.js b/assets/js/b0a08aa7.88c4a943.js
new file mode 100644
index 0000000..e682214
--- /dev/null
+++ b/assets/js/b0a08aa7.88c4a943.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkfluss_website=self.webpackChunkfluss_website||[]).push([[6887],{9477:(e,s,t)=>{t.r(s),t.d(s,{assets:()=>c,contentTitle:()=>r,default:()=>m,frontMatter:()=>o,metadata:()=>n,toc:()=>d});const n=JSON.parse('{"id":"maintenance/filesystems/s3","title":"Amazon S3","description":"\x3c!--","source":"@site/versioned_docs/version-0.7/maintenance/filesystems/s3.md","sourceDirName":"maintenance/filesystems","slug":"/maintenance/filesystems/s3","permalink":"/docs/mainte [...]
\ No newline at end of file
diff --git a/assets/js/b405f593.c44a49bf.js b/assets/js/b405f593.c44a49bf.js
new file mode 100644
index 0000000..f13296c
--- /dev/null
+++ b/assets/js/b405f593.c44a49bf.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkfluss_website=self.webpackChunkfluss_website||[]).push([[9371],{6e3:(e,t,s)=>{s.r(t),s.d(t,{assets:()=>o,contentTitle:()=>d,default:()=>h,frontMatter:()=>r,metadata:()=>n,toc:()=>c});const n=JSON.parse('{"id":"table-design/data-types","title":"Data Types","description":"Fluss has a rich set of native data types available to users. All the data types of Fluss are as follows:","source":"@site/versioned_docs/version-0.6/table-design/data-types.md","sourceDirNa [...]
\ No newline at end of file
diff --git a/assets/js/b4e94af8.1db02b2d.js b/assets/js/b4e94af8.1db02b2d.js
new file mode 100644
index 0000000..6d6acad
--- /dev/null
+++ b/assets/js/b4e94af8.1db02b2d.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkfluss_website=self.webpackChunkfluss_website||[]).push([[8908],{2395:(e,i,s)=>{s.r(i),s.d(i,{assets:()=>o,contentTitle:()=>l,default:()=>d,frontMatter:()=>r,metadata:()=>n,toc:()=>c});const n=JSON.parse('{"type":"mdx","permalink":"/roadmap","source":"@site/src/pages/roadmap.md","description":"\x3c!--","frontMatter":{},"unlisted":false}');var t=s(4848),a=s(8453);const r={},l="Fluss Roadmap",o={},c=[{value:"Kafka Protocol Compatibility",id:"kafka-protocol-com [...]
\ No newline at end of file
diff --git a/assets/js/b56224f4.fade629f.js b/assets/js/b56224f4.fade629f.js
new file mode 100644
index 0000000..d173822
--- /dev/null
+++ b/assets/js/b56224f4.fade629f.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkfluss_website=self.webpackChunkfluss_website||[]).push([[1428],{5727:(e,n,a)=>{a.r(n),a.d(n,{assets:()=>c,contentTitle:()=>o,default:()=>p,frontMatter:()=>i,metadata:()=>r,toc:()=>l});const r=JSON.parse('{"id":"maintenance/operations/racks","title":"Racks","description":"\x3c!--","source":"@site/docs/maintenance/operations/racks.md","sourceDirName":"maintenance/operations","slug":"/maintenance/operations/racks","permalink":"/docs/next/maintenance/operations [...]
\ No newline at end of file
diff --git a/assets/js/b689a7df.b5208a49.js b/assets/js/b689a7df.b5208a49.js
new file mode 100644
index 0000000..f3b41a0
--- /dev/null
+++ b/assets/js/b689a7df.b5208a49.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkfluss_website=self.webpackChunkfluss_website||[]).push([[4424],{3534:(e,n,s)=>{s.r(n),s.d(n,{assets:()=>c,contentTitle:()=>d,default:()=>o,frontMatter:()=>l,metadata:()=>t,toc:()=>a});const t=JSON.parse('{"id":"engine-flink/getting-started","title":"Getting Started with Flink","description":"\x3c!--","source":"@site/docs/engine-flink/getting-started.md","sourceDirName":"engine-flink","slug":"/engine-flink/getting-started","permalink":"/docs/next/engine-flin [...]
\ No newline at end of file
diff --git a/assets/js/b86fbb72.6dcdacfd.js b/assets/js/b86fbb72.6dcdacfd.js
new file mode 100644
index 0000000..88dd148
--- /dev/null
+++ b/assets/js/b86fbb72.6dcdacfd.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkfluss_website=self.webpackChunkfluss_website||[]).push([[4298],{3573:(e,t,i)=>{i.r(t),i.d(t,{assets:()=>c,contentTitle:()=>a,default:()=>u,frontMatter:()=>r,metadata:()=>n,toc:()=>l});const n=JSON.parse('{"id":"how-to-contribute/review-pull-requests","title":"Review Pull Requests","description":"\x3c!--","source":"@site/community/how-to-contribute/review-pull-requests.md","sourceDirName":"how-to-contribute","slug":"/how-to-contribute/review-pull-requests"," [...]
\ No newline at end of file
diff --git a/assets/js/b9d28c39.c7f955fb.js b/assets/js/b9d28c39.c7f955fb.js
new file mode 100644
index 0000000..af85a50
--- /dev/null
+++ b/assets/js/b9d28c39.c7f955fb.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkfluss_website=self.webpackChunkfluss_website||[]).push([[7113],{5769:(e,n,a)=>{a.r(n),a.d(n,{assets:()=>o,contentTitle:()=>l,default:()=>h,frontMatter:()=>r,metadata:()=>t,toc:()=>d});const t=JSON.parse('{"id":"streaming-lakehouse/integrate-data-lakes/paimon","title":"Paimon","description":"\x3c!--","source":"@site/docs/streaming-lakehouse/integrate-data-lakes/paimon.md","sourceDirName":"streaming-lakehouse/integrate-data-lakes","slug":"/streaming-lakehouse [...]
\ No newline at end of file
diff --git a/assets/js/bac2b925.0799462b.js b/assets/js/bac2b925.0799462b.js
new file mode 100644
index 0000000..100a12b
--- /dev/null
+++ b/assets/js/bac2b925.0799462b.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkfluss_website=self.webpackChunkfluss_website||[]).push([[2887],{7786:(e,t,s)=>{s.r(t),s.d(t,{assets:()=>o,contentTitle:()=>d,default:()=>h,frontMatter:()=>a,metadata:()=>n,toc:()=>c});const n=JSON.parse('{"id":"table-design/data-types","title":"Data Types","description":"\x3c!--","source":"@site/versioned_docs/version-0.7/table-design/data-types.md","sourceDirName":"table-design","slug":"/table-design/data-types","permalink":"/docs/table-design/data-types", [...]
\ No newline at end of file
diff --git a/assets/js/bcac6c77.2f068085.js b/assets/js/bcac6c77.2f068085.js
new file mode 100644
index 0000000..75e3a7b
--- /dev/null
+++ b/assets/js/bcac6c77.2f068085.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkfluss_website=self.webpackChunkfluss_website||[]).push([[109],{6534:(e,n,s)=>{s.r(n),s.d(n,{assets:()=>l,contentTitle:()=>o,default:()=>m,frontMatter:()=>i,metadata:()=>r,toc:()=>c});const r=JSON.parse('{"id":"maintenance/observability/quickstart","title":"Observability Quickstart Guides","description":"\x3c!--","source":"@site/versioned_docs/version-0.7/maintenance/observability/quickstart.md","sourceDirName":"maintenance/observability","slug":"/maintenanc [...]
\ No newline at end of file
diff --git a/assets/js/bdf1472e.711c56ac.js b/assets/js/bdf1472e.711c56ac.js
new file mode 100644
index 0000000..cea27ad
--- /dev/null
+++ b/assets/js/bdf1472e.711c56ac.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkfluss_website=self.webpackChunkfluss_website||[]).push([[5610],{503:(e,t,i)=>{i.r(t),i.d(t,{assets:()=>o,contentTitle:()=>c,default:()=>u,frontMatter:()=>a,metadata:()=>n,toc:()=>d});const n=JSON.parse('{"id":"table-design/data-distribution/bucketing","title":"Bucketing","description":"A bucketing strategy is a data distribution technique that divides table data into small pieces","source":"@site/versioned_docs/version-0.6/table-design/data-distribution/buc [...]
\ No newline at end of file
diff --git a/assets/js/bdfb83fe.e7ede2d1.js b/assets/js/bdfb83fe.e7ede2d1.js
new file mode 100644
index 0000000..62fe981
--- /dev/null
+++ b/assets/js/bdfb83fe.e7ede2d1.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkfluss_website=self.webpackChunkfluss_website||[]).push([[4569],{3672:(e,i,n)=>{n.r(i),n.d(i,{assets:()=>c,contentTitle:()=>t,default:()=>h,frontMatter:()=>r,metadata:()=>o,toc:()=>d});const o=JSON.parse('{"id":"maintenance/logging","title":"Logging","description":"All Fluss processes(CoordinatorServer/TabletServer) create a log text file that contains messages for various events happening in that process. These logs provide deep insights into the inner work [...]
\ No newline at end of file
diff --git a/assets/js/c018ef01.b75f04c7.js b/assets/js/c018ef01.b75f04c7.js
new file mode 100644
index 0000000..94f735f
--- /dev/null
+++ b/assets/js/c018ef01.b75f04c7.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkfluss_website=self.webpackChunkfluss_website||[]).push([[4617],{1984:(t,e,o)=>{o.r(e),o.d(e,{assets:()=>a,contentTitle:()=>i,default:()=>d,frontMatter:()=>l,metadata:()=>n,toc:()=>u});var n=o(6560),s=o(4848),r=o(8453);const l={slug:"unveil-fluss-logo",title:"The Story of Fluss Logo",authors:["jark"]},i=void 0,a={authorsImageUrls:[void 0]},u=[{value:"Introducing the Little Otter",id:"introducing-the-little-otter",level:2}];function c(t){const e={a:"a",h2:"h2 [...]
\ No newline at end of file
diff --git a/assets/js/c141421f.483a0d8b.js b/assets/js/c141421f.483a0d8b.js
new file mode 100644
index 0000000..6b54e91
--- /dev/null
+++ b/assets/js/c141421f.483a0d8b.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkfluss_website=self.webpackChunkfluss_website||[]).push([[3338],{936:e=>{e.exports=JSON.parse('{"name":"docusaurus-theme-search-algolia","id":"default"}')}}]);
\ No newline at end of file
diff --git a/assets/js/c143539c.d6a6ec00.js b/assets/js/c143539c.d6a6ec00.js
new file mode 100644
index 0000000..2b26e11
--- /dev/null
+++ b/assets/js/c143539c.d6a6ec00.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkfluss_website=self.webpackChunkfluss_website||[]).push([[6384],{7660:e=>{e.exports=JSON.parse('{"version":{"pluginId":"default","version":"current","label":"Next","banner":"unreleased","badge":true,"noIndex":false,"className":"docs-version-current","isLast":false,"docsSidebars":{"docsSidebar":[{"type":"link","label":"Introduction","href":"/docs/next/intro","docId":"intro","unlisted":false},{"type":"category","label":"Quick Start","collapsible":true,"collaps [...]
\ No newline at end of file
diff --git a/assets/js/c1d17d03.e515a5ab.js b/assets/js/c1d17d03.e515a5ab.js
new file mode 100644
index 0000000..400b713
--- /dev/null
+++ b/assets/js/c1d17d03.e515a5ab.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkfluss_website=self.webpackChunkfluss_website||[]).push([[64],{9432:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>d,contentTitle:()=>r,default:()=>u,frontMatter:()=>i,metadata:()=>a,toc:()=>o});const a=JSON.parse('{"id":"engine-flink/writes","title":"Flink Writes","description":"\x3c!--","source":"@site/versioned_docs/version-0.7/engine-flink/writes.md","sourceDirName":"engine-flink","slug":"/engine-flink/writes","permalink":"/docs/engine-flink/writes","draft":false,"u [...]
\ No newline at end of file
diff --git a/assets/js/c603b338.4e7d556b.js b/assets/js/c603b338.4e7d556b.js
new file mode 100644
index 0000000..8179536
--- /dev/null
+++ b/assets/js/c603b338.4e7d556b.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkfluss_website=self.webpackChunkfluss_website||[]).push([[5091],{963:(e,i,n)=>{n.r(i),n.d(i,{assets:()=>c,contentTitle:()=>t,default:()=>h,frontMatter:()=>r,metadata:()=>o,toc:()=>a});const o=JSON.parse('{"id":"maintenance/observability/logging","title":"Logging","description":"All Fluss processes(CoordinatorServer/TabletServer) create a log text file that contains messages for various events happening in that process. These logs provide deep insights into t [...]
\ No newline at end of file
diff --git a/assets/js/c642c7e8.305b183a.js b/assets/js/c642c7e8.305b183a.js
new file mode 100644
index 0000000..097542d
--- /dev/null
+++ b/assets/js/c642c7e8.305b183a.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkfluss_website=self.webpackChunkfluss_website||[]).push([[3951],{6122:(e,s,n)=>{n.r(s),n.d(s,{assets:()=>r,contentTitle:()=>l,default:()=>d,frontMatter:()=>c,metadata:()=>t,toc:()=>a});const t=JSON.parse('{"id":"welcome","title":"Welcome","description":"\x3c!--","source":"@site/community/welcome.md","sourceDirName":".","slug":"/welcome","permalink":"/community/welcome","draft":false,"unlisted":false,"editUrl":"https://github.com/apache/fluss/edit/main/websit [...]
\ No newline at end of file
diff --git a/assets/js/c7122660.f857c136.js b/assets/js/c7122660.f857c136.js
new file mode 100644
index 0000000..5b30530
--- /dev/null
+++ b/assets/js/c7122660.f857c136.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkfluss_website=self.webpackChunkfluss_website||[]).push([[3482],{1764:(e,i,n)=>{n.r(i),n.d(i,{assets:()=>c,contentTitle:()=>t,default:()=>h,frontMatter:()=>r,metadata:()=>o,toc:()=>d});const o=JSON.parse('{"id":"maintenance/observability/logging","title":"Logging","description":"\x3c!--","source":"@site/versioned_docs/version-0.7/maintenance/observability/logging.md","sourceDirName":"maintenance/observability","slug":"/maintenance/observability/logging","per [...]
\ No newline at end of file
diff --git a/assets/js/c88e3dd6.92065d26.js b/assets/js/c88e3dd6.92065d26.js
new file mode 100644
index 0000000..dda4302
--- /dev/null
+++ b/assets/js/c88e3dd6.92065d26.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkfluss_website=self.webpackChunkfluss_website||[]).push([[2900],{7936:(e,r,t)=>{t.r(r),t.d(r,{assets:()=>a,contentTitle:()=>l,default:()=>h,frontMatter:()=>o,metadata:()=>s,toc:()=>c});const s=JSON.parse('{"id":"maintenance/metric-reporters","title":"Metric Reporters","description":"Fluss allows reporting metrics to external system.","source":"@site/versioned_docs/version-0.5/maintenance/metric-reporters.md","sourceDirName":"maintenance","slug":"/maintenance [...]
\ No newline at end of file
diff --git a/assets/js/ca57b231.0b2d4ab6.js b/assets/js/ca57b231.0b2d4ab6.js
new file mode 100644
index 0000000..a2a9cf9
--- /dev/null
+++ b/assets/js/ca57b231.0b2d4ab6.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkfluss_website=self.webpackChunkfluss_website||[]).push([[6279],{5398:(e,o,n)=>{n.r(o),n.d(o,{assets:()=>g,contentTitle:()=>r,default:()=>c,frontMatter:()=>i,metadata:()=>l,toc:()=>h});const l=JSON.parse('{"id":"fluss-logos","title":"Fluss Logos","description":"\x3c!--","source":"@site/community/fluss-logos.md","sourceDirName":".","slug":"/fluss-logos","permalink":"/community/fluss-logos","draft":false,"unlisted":false,"editUrl":"https://github.com/apache/fl [...]
\ No newline at end of file
diff --git a/assets/js/ca81dda5.75ddc20a.js b/assets/js/ca81dda5.75ddc20a.js
new file mode 100644
index 0000000..c61dfd9
--- /dev/null
+++ b/assets/js/ca81dda5.75ddc20a.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkfluss_website=self.webpackChunkfluss_website||[]).push([[2560],{9248:(e,s,t)=>{t.r(s),t.d(s,{assets:()=>c,contentTitle:()=>r,default:()=>m,frontMatter:()=>o,metadata:()=>n,toc:()=>d});const n=JSON.parse('{"id":"maintenance/filesystems/s3","title":"Amazon S3","description":"Amazon Simple Storage Service (Amazon S3) is cloud object storage with industry-leading scalability, data availability, security, and performance.","source":"@site/versioned_docs/version- [...]
\ No newline at end of file
diff --git a/assets/js/cc72a6c3.99f02ce5.js b/assets/js/cc72a6c3.99f02ce5.js
new file mode 100644
index 0000000..34b5d53
--- /dev/null
+++ b/assets/js/cc72a6c3.99f02ce5.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkfluss_website=self.webpackChunkfluss_website||[]).push([[2905],{2521:(e,n,a)=>{a.r(n),a.d(n,{assets:()=>d,contentTitle:()=>c,default:()=>m,frontMatter:()=>l,metadata:()=>s,toc:()=>u});const s=JSON.parse('{"id":"engine-flink/datastream","title":"DataStream API","description":"\x3c!--","source":"@site/docs/engine-flink/datastream.mdx","sourceDirName":"engine-flink","slug":"/engine-flink/datastream","permalink":"/docs/next/engine-flink/datastream","draft":fals [...]
\ No newline at end of file
diff --git a/assets/js/ccc49370.195c2233.js b/assets/js/ccc49370.195c2233.js
new file mode 100644
index 0000000..f749ed3
--- /dev/null
+++ b/assets/js/ccc49370.195c2233.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkfluss_website=self.webpackChunkfluss_website||[]).push([[3249],{2907:(e,t,n)=>{n.d(t,{A:()=>O});n(6540);var a=n(4164),s=n(1715),i=n(4848);function r({children:e,className:t}){return(0,i.jsx)("article",{className:t,children:e})}var l=n(8774);const o={title:"title_f1Hy"};function c({className:e}){const{metadata:t,isBlogPostPage:n}=(0,s.e7)(),{permalink:r,title:c}=t,d=n?"h1":"h2";return(0,i.jsx)(d,{className:(0,a.A)(o.title,e),children:n?c:(0,i.jsx)(l.A,{to:r, [...]
\ No newline at end of file
diff --git a/assets/js/cd3822f9.ca849a85.js b/assets/js/cd3822f9.ca849a85.js
new file mode 100644
index 0000000..29749d2
--- /dev/null
+++ b/assets/js/cd3822f9.ca849a85.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkfluss_website=self.webpackChunkfluss_website||[]).push([[876],{4419:(e,s,n)=>{n.r(s),n.d(s,{assets:()=>a,contentTitle:()=>o,default:()=>h,frontMatter:()=>l,metadata:()=>t,toc:()=>c});const t=JSON.parse('{"id":"maintenance/filesystems/overview","title":"File Systems","description":"Fluss uses file systems as remote storage to store snapshots for Primary-Key Table and store tiered log segments for Log Table. These","source":"@site/versioned_docs/version-0.6/m [...]
\ No newline at end of file
diff --git a/assets/js/cddbb034.45d1dfd2.js b/assets/js/cddbb034.45d1dfd2.js
new file mode 100644
index 0000000..8f939e0
--- /dev/null
+++ b/assets/js/cddbb034.45d1dfd2.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkfluss_website=self.webpackChunkfluss_website||[]).push([[1599],{878:(e,s,n)=>{n.r(s),n.d(s,{assets:()=>a,contentTitle:()=>o,default:()=>h,frontMatter:()=>r,metadata:()=>t,toc:()=>c});const t=JSON.parse('{"id":"maintenance/filesystems/overview","title":"File Systems","description":"\x3c!--","source":"@site/docs/maintenance/filesystems/overview.md","sourceDirName":"maintenance/filesystems","slug":"/maintenance/filesystems/overview","permalink":"/docs/next/mai [...]
\ No newline at end of file
diff --git a/assets/js/ce40231b.8434e747.js b/assets/js/ce40231b.8434e747.js
new file mode 100644
index 0000000..a51bb1f
--- /dev/null
+++ b/assets/js/ce40231b.8434e747.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkfluss_website=self.webpackChunkfluss_website||[]).push([[3311],{5678:(e,n,s)=>{s.r(n),s.d(n,{assets:()=>l,contentTitle:()=>a,default:()=>h,frontMatter:()=>r,metadata:()=>t,toc:()=>c});const t=JSON.parse('{"id":"table-design/table-types/log-table","title":"Log Table","description":"Basic Concept","source":"@site/versioned_docs/version-0.6/table-design/table-types/log-table.md","sourceDirName":"table-design/table-types","slug":"/table-design/table-types/log-t [...]
\ No newline at end of file
diff --git a/assets/js/cfedf80e.2ed761d9.js b/assets/js/cfedf80e.2ed761d9.js
new file mode 100644
index 0000000..6681a0f
--- /dev/null
+++ b/assets/js/cfedf80e.2ed761d9.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkfluss_website=self.webpackChunkfluss_website||[]).push([[9236],{2751:(e,n,s)=>{s.r(n),s.d(n,{assets:()=>a,contentTitle:()=>l,default:()=>h,frontMatter:()=>o,metadata:()=>r,toc:()=>d});const r=JSON.parse('{"id":"maintenance/operations/upgrading","title":"Upgrading and Compatibility","description":"\x3c!--","source":"@site/docs/maintenance/operations/upgrading.md","sourceDirName":"maintenance/operations","slug":"/maintenance/operations/upgrading","permalink": [...]
\ No newline at end of file
diff --git a/assets/js/d0be6a34.7f9b7175.js b/assets/js/d0be6a34.7f9b7175.js
new file mode 100644
index 0000000..c54e7f1
--- /dev/null
+++ b/assets/js/d0be6a34.7f9b7175.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkfluss_website=self.webpackChunkfluss_website||[]).push([[3438],{8800:(e,l,n)=>{n.r(l),n.d(l,{assets:()=>a,contentTitle:()=>o,default:()=>u,frontMatter:()=>r,metadata:()=>s,toc:()=>c});const s=JSON.parse('{"id":"install-deploy/deploying-local-cluster","title":"Deploying Local Cluster","description":"\x3c!--","source":"@site/versioned_docs/version-0.7/install-deploy/deploying-local-cluster.md","sourceDirName":"install-deploy","slug":"/install-deploy/deploying [...]
\ No newline at end of file
diff --git a/assets/js/d24ecfdc.d1c7cff7.js b/assets/js/d24ecfdc.d1c7cff7.js
new file mode 100644
index 0000000..cf0b954
--- /dev/null
+++ b/assets/js/d24ecfdc.d1c7cff7.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkfluss_website=self.webpackChunkfluss_website||[]).push([[3080],{4670:e=>{e.exports=JSON.parse('{"version":{"pluginId":"default","version":"0.5","label":"0.5","banner":"unmaintained","badge":true,"noIndex":false,"className":"docs-version-0.5","isLast":false,"docsSidebars":{"docsSidebar":[{"type":"link","label":"Introduction","href":"/docs/0.5/intro","docId":"intro","unlisted":false},{"type":"category","label":"Quick Start","collapsible":true,"collapsed":true [...]
\ No newline at end of file
diff --git a/assets/js/d2806a11.06459ec3.js b/assets/js/d2806a11.06459ec3.js
new file mode 100644
index 0000000..11adcf6
--- /dev/null
+++ b/assets/js/d2806a11.06459ec3.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkfluss_website=self.webpackChunkfluss_website||[]).push([[2656],{6032:(e,t,r)=>{r.r(t),r.d(t,{assets:()=>c,contentTitle:()=>l,default:()=>a,frontMatter:()=>i,metadata:()=>s,toc:()=>h});const s=JSON.parse('{"id":"maintenance/observability/monitor-metrics","title":"Monitor Metrics","description":"\x3c!--","source":"@site/versioned_docs/version-0.7/maintenance/observability/monitor-metrics.md","sourceDirName":"maintenance/observability","slug":"/maintenance/obs [...]
\ No newline at end of file
diff --git a/assets/js/d2da4636.451d60b1.js b/assets/js/d2da4636.451d60b1.js
new file mode 100644
index 0000000..ac899f0
--- /dev/null
+++ b/assets/js/d2da4636.451d60b1.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkfluss_website=self.webpackChunkfluss_website||[]).push([[1349],{1245:(e,t,r)=>{r.r(t),r.d(t,{assets:()=>o,contentTitle:()=>l,default:()=>a,frontMatter:()=>d,metadata:()=>s,toc:()=>c});const s=JSON.parse('{"id":"maintenance/configuration","title":"Configuration","description":"\x3c!--","source":"@site/versioned_docs/version-0.7/maintenance/configuration.md","sourceDirName":"maintenance","slug":"/maintenance/configuration","permalink":"/docs/maintenance/confi [...]
\ No newline at end of file
diff --git a/assets/js/d38c956e.5c89b423.js b/assets/js/d38c956e.5c89b423.js
new file mode 100644
index 0000000..e67fedb
--- /dev/null
+++ b/assets/js/d38c956e.5c89b423.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkfluss_website=self.webpackChunkfluss_website||[]).push([[9238],{9138:(e,t,i)=>{i.r(t),i.d(t,{assets:()=>o,contentTitle:()=>c,default:()=>u,frontMatter:()=>a,metadata:()=>n,toc:()=>d});const n=JSON.parse('{"id":"table-design/data-distribution/bucketing","title":"Bucketing","description":"A bucketing strategy is a data distribution technique that divides table data into small pieces","source":"@site/versioned_docs/version-0.5/table-design/data-distribution/bu [...]
\ No newline at end of file
diff --git a/assets/js/d45d71f1.bebf8efd.js b/assets/js/d45d71f1.bebf8efd.js
new file mode 100644
index 0000000..c935f45
--- /dev/null
+++ b/assets/js/d45d71f1.bebf8efd.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkfluss_website=self.webpackChunkfluss_website||[]).push([[4507],{3100:(e,n,s)=>{s.r(n),s.d(n,{assets:()=>a,contentTitle:()=>l,default:()=>h,frontMatter:()=>o,metadata:()=>r,toc:()=>d});const r=JSON.parse('{"id":"maintenance/operations/upgrading","title":"Upgrading and Compatibility","description":"\x3c!--","source":"@site/versioned_docs/version-0.7/maintenance/operations/upgrading.md","sourceDirName":"maintenance/operations","slug":"/maintenance/operations/u [...]
\ No newline at end of file
diff --git a/assets/js/d46a98c6.57028b53.js b/assets/js/d46a98c6.57028b53.js
new file mode 100644
index 0000000..d3b7562
--- /dev/null
+++ b/assets/js/d46a98c6.57028b53.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkfluss_website=self.webpackChunkfluss_website||[]).push([[5984],{8905:(e,t,s)=>{s.r(t),s.d(t,{assets:()=>c,contentTitle:()=>l,default:()=>a,frontMatter:()=>i,metadata:()=>r,toc:()=>h});const r=JSON.parse('{"id":"maintenance/monitor-metrics","title":"Monitor Metrics","description":"Fluss has built a metrics system to measure the behaviours of cluster and table, like the active CoordinatorServer,","source":"@site/versioned_docs/version-0.5/maintenance/monitor- [...]
\ No newline at end of file
diff --git a/assets/js/d4e85a9d.c53f4fc7.js b/assets/js/d4e85a9d.c53f4fc7.js
new file mode 100644
index 0000000..dde16f3
--- /dev/null
+++ b/assets/js/d4e85a9d.c53f4fc7.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkfluss_website=self.webpackChunkfluss_website||[]).push([[877],{3733:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>d,contentTitle:()=>r,default:()=>h,frontMatter:()=>l,metadata:()=>i,toc:()=>o});const i=JSON.parse('{"id":"table-design/table-types/pk-table/index","title":"PrimaryKey Table","description":"\x3c!--","source":"@site/versioned_docs/version-0.7/table-design/table-types/pk-table/index.md","sourceDirName":"table-design/table-types/pk-table","slug":"/table-desig [...]
\ No newline at end of file
diff --git a/assets/js/d5c4569c.5cdcfaa4.js b/assets/js/d5c4569c.5cdcfaa4.js
new file mode 100644
index 0000000..1f54ac5
--- /dev/null
+++ b/assets/js/d5c4569c.5cdcfaa4.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkfluss_website=self.webpackChunkfluss_website||[]).push([[6994],{2552:(e,n,s)=>{s.r(n),s.d(n,{assets:()=>d,contentTitle:()=>o,default:()=>h,frontMatter:()=>l,metadata:()=>r,toc:()=>a});const r=JSON.parse('{"id":"install-deploy/deploying-distributed-cluster","title":"Deploying Distributed Cluster","description":"This page provides instructions on how to deploy a distributed cluster for Fluss on bare machines.","source":"@site/versioned_docs/version-0.6/instal [...]
\ No newline at end of file
diff --git a/assets/js/d717c9f5.1fb05db0.js b/assets/js/d717c9f5.1fb05db0.js
new file mode 100644
index 0000000..63d08a6
--- /dev/null
+++ b/assets/js/d717c9f5.1fb05db0.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkfluss_website=self.webpackChunkfluss_website||[]).push([[9231],{8212:(e,r,s)=>{s.r(r),s.d(r,{assets:()=>i,contentTitle:()=>l,default:()=>u,frontMatter:()=>a,metadata:()=>n,toc:()=>d});const n=JSON.parse('{"id":"install-deploy/deploying-with-docker","title":"Deploying with Docker","description":"This guide will show you how to run a Fluss cluster using Docker. In this guide, we will introduce the prerequisites of","source":"@site/versioned_docs/version-0.6/i [...]
\ No newline at end of file
diff --git a/assets/js/d75cfc85.c76bbcfb.js b/assets/js/d75cfc85.c76bbcfb.js
new file mode 100644
index 0000000..3038ae5
--- /dev/null
+++ b/assets/js/d75cfc85.c76bbcfb.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkfluss_website=self.webpackChunkfluss_website||[]).push([[5724],{4447:(e,a,t)=>{t.r(a),t.d(a,{assets:()=>l,contentTitle:()=>o,default:()=>c,frontMatter:()=>r,metadata:()=>s,toc:()=>h});const s=JSON.parse('{"id":"streaming-lakehouse/overview","title":"Lakehouse Overview","description":"\x3c!--","source":"@site/versioned_docs/version-0.7/streaming-lakehouse/overview.md","sourceDirName":"streaming-lakehouse","slug":"/streaming-lakehouse/overview","permalink":"/ [...]
\ No newline at end of file
diff --git a/assets/js/d8b46579.5764ef5d.js b/assets/js/d8b46579.5764ef5d.js
new file mode 100644
index 0000000..ceeb5b4
--- /dev/null
+++ b/assets/js/d8b46579.5764ef5d.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkfluss_website=self.webpackChunkfluss_website||[]).push([[9382],{5466:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>c,contentTitle:()=>i,default:()=>d,frontMatter:()=>o,metadata:()=>s,toc:()=>l});var s=n(637),r=n(4848),a=n(8453);const o={title:"Announcing Fluss 0.7",authors:["jark"],date:new Date("2025-06-18T00:00:00.000Z"),tags:["releases"]},i=void 0,c={authorsImageUrls:[void 0]},l=[];function u(e){const t={img:"img",p:"p",strong:"strong",...(0,a.R)(),...e.components} [...]
\ No newline at end of file
diff --git a/assets/js/d9129b64.a2436b54.js b/assets/js/d9129b64.a2436b54.js
new file mode 100644
index 0000000..699f3c1
--- /dev/null
+++ b/assets/js/d9129b64.a2436b54.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkfluss_website=self.webpackChunkfluss_website||[]).push([[4192],{6748:(e,r,t)=>{t.r(r),t.d(r,{assets:()=>a,contentTitle:()=>l,default:()=>h,frontMatter:()=>o,metadata:()=>s,toc:()=>c});const s=JSON.parse('{"id":"maintenance/observability/metric-reporters","title":"Metric Reporters","description":"Fluss allows reporting metrics to external system.","source":"@site/versioned_docs/version-0.6/maintenance/observability/metric-reporters.md","sourceDirName":"maint [...]
\ No newline at end of file
diff --git a/assets/js/d97251e6.bc2720a2.js b/assets/js/d97251e6.bc2720a2.js
new file mode 100644
index 0000000..ff079c1
--- /dev/null
+++ b/assets/js/d97251e6.bc2720a2.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkfluss_website=self.webpackChunkfluss_website||[]).push([[2506],{5690:(e,r,n)=>{n.r(r),n.d(r,{assets:()=>i,contentTitle:()=>a,default:()=>h,frontMatter:()=>o,metadata:()=>s,toc:()=>d});const s=JSON.parse('{"id":"install-deploy/deploying-with-docker","title":"Deploying with Docker","description":"\x3c!--","source":"@site/docs/install-deploy/deploying-with-docker.md","sourceDirName":"install-deploy","slug":"/install-deploy/deploying-with-docker","permalink":"/ [...]
\ No newline at end of file
diff --git a/assets/js/da5fc804.c7d719c4.js b/assets/js/da5fc804.c7d719c4.js
new file mode 100644
index 0000000..7a2b6f6
--- /dev/null
+++ b/assets/js/da5fc804.c7d719c4.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkfluss_website=self.webpackChunkfluss_website||[]).push([[4822],{3547:(s,a,l)=>{l.r(a),l.d(a,{assets:()=>h,contentTitle:()=>i,default:()=>t,frontMatter:()=>f,metadata:()=>e,toc:()=>o});const e=JSON.parse('{"type":"mdx","permalink":"/downloads","source":"@site/src/pages/downloads.md","description":"\x3c!--","frontMatter":{},"unlisted":false}');var n=l(4848),r=l(8453);const f={},i="Fluss Downloads",h={},o=[{value:"Fluss 0.7.0",id:"fluss-070",level:2},{value:"F [...]
\ No newline at end of file
diff --git a/assets/js/db256351.da20f1b7.js b/assets/js/db256351.da20f1b7.js
new file mode 100644
index 0000000..e137abd
--- /dev/null
+++ b/assets/js/db256351.da20f1b7.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkfluss_website=self.webpackChunkfluss_website||[]).push([[4689],{8572:(e,t,s)=>{s.r(t),s.d(t,{assets:()=>l,contentTitle:()=>r,default:()=>u,frontMatter:()=>o,metadata:()=>n,toc:()=>c});const n=JSON.parse('{"id":"table-design/table-types/log-table","title":"Log Table","description":"Basic Concept","source":"@site/versioned_docs/version-0.5/table-design/table-types/log-table.md","sourceDirName":"table-design/table-types","slug":"/table-design/table-types/log-t [...]
\ No newline at end of file
diff --git a/assets/js/db5d1f48.bb8274e9.js b/assets/js/db5d1f48.bb8274e9.js
new file mode 100644
index 0000000..6447575
--- /dev/null
+++ b/assets/js/db5d1f48.bb8274e9.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkfluss_website=self.webpackChunkfluss_website||[]).push([[9931],{4556:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>c,contentTitle:()=>r,default:()=>h,frontMatter:()=>a,metadata:()=>i,toc:()=>o});const i=JSON.parse('{"id":"engine-flink/reads","title":"Flink Reads","description":"\x3c!--","source":"@site/versioned_docs/version-0.7/engine-flink/reads.md","sourceDirName":"engine-flink","slug":"/engine-flink/reads","permalink":"/docs/engine-flink/reads","draft":false,"unli [...]
\ No newline at end of file
diff --git a/assets/js/dbfc4782.8f7a7243.js b/assets/js/dbfc4782.8f7a7243.js
new file mode 100644
index 0000000..2d4a15b
--- /dev/null
+++ b/assets/js/dbfc4782.8f7a7243.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkfluss_website=self.webpackChunkfluss_website||[]).push([[8749],{1895:e=>{e.exports=JSON.parse('{"archive":{"blogPosts":[{"id":"/releases/0.7","metadata":{"permalink":"/blog/releases/0.7","source":"@site/blog/releases/0.7.md","title":"Announcing Fluss 0.7","description":"\x3c!--","date":"2025-06-18T00:00:00.000Z","tags":[{"inline":false,"label":"releases","permalink":"/blog/tags/releases","description":"Content related release announcement."}],"hasTruncateMa [...]
\ No newline at end of file
diff --git a/assets/js/dd04b75e.5bd3fbc9.js b/assets/js/dd04b75e.5bd3fbc9.js
new file mode 100644
index 0000000..7121ea9
--- /dev/null
+++ b/assets/js/dd04b75e.5bd3fbc9.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkfluss_website=self.webpackChunkfluss_website||[]).push([[1672],{3024:t=>{t.exports=JSON.parse('{"authors":[{"name":"Jark Wu","title":"Creator of Fluss project","url":"https://github.com/wuchong","imageURL":"https://github.com/wuchong.png","key":"jark","page":null,"count":6},{"name":"Giannis Polyzos","title":"Fluss Contributor","url":"https://github.com/polyzos","imageURL":"https://github.com/polyzos.png","key":"giannis","page":null,"count":2},{"name":"Luo Y [...]
\ No newline at end of file
diff --git a/assets/js/de008c00.f2be1a26.js b/assets/js/de008c00.f2be1a26.js
new file mode 100644
index 0000000..f3ca626
--- /dev/null
+++ b/assets/js/de008c00.f2be1a26.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkfluss_website=self.webpackChunkfluss_website||[]).push([[4957],{9675:(e,s,r)=>{r.r(s),r.d(s,{assets:()=>d,contentTitle:()=>o,default:()=>h,frontMatter:()=>t,metadata:()=>n,toc:()=>a});const n=JSON.parse('{"id":"install-deploy/overview","title":"Installation & Deployment","description":"\x3c!--","source":"@site/versioned_docs/version-0.7/install-deploy/overview.md","sourceDirName":"install-deploy","slug":"/install-deploy/overview","permalink":"/docs/install- [...]
\ No newline at end of file
diff --git a/assets/js/ded36ae0.ae2899af.js b/assets/js/ded36ae0.ae2899af.js
new file mode 100644
index 0000000..d28cc07
--- /dev/null
+++ b/assets/js/ded36ae0.ae2899af.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkfluss_website=self.webpackChunkfluss_website||[]).push([[8789],{8004:(e,a,n)=>{n.r(a),n.d(a,{assets:()=>l,contentTitle:()=>o,default:()=>c,frontMatter:()=>r,metadata:()=>t,toc:()=>d});const t=JSON.parse('{"id":"streaming-lakehouse/integrate-data-lakes/paimon","title":"Paimon","description":"Apache Paimon innovatively combines lake format and LSM structure, bringing efficient updates into the lake architecture.","source":"@site/versioned_docs/version-0.6/str [...]
\ No newline at end of file
diff --git a/assets/js/df47852f.7970589b.js b/assets/js/df47852f.7970589b.js
new file mode 100644
index 0000000..2543ec8
--- /dev/null
+++ b/assets/js/df47852f.7970589b.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkfluss_website=self.webpackChunkfluss_website||[]).push([[5799],{1385:(e,s,n)=>{n.r(s),n.d(s,{assets:()=>a,contentTitle:()=>o,default:()=>h,frontMatter:()=>l,metadata:()=>t,toc:()=>c});const t=JSON.parse('{"id":"maintenance/filesystems/overview","title":"File Systems","description":"Fluss uses file systems as remote storage to store snapshots for Primary-Key Table and store tiered log segments for Log Table. These","source":"@site/versioned_docs/version-0.5/ [...]
\ No newline at end of file
diff --git a/assets/js/dff54d80.69b506dc.js b/assets/js/dff54d80.69b506dc.js
new file mode 100644
index 0000000..d306c71
--- /dev/null
+++ b/assets/js/dff54d80.69b506dc.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkfluss_website=self.webpackChunkfluss_website||[]).push([[5798],{9874:(e,n,a)=>{a.r(n),a.d(n,{assets:()=>d,contentTitle:()=>c,default:()=>m,frontMatter:()=>l,metadata:()=>s,toc:()=>u});const s=JSON.parse('{"id":"engine-flink/datastream","title":"DataStream API","description":"\x3c!--","source":"@site/versioned_docs/version-0.7/engine-flink/datastream.mdx","sourceDirName":"engine-flink","slug":"/engine-flink/datastream","permalink":"/docs/engine-flink/datastr [...]
\ No newline at end of file
diff --git a/assets/js/e01b5f8c.d0862de7.js b/assets/js/e01b5f8c.d0862de7.js
new file mode 100644
index 0000000..c34e056
--- /dev/null
+++ b/assets/js/e01b5f8c.d0862de7.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkfluss_website=self.webpackChunkfluss_website||[]).push([[2791],{6951:(t,e,i)=>{i.r(e),i.d(e,{assets:()=>l,contentTitle:()=>o,default:()=>h,frontMatter:()=>s,metadata:()=>n,toc:()=>d});const n=JSON.parse('{"id":"table-design/data-distribution/partitioning","title":"Partitioning","description":"\x3c!--","source":"@site/docs/table-design/data-distribution/partitioning.md","sourceDirName":"table-design/data-distribution","slug":"/table-design/data-distribution/ [...]
\ No newline at end of file
diff --git a/assets/js/e025f2f4.c31d48b8.js b/assets/js/e025f2f4.c31d48b8.js
new file mode 100644
index 0000000..e203ee7
--- /dev/null
+++ b/assets/js/e025f2f4.c31d48b8.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkfluss_website=self.webpackChunkfluss_website||[]).push([[1341],{1880:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>c,contentTitle:()=>o,default:()=>m,frontMatter:()=>i,metadata:()=>r,toc:()=>d});const r=JSON.parse('{"id":"maintenance/tiered-storage/overview","title":"Tiered Storage","description":"\x3c!--","source":"@site/docs/maintenance/tiered-storage/overview.md","sourceDirName":"maintenance/tiered-storage","slug":"/maintenance/tiered-storage/overview","permalink": [...]
\ No newline at end of file
diff --git a/assets/js/e0719818.a6531520.js b/assets/js/e0719818.a6531520.js
new file mode 100644
index 0000000..5b241d7
--- /dev/null
+++ b/assets/js/e0719818.a6531520.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkfluss_website=self.webpackChunkfluss_website||[]).push([[5220],{8669:s=>{s.exports=JSON.parse('{"name":"docusaurus-plugin-content-docs","id":"community"}')}}]);
\ No newline at end of file
diff --git a/assets/js/e0e92cc1.e0c24eb8.js b/assets/js/e0e92cc1.e0c24eb8.js
new file mode 100644
index 0000000..4d57a32
--- /dev/null
+++ b/assets/js/e0e92cc1.e0c24eb8.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkfluss_website=self.webpackChunkfluss_website||[]).push([[8503],{5426:(e,t,i)=>{i.r(t),i.d(t,{assets:()=>o,contentTitle:()=>c,default:()=>u,frontMatter:()=>a,metadata:()=>n,toc:()=>d});const n=JSON.parse('{"id":"table-design/data-distribution/bucketing","title":"Bucketing","description":"\x3c!--","source":"@site/versioned_docs/version-0.7/table-design/data-distribution/bucketing.md","sourceDirName":"table-design/data-distribution","slug":"/table-design/data- [...]
\ No newline at end of file
diff --git a/assets/js/e2cc254d.0c77013b.js b/assets/js/e2cc254d.0c77013b.js
new file mode 100644
index 0000000..a7ceb22
--- /dev/null
+++ b/assets/js/e2cc254d.0c77013b.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkfluss_website=self.webpackChunkfluss_website||[]).push([[5503],{8467:(e,a,n)=>{n.r(a),n.d(a,{assets:()=>l,contentTitle:()=>o,default:()=>c,frontMatter:()=>r,metadata:()=>t,toc:()=>d});const t=JSON.parse('{"id":"streaming-lakehouse/integrate-data-lakes/paimon","title":"Paimon","description":"Apache Paimon innovatively combines lake format and LSM structure, bringing efficient updates into the lake architecture.","source":"@site/versioned_docs/version-0.5/str [...]
\ No newline at end of file
diff --git a/assets/js/e2f56b1d.a06a6f0f.js b/assets/js/e2f56b1d.a06a6f0f.js
new file mode 100644
index 0000000..59d85f4
--- /dev/null
+++ b/assets/js/e2f56b1d.a06a6f0f.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkfluss_website=self.webpackChunkfluss_website||[]).push([[6586],{2248:(e,i,n)=>{n.r(i),n.d(i,{assets:()=>a,contentTitle:()=>c,default:()=>h,frontMatter:()=>o,metadata:()=>t,toc:()=>l});const t=JSON.parse('{"id":"security/overview","title":"Security Overview","description":"\x3c!--","source":"@site/versioned_docs/version-0.7/security/overview.md","sourceDirName":"security","slug":"/security/overview","permalink":"/docs/security/overview","draft":false,"unlist [...]
\ No newline at end of file
diff --git a/assets/js/e5327ea2.20e04a09.js b/assets/js/e5327ea2.20e04a09.js
new file mode 100644
index 0000000..a998506
--- /dev/null
+++ b/assets/js/e5327ea2.20e04a09.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkfluss_website=self.webpackChunkfluss_website||[]).push([[5719],{931:(e,t,o)=>{o.r(t),o.d(t,{assets:()=>c,contentTitle:()=>l,default:()=>d,frontMatter:()=>r,metadata:()=>n,toc:()=>u});const n=JSON.parse('{"id":"how-to-contribute/contribute-code","title":"Contribute Code","description":"\x3c!--","source":"@site/community/how-to-contribute/contribute-code.md","sourceDirName":"how-to-contribute","slug":"/how-to-contribute/contribute-code","permalink":"/communit [...]
\ No newline at end of file
diff --git a/assets/js/e7d4f839.40c97085.js b/assets/js/e7d4f839.40c97085.js
new file mode 100644
index 0000000..10943ae
--- /dev/null
+++ b/assets/js/e7d4f839.40c97085.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkfluss_website=self.webpackChunkfluss_website||[]).push([[1873],{93:(e,n,i)=>{i.r(n),i.d(n,{assets:()=>o,contentTitle:()=>a,default:()=>h,frontMatter:()=>l,metadata:()=>s,toc:()=>d});const s=JSON.parse('{"id":"table-design/table-types/pk-table/merge-engines/versioned","title":"Versioned Merge Engine","description":"\x3c!--","source":"@site/docs/table-design/table-types/pk-table/merge-engines/versioned.md","sourceDirName":"table-design/table-types/pk-table/me [...]
\ No newline at end of file
diff --git a/assets/js/e8397ce1.a99a757c.js b/assets/js/e8397ce1.a99a757c.js
new file mode 100644
index 0000000..d22afd7
--- /dev/null
+++ b/assets/js/e8397ce1.a99a757c.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkfluss_website=self.webpackChunkfluss_website||[]).push([[9724],{7717:(e,a,s)=>{s.r(a),s.d(a,{assets:()=>l,contentTitle:()=>o,default:()=>h,frontMatter:()=>i,metadata:()=>t,toc:()=>d});const t=JSON.parse('{"id":"maintenance/tiered-storage/lakehouse-storage","title":"Lakehouse Storage","description":"\x3c!--","source":"@site/docs/maintenance/tiered-storage/lakehouse-storage.md","sourceDirName":"maintenance/tiered-storage","slug":"/maintenance/tiered-storage/l [...]
\ No newline at end of file
diff --git a/assets/js/e8a73003.2f97a716.js b/assets/js/e8a73003.2f97a716.js
new file mode 100644
index 0000000..83e21c7
--- /dev/null
+++ b/assets/js/e8a73003.2f97a716.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkfluss_website=self.webpackChunkfluss_website||[]).push([[8862],{8243:(e,t,i)=>{i.r(t),i.d(t,{assets:()=>d,contentTitle:()=>o,default:()=>h,frontMatter:()=>l,metadata:()=>r,toc:()=>a});const r=JSON.parse('{"id":"engine-flink/options","title":"Connector Options","description":"\x3c!--","source":"@site/docs/engine-flink/options.md","sourceDirName":"engine-flink","slug":"/engine-flink/options","permalink":"/docs/next/engine-flink/options","draft":false,"unliste [...]
\ No newline at end of file
diff --git a/assets/js/e8ef73cd.867ed824.js b/assets/js/e8ef73cd.867ed824.js
new file mode 100644
index 0000000..afa2547
--- /dev/null
+++ b/assets/js/e8ef73cd.867ed824.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkfluss_website=self.webpackChunkfluss_website||[]).push([[3598],{4904:(e,n,i)=>{i.r(n),i.d(n,{assets:()=>o,contentTitle:()=>a,default:()=>h,frontMatter:()=>l,metadata:()=>s,toc:()=>d});const s=JSON.parse('{"id":"table-design/table-types/pk-table/merge-engines/versioned","title":"Versioned Merge Engine","description":"\x3c!--","source":"@site/versioned_docs/version-0.7/table-design/table-types/pk-table/merge-engines/versioned.md","sourceDirName":"table-design [...]
\ No newline at end of file
diff --git a/assets/js/eb05eaac.1bab7ae5.js b/assets/js/eb05eaac.1bab7ae5.js
new file mode 100644
index 0000000..fa58a1c
--- /dev/null
+++ b/assets/js/eb05eaac.1bab7ae5.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkfluss_website=self.webpackChunkfluss_website||[]).push([[8253],{6782:(e,s,n)=>{n.r(s),n.d(s,{assets:()=>c,contentTitle:()=>a,default:()=>u,frontMatter:()=>r,metadata:()=>o,toc:()=>d});const o=JSON.parse('{"id":"maintenance/filesystems/oss","title":"Aliyun OSS","description":"OSS: Object Storage Service","source":"@site/versioned_docs/version-0.6/maintenance/filesystems/oss.md","sourceDirName":"maintenance/filesystems","slug":"/maintenance/filesystems/oss"," [...]
\ No newline at end of file
diff --git a/assets/js/eb5be0bf.0656c776.js b/assets/js/eb5be0bf.0656c776.js
new file mode 100644
index 0000000..68e88c3
--- /dev/null
+++ b/assets/js/eb5be0bf.0656c776.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkfluss_website=self.webpackChunkfluss_website||[]).push([[4836],{5064:(e,n,o)=>{o.r(n),o.d(n,{assets:()=>a,contentTitle:()=>l,default:()=>u,frontMatter:()=>r,metadata:()=>i,toc:()=>c});const i=JSON.parse('{"id":"engine-flink/lookups","title":"Flink Lookup Joins","description":"\x3c!--","source":"@site/docs/engine-flink/lookups.md","sourceDirName":"engine-flink","slug":"/engine-flink/lookups","permalink":"/docs/next/engine-flink/lookups","draft":false,"unlist [...]
\ No newline at end of file
diff --git a/assets/js/ee8ec7f8.f759db31.js b/assets/js/ee8ec7f8.f759db31.js
new file mode 100644
index 0000000..b8c6780
--- /dev/null
+++ b/assets/js/ee8ec7f8.f759db31.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkfluss_website=self.webpackChunkfluss_website||[]).push([[1852],{3182:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>d,contentTitle:()=>r,default:()=>h,frontMatter:()=>l,metadata:()=>s,toc:()=>c});const s=JSON.parse('{"id":"table-design/table-types/pk-table","title":"PrimaryKey Table","description":"Basic Concept","source":"@site/versioned_docs/version-0.5/table-design/table-types/pk-table.md","sourceDirName":"table-design/table-types","slug":"/table-design/table-types/ [...]
\ No newline at end of file
diff --git a/assets/js/f39116bd.e9352550.js b/assets/js/f39116bd.e9352550.js
new file mode 100644
index 0000000..7a7d730
--- /dev/null
+++ b/assets/js/f39116bd.e9352550.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkfluss_website=self.webpackChunkfluss_website||[]).push([[9839],{1957:(e,t,r)=>{r.r(t),r.d(t,{assets:()=>c,contentTitle:()=>o,default:()=>m,frontMatter:()=>i,metadata:()=>s,toc:()=>d});const s=JSON.parse('{"id":"maintenance/tiered-storage/overview","title":"Tiered Storage","description":"\x3c!--","source":"@site/versioned_docs/version-0.7/maintenance/tiered-storage/overview.md","sourceDirName":"maintenance/tiered-storage","slug":"/maintenance/tiered-storage/ [...]
\ No newline at end of file
diff --git a/assets/js/f47dd6e5.daa143cf.js b/assets/js/f47dd6e5.daa143cf.js
new file mode 100644
index 0000000..28c66de
--- /dev/null
+++ b/assets/js/f47dd6e5.daa143cf.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkfluss_website=self.webpackChunkfluss_website||[]).push([[6408],{2815:(e,s,n)=>{n.r(s),n.d(s,{assets:()=>l,contentTitle:()=>o,default:()=>h,frontMatter:()=>a,metadata:()=>t,toc:()=>c});const t=JSON.parse('{"id":"intro","title":"What is Fluss?","description":"Fluss is a streaming storage built for real-time analytics which can serve as the real-time data layer for Lakehouse architectures.","source":"@site/versioned_docs/version-0.5/intro.md","sourceDirName":" [...]
\ No newline at end of file
diff --git a/assets/js/f593d43a.87812e5d.js b/assets/js/f593d43a.87812e5d.js
new file mode 100644
index 0000000..8f0a119
--- /dev/null
+++ b/assets/js/f593d43a.87812e5d.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkfluss_website=self.webpackChunkfluss_website||[]).push([[1956],{3285:(e,s,n)=>{n.r(s),n.d(s,{assets:()=>l,contentTitle:()=>o,default:()=>h,frontMatter:()=>a,metadata:()=>t,toc:()=>c});const t=JSON.parse('{"id":"intro","title":"What is Fluss?","description":"Fluss is a streaming storage built for real-time analytics which can serve as the real-time data layer for Lakehouse architectures.","source":"@site/versioned_docs/version-0.6/intro.md","sourceDirName":" [...]
\ No newline at end of file
diff --git a/assets/js/f5e8f464.3473abca.js b/assets/js/f5e8f464.3473abca.js
new file mode 100644
index 0000000..4818e7e
--- /dev/null
+++ b/assets/js/f5e8f464.3473abca.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkfluss_website=self.webpackChunkfluss_website||[]).push([[6499],{6095:(e,n,s)=>{s.r(n),s.d(n,{assets:()=>c,contentTitle:()=>l,default:()=>u,frontMatter:()=>i,metadata:()=>r,toc:()=>o});const r=JSON.parse('{"id":"quickstart/security","title":"Secure Your Fluss Cluster","description":"\x3c!--","source":"@site/docs/quickstart/security.md","sourceDirName":"quickstart","slug":"/quickstart/security","permalink":"/docs/next/quickstart/security","draft":false,"unlis [...]
\ No newline at end of file
diff --git a/assets/js/f79b4041.5490eddd.js b/assets/js/f79b4041.5490eddd.js
new file mode 100644
index 0000000..fb73d28
--- /dev/null
+++ b/assets/js/f79b4041.5490eddd.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkfluss_website=self.webpackChunkfluss_website||[]).push([[9226],{617:(e,a,t)=>{t.r(a),t.d(a,{assets:()=>r,contentTitle:()=>o,default:()=>h,frontMatter:()=>l,metadata:()=>n,toc:()=>d});const n=JSON.parse('{"id":"table-design/overview","title":"Table Overview","description":"\x3c!--","source":"@site/versioned_docs/version-0.7/table-design/overview.md","sourceDirName":"table-design","slug":"/table-design/overview","permalink":"/docs/table-design/overview","draf [...]
\ No newline at end of file
diff --git a/assets/js/f8dbdc9a.f5e2af1b.js b/assets/js/f8dbdc9a.f5e2af1b.js
new file mode 100644
index 0000000..4042f57
--- /dev/null
+++ b/assets/js/f8dbdc9a.f5e2af1b.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkfluss_website=self.webpackChunkfluss_website||[]).push([[7386],{8062:(e,t,o)=>{o.r(t),o.d(t,{assets:()=>i,contentTitle:()=>l,default:()=>h,frontMatter:()=>a,metadata:()=>s,toc:()=>d});const s=JSON.parse('{"id":"maintenance/tiered-storage/remote-storage","title":"Remote Storage","description":"Remote storage usually means a cost-efficient and fault-tolerant storage comparing to local disk, such as S3, HDFS, OSS.","source":"@site/versioned_docs/version-0.5/ma [...]
\ No newline at end of file
diff --git a/assets/js/fe66138b.b2cdef42.js b/assets/js/fe66138b.b2cdef42.js
new file mode 100644
index 0000000..cfe0138
--- /dev/null
+++ b/assets/js/fe66138b.b2cdef42.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkfluss_website=self.webpackChunkfluss_website||[]).push([[6618],{2596:(e,r,s)=>{s.r(r),s.d(r,{assets:()=>i,contentTitle:()=>a,default:()=>h,frontMatter:()=>o,metadata:()=>n,toc:()=>d});const n=JSON.parse('{"id":"install-deploy/deploying-with-docker","title":"Deploying with Docker","description":"\x3c!--","source":"@site/versioned_docs/version-0.7/install-deploy/deploying-with-docker.md","sourceDirName":"install-deploy","slug":"/install-deploy/deploying-with- [...]
\ No newline at end of file
diff --git a/assets/js/ff2ceeff.06a4dc1f.js b/assets/js/ff2ceeff.06a4dc1f.js
new file mode 100644
index 0000000..ed65be8
--- /dev/null
+++ b/assets/js/ff2ceeff.06a4dc1f.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkfluss_website=self.webpackChunkfluss_website||[]).push([[5228],{5351:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>l,contentTitle:()=>i,default:()=>h,frontMatter:()=>a,metadata:()=>s,toc:()=>u});var s=n(9485),o=n(4848),r=n(8453);const a={title:"Announcing Fluss 0.6",authors:["jark"],date:new Date("2025-03-10T00:00:00.000Z"),tags:["releases"]},i=void 0,l={authorsImageUrls:[void 0]},u=[];function c(e){const t={img:"img",p:"p",strong:"strong",...(0,r.R)(),...e.components [...]
\ No newline at end of file
diff --git a/assets/js/ffad4089.a4b4fe06.js b/assets/js/ffad4089.a4b4fe06.js
new file mode 100644
index 0000000..b1ffeb0
--- /dev/null
+++ b/assets/js/ffad4089.a4b4fe06.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkfluss_website=self.webpackChunkfluss_website||[]).push([[2133],{3181:e=>{e.exports=JSON.parse('{"tag":{"label":"releases","permalink":"/blog/tags/releases","description":"Content related release announcement.","allTagsPath":"/blog/tags","count":2,"unlisted":false},"listMetadata":{"permalink":"/blog/tags/releases","page":1,"postsPerPage":10,"totalPages":1,"totalCount":2,"blogDescription":"Blog","blogTitle":"Blog"}}')}}]);
\ No newline at end of file
diff --git a/assets/js/main.a06cb6b9.js b/assets/js/main.a06cb6b9.js
new file mode 100644
index 0000000..d278734
--- /dev/null
+++ b/assets/js/main.a06cb6b9.js
@@ -0,0 +1,2 @@
+/*! For license information please see main.a06cb6b9.js.LICENSE.txt */
+(self.webpackChunkfluss_website=self.webpackChunkfluss_website||[]).push([[8792],{3219:(e,t,n)=>{"use strict";n.d(t,{Bc:()=>C,E8:()=>Zn,a1:()=>Qn});var r=n(6540);n(961);function o(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=Array(t);n<t;n++)r[n]=e[n];return r}function a(e,t,n,r,o,a,i){try{var s=e[a](i),l=s.value}catch(e){return void n(e)}s.done?t(l):Promise.resolve(l).then(r,o)}function i(e){return function(){var t=this,n=arguments;return new Promise((function(r,o){var i=e.app [...]
\ No newline at end of file
diff --git a/assets/js/main.a06cb6b9.js.LICENSE.txt b/assets/js/main.a06cb6b9.js.LICENSE.txt
new file mode 100644
index 0000000..91dc894
--- /dev/null
+++ b/assets/js/main.a06cb6b9.js.LICENSE.txt
@@ -0,0 +1,64 @@
+/* NProgress, (c) 2013, 2014 Rico Sta. Cruz - http://ricostacruz.com/nprogress
+ * @license MIT */
+
+/*! Bundled license information:
+
+prismjs/prism.js:
+ (**
+ * Prism: Lightweight, robust, elegant syntax highlighting
+ *
+ * @license MIT <https://opensource.org/licenses/MIT>
+ * @author Lea Verou <https://lea.verou.me>
+ * @namespace
+ * @public
+ *)
+*/
+
+/**
+ * @license React
+ * react-dom.production.min.js
+ *
+ * Copyright (c) Facebook, Inc. and its affiliates.
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE file in the root directory of this source tree.
+ */
+
+/**
+ * @license React
+ * react-jsx-runtime.production.min.js
+ *
+ * Copyright (c) Facebook, Inc. and its affiliates.
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE file in the root directory of this source tree.
+ */
+
+/**
+ * @license React
+ * react.production.min.js
+ *
+ * Copyright (c) Facebook, Inc. and its affiliates.
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE file in the root directory of this source tree.
+ */
+
+/**
+ * @license React
+ * scheduler.production.min.js
+ *
+ * Copyright (c) Facebook, Inc. and its affiliates.
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE file in the root directory of this source tree.
+ */
+
+/** @license React v16.13.1
+ * react-is.production.min.js
+ *
+ * Copyright (c) Facebook, Inc. and its affiliates.
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE file in the root directory of this source tree.
+ */
diff --git a/assets/js/runtime~main.264c6f6f.js b/assets/js/runtime~main.264c6f6f.js
new file mode 100644
index 0000000..61a2453
--- /dev/null
+++ b/assets/js/runtime~main.264c6f6f.js
@@ -0,0 +1 @@
+(()=>{"use strict";var e,a,c,f,d,b={},t={};function r(e){var a=t[e];if(void 0!==a)return a.exports;var c=t[e]={exports:{}};return b[e].call(c.exports,c,c.exports,r),c.exports}r.m=b,e=[],r.O=(a,c,f,d)=>{if(!c){var b=1/0;for(i=0;i<e.length;i++){c=e[i][0],f=e[i][1],d=e[i][2];for(var t=!0,o=0;o<c.length;o++)(!1&d||b>=d)&&Object.keys(r.O).every((e=>r.O[e](c[o])))?c.splice(o--,1):(t=!1,d<b&&(b=d));if(t){e.splice(i--,1);var n=f();void 0!==n&&(a=n)}}return a}d=d||0;for(var i=e.length;i>0&&e[i-1] [...]
\ No newline at end of file
diff --git a/blog/archive/index.html b/blog/archive/index.html
new file mode 100644
index 0000000..51e6cc3
--- /dev/null
+++ b/blog/archive/index.html
@@ -0,0 +1,27 @@
+<!doctype html>
+<html lang="en" dir="ltr" class="plugin-blog plugin-id-default" data-has-hydrated="false">
+<head>
+<meta charset="UTF-8">
+<meta name="generator" content="Docusaurus v3.8.1">
+<title data-rh="true">Archive | Fluss</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/docusaurus-social-card.jpg"><meta data-rh="true" name="twitter:image" content="https://fluss.apache.org/img/docusaurus-social-card.jpg"><meta data-rh="true" property="og:url" content="https://fluss.apache.org/blog/a [...]
+<link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Fluss Atom Feed">
+
+
+
+
+<link rel="search" type="application/opensearchdescription+xml" title="Fluss" href="/opensearch.xml">
+
+<link rel="icon" href="/img/logo.svg">
+<link rel="manifest" href="/manifest.json">
+<meta name="theme-color" content="#0071e3"><link rel="stylesheet" href="/assets/css/styles.3ca55d09.css">
+<script src="/assets/js/runtime~main.264c6f6f.js" defer="defer"></script>
+<script src="/assets/js/main.a06cb6b9.js" defer="defer"></script>
+</head>
+<body class="navigation-with-keyboard">
+<svg xmlns="http://www.w3.org/2000/svg" style="display: none;"><defs>
+<symbol id="theme-svg-external-link" viewBox="0 0 24 24"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"/></symbol>
+</defs></svg>
+<script>!function(){var t="light";var e=function(){try{return new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}}()||function(){try{return window.localStorage.getItem("theme")}catch(t){}}();document.documentElement.setAttribute("data-theme",e||t),document.documentElement.setAttribute("data-theme-choice",e||t)}(),function(){try{const c=new URLSearchParams(window.location.search).entries();for(var[t,e]of c)if(t.startsWith("docusaurus-data-")){var a=t.replace("do [...]
+ Apache®, Apache Flink®, Flink®, Apache Kafka®, Kafka®, Spark® and associated open source project names and logos are trademarks of the Apache Software Foundation.</div></div></div></footer></div>
+</body>
+</html>
\ No newline at end of file
diff --git a/blog/atom.css b/blog/atom.css
new file mode 100644
index 0000000..d2fc20b
--- /dev/null
+++ b/blog/atom.css
@@ -0,0 +1,75 @@
+/**
+ * Copyright (c) Facebook, Inc. and its affiliates.
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE file in the root directory of this source tree.
+ */
+
+main {
+ flex: 1 0 auto;
+ width: 100%;
+ margin: 2rem auto;
+ max-width: 800px;
+ /* stylelint-disable-next-line font-family-name-quotes */
+ font-family: system-ui, -apple-system, Segoe UI, Roboto, Ubuntu, Cantarell;
+}
+
+.info {
+ display: block;
+ margin: 2rem 0;
+ padding: 1.6rem 2.4rem;
+ border: 1px solid dodgerblue;
+ border-left-width: 0.5rem;
+ border-radius: 0.4rem;
+ background-color: #edf5ff;
+}
+
+a {
+ color: #005aff;
+ text-decoration: none;
+}
+
+h1 {
+ text-wrap: balance;
+ font-size: 3.4rem;
+ font-weight: 800;
+ margin-bottom: 2rem;
+ display: flex;
+ align-items: center;
+}
+
+h1 .rss-icon {
+ height: 3.2rem;
+ width: 3.2rem;
+ margin-right: 1rem;
+}
+
+h2 {
+ font-size: 2.2rem;
+ font-weight: 700;
+ margin-bottom: 0.2rem;
+}
+
+h3 {
+ font-size: 1.8rem;
+ font-weight: 700;
+ margin-bottom: 0.1rem;
+}
+
+.blog-description {
+ font-size: 1.4rem;
+ margin-bottom: 0.6rem;
+}
+
+.blog-post-date {
+ font-size: 1rem;
+ line-height: 1.4rem;
+ font-style: italic;
+ color: #797b7e;
+}
+
+.blog-post-description {
+ font-size: 1rem;
+ line-height: 1.4rem;
+ color: #434349;
+}
diff --git a/blog/atom.xml b/blog/atom.xml
new file mode 100644
index 0000000..6e195f4
--- /dev/null
+++ b/blog/atom.xml
@@ -0,0 +1,799 @@
+<?xml version="1.0" encoding="utf-8"?><?xml-stylesheet type="text/xsl" href="atom.xsl"?>
+<feed xmlns="http://www.w3.org/2005/Atom">
+ <id>https://fluss.apache.org/blog/</id>
+ <title>Fluss Blog</title>
+ <updated>2025-06-18T00:00:00.000Z</updated>
+ <generator>https://github.com/jpmonette/feed</generator>
+ <link rel="alternate" href="https://fluss.apache.org/blog/"/>
+ <subtitle>Fluss Blog</subtitle>
+ <icon>https://fluss.apache.org/img/logo/fluss_favicon.svg</icon>
+ <entry>
+ <title type="html"><![CDATA[Announcing Fluss 0.7]]></title>
+ <id>https://fluss.apache.org/blog/releases/0.7/</id>
+ <link href="https://fluss.apache.org/blog/releases/0.7/"/>
+ <updated>2025-06-18T00:00:00.000Z</updated>
+ <summary type="html"><![CDATA[<!--]]></summary>
+ <content type="html"><![CDATA[<p><img decoding="async" loading="lazy" alt="Banner" src="https://fluss.apache.org/assets/images/banner-8cc4ea9295caf8358e14adf7a69beb01.png" width="1322" height="632" class="img_ev3q"></p>
+<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="https://fluss.apache.org/assets/images/overview-255047ec7648f12c63660b40d1147c86.png" width="1248" height="778" class="img_ev3q"></p>
+<h2 class="anchor anchorWithStickyNavbar_LWe7" id="stability-enhancements">Stability Enhancements<a href="https://fluss.apache.org/blog/releases/0.7/#stability-enhancements" class="hash-link" aria-label="Direct link to Stability Enhancements" title="Direct link to Stability Enhancements"></a></h2>
+<p>In this release, we have dedicated significant effort to enhancing system stability. By building a comprehensive stability testing framework covering end-to-end processes and multi-scenario fault simulations, combined with large-scale stress testing using real business data, and through rigorous production-level stability validation in Alibaba, we have addressed and resolved over 50 issues. This has significantly improved the stability of Fluss' core modules and the overall robustness [...]
+<ul>
+<li><strong>Online/Offline Node Optimization:</strong> Refactored the ISR (In-Sync Replica) update mechanism and replica synchronization logic and enhanced idempotency guarantees. This significantly improves system stability and reduces the risk of data loss during node failures.</li>
+<li><strong>Server Metadata Caching:</strong> Introduced a consistent metadata caching layer on the server side. Clients now fetch metadata from the local server cache instead of ZooKeeper, significantly reducing request latency and pressure on ZooKeeper.</li>
+<li><strong>Server Rack-Aware Support:</strong> During replica assignment, the system automatically avoids placing multiple replicas within the same "rack", thereby significantly improving fault tolerance and high availability. This feature is especially beneficial in multi-AZ deployments and large-scale data center disaster recovery scenarios. You can configure the "rack" of the TabletServer via setting <code>tablet-server.rack</code> in <code>server.yaml</code>.</li>
+<li><strong>Accelerated Table Creation:</strong> Leveraged batched metadata updates to reduce table initialization time. For example, the time for a table creation with 1024 buckets was reduced from minutes to milliseconds.</li>
+<li><strong>Optimized Read/Write Pipelines:</strong>
+<ul>
+<li>Introduce bucket-id-based shuffle for primary key tables to improve write throughput.</li>
+<li>Dynamically estimate the batch size based on incoming traffic to optimize memory usage and throughput.</li>
+<li>Optimize the Arrow memory release logic to enhance job stability.</li>
+</ul>
+</li>
+</ul>
+<p>These enhancements make Fluss 0.7 ready for most production use cases.</p>
+<h2 class="anchor anchorWithStickyNavbar_LWe7" id="new-architecture-of-the-streaming-lakehouse">New Architecture of the Streaming Lakehouse<a href="https://fluss.apache.org/blog/releases/0.7/#new-architecture-of-the-streaming-lakehouse" class="hash-link" aria-label="Direct link to New Architecture of the Streaming Lakehouse" title="Direct link to New Architecture of the Streaming Lakehouse"></a></h2>
+<p>In Fluss 0.5, we first introduced the Streaming Lakehouse feature, with the powerful Union Read ability, we can significantly reduce the cost of streaming storage and improve the data freshness of Lakehouse.</p>
+<blockquote>
+<p>Note: Union Reads allows querying and combining the results from both Lakehouse (historical) and Fluss (real-time) data.</p>
+</blockquote>
+<p>However, the initial implementation had architectural limitations affecting scalability and operability in production. In Fluss 0.7, we’ve completely re-architected the Streaming Lakehouse feature to address these challenges.</p>
+<h3 class="anchor anchorWithStickyNavbar_LWe7" id="elastic-stateless-service">Elastic Stateless Service<a href="https://fluss.apache.org/blog/releases/0.7/#elastic-stateless-service" class="hash-link" aria-label="Direct link to Elastic Stateless Service" title="Direct link to Elastic Stateless Service"></a></h3>
+<p>Previously, the lake tiering service was implemented as a Flink job encapsulating Fluss as a Source and Paimon as a Sink, storing sync offsets state in Flink’s State, this making it a stateful service.
+This led to several operational issues:</p>
+<ul>
+<li><strong>Single Point of Failure:</strong> The lifecycle of each table is bound to a specific Flink job. Once a job fails, the synchronization of all tables hosted by the job will be blocked.</li>
+<li><strong>Limited Scalability:</strong> Could only scale vertically (increase job resources), not horizontally (start multiple jobs).</li>
+<li><strong>Inflexible Scheduling:</strong> Unable to prioritize tables and dynamically assign to dedicated Flink clusters.</li>
+<li><strong>Opaque State:</strong> Flink State being a black box made monitoring and troubleshooting the offset difficult.</li>
+</ul>
+<p>To address these challenges, we've re-architected the lake tiering service into a truly elastic and stateless component.
+The sync offset is now persisted directly within Fluss metadata, with future plans for integration into Paimon v1.2 snapshot properties.
+Furthermore, Flink jobs have transitioned from maintaining persistent table subscriptions to a more efficient model where they process one table at a time,
+dynamically requesting the next table upon completion of the current one.</p>
+<p><img decoding="async" loading="lazy" alt="New Architecture Diagram" src="https://fluss.apache.org/assets/images/new_tiering_service-4509c1a4b51c6821c0fe622cdda534e4.png" width="1980" height="1805" class="img_ev3q"></p>
+<p>This optimization significantly reduces the load on Fluss and boosts batch processing efficiency. As a result, cluster operators gain:</p>
+<ul>
+<li><strong>Enhanced Service Robustness:</strong> Operators can launch multiple Flink jobs to distribute workload and increase overall system resilience.</li>
+<li><strong>Flexible Resource Management:</strong> The ability to stop idle jobs at any time allows for immediate reclamation of valuable cluster resources.</li>
+<li><strong>Dynamic Task Orchestration:</strong> Sync tasks can now be dynamically scheduled across all active Flink jobs, optimizing resource utilization.</li>
+<li><strong>Actionable Offset Visibility:</strong> The offset state is now queryable, providing greater insight and control over data processing.</li>
+</ul>
+<p>This design ensures end-to-end consistency across all operations.
+Furthermore, this stateless design also decouples us from the tight Flink dependency, paving the way for future lightweight execution models, such as running on FaaS (Function as a Service).</p>
+<h3 class="anchor anchorWithStickyNavbar_LWe7" id="pluggable-lake-format">Pluggable Lake Format<a href="https://fluss.apache.org/blog/releases/0.7/#pluggable-lake-format" class="hash-link" aria-label="Direct link to Pluggable Lake Format" title="Direct link to Pluggable Lake Format"></a></h3>
+<p>The previous implementation had a tight coupling with Apache Paimon, which restricted our ability to integrate with other lake formats, such as Iceberg.
+With version 0.7, we have abstracted and modularized all lake format interfaces.
+This enhancement enables easy, plugin-style support for Iceberg and other emerging formats.</p>
+<h3 class="anchor anchorWithStickyNavbar_LWe7" id="native-flink-command-submission">Native Flink Command Submission<a href="https://fluss.apache.org/blog/releases/0.7/#native-flink-command-submission" class="hash-link" aria-label="Direct link to Native Flink Command Submission" title="Direct link to Native Flink Command Submission"></a></h3>
+<p>Previously, users were limited to the <code>lakehouse.sh</code> script for initiating the lake tiering service, which submitted jobs to the Flink cluster.
+While convenient, this approach restricted deployment flexibility, particularly when encountering diverse Flink deployment modes and internal product platforms.
+Fluss 0.7 now addresses this by supporting <strong>native job submission via standard Flink commands</strong> (<code>flink run</code>).
+This enhancement ensures broad compatibility with various deployment modes while significantly lowering learning and integration costs.
+The following is an example of how to submit the lake tiering service using the native Flink command:</p>
+<div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#9CDCFE;--prism-background-color:#1E1E1E"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style="color:#9CDCFE;background-color:#1E1E1E"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#9CDCFE"><span class="token plain">flink run /path/to/fluss-flink-tiering-0.7.0.jar </span><span class="token punctuation" sty [...]
+<p>See more details in the <a href="https://fluss.apache.org/docs/maintenance/tiered-storage/lakehouse-storage/">Streaming Lakehouse documentation</a>.</p>
+<h2 class="anchor anchorWithStickyNavbar_LWe7" id="streaming-partition-pruning">Streaming Partition Pruning<a href="https://fluss.apache.org/blog/releases/0.7/#streaming-partition-pruning" class="hash-link" aria-label="Direct link to Streaming Partition Pruning" title="Direct link to Streaming Partition Pruning"></a></h2>
+<p>Partitioning is a foundational technique in modern data warehouses and Lakehouse architectures for optimizing query performance by
+logically dividing datasets along meaningful dimensions (e.g., time, region, business line).</p>
+<p>Fluss 0.7 introduces <strong>streaming partition pruning</strong>, enabling selective reading of relevant partitions based on query conditions.
+For example, if a query filters on <code>nation_key = 'US'</code>, the Fluss Source will only read matching partitions,
+significantly reducing network I/O and compute overhead.
+Apart from that, we also support the following advanced partition features to make partition pruning adaptable and easy to use:</p>
+<ul>
+<li><strong>Multi-level Partitioning:</strong> Supports nested partition strategies (e.g., <code>dt=20250617/region=US/business=sale</code>).</li>
+<li><strong>Dynamic Partition Creation:</strong> Automatically creates required partitions based on incoming data, no manual pre-creation is required.</li>
+<li><strong>Automatic Partition Discovery:</strong> Fluss source adds matched new partitions to the subscription in real-time.</li>
+</ul>
+<p>Using real business data from <strong>Taobao - the largest online shopping platform in China,</strong> we tested the read and write performance between non-partitioned and partitioned tables (with 20 auto-created partitions). The write results show that the multi-level partition and dynamic partition creation mechanism do not have a significant impact on the write performance.
+<img decoding="async" loading="lazy" alt="Write Perf" src="https://fluss.apache.org/assets/images/write_perf-25c062766e117f2c092a79653cf69a85.jpg" width="890" height="554" class="img_ev3q"></p>
+<p>At the same time, under the same data scale, we tested the streaming read performance of non-partitioned tables and partitioned tables under three partition conditions:
+<strong>unconditional</strong>, <strong>medium matching</strong> (hitting five partitions), and <strong>exact matching</strong> (hitting one partition).
+From the results, we can observe that when the partition condition only matches 1/20 of the partitions,
+<strong>the network traffic is reduced by about 20x</strong> and the <strong>processing time is reduced by nearly 9x</strong>,
+demonstrating the huge performance benefit of partition pruning in streaming reads.</p>
+<p><img decoding="async" loading="lazy" alt="Read Perf" src="https://fluss.apache.org/assets/images/read_perf-66abe9aa4ee1bf9ef52dc10c59072c0f.jpg" width="836" height="852" class="img_ev3q"></p>
+<p>Streaming partition pruning is the second pushdown feature introduced after streaming column pruning in Fluss.
+Looking ahead, we plan to introduce <strong>predicate pushdown with Arrow batch-level I/O pruning</strong> to further enhance query efficiency.</p>
+<h2 class="anchor anchorWithStickyNavbar_LWe7" id="enterprise-grade-security">Enterprise-Grade Security<a href="https://fluss.apache.org/blog/releases/0.7/#enterprise-grade-security" class="hash-link" aria-label="Direct link to Enterprise-Grade Security" title="Direct link to Enterprise-Grade Security"></a></h2>
+<p>To meet enterprise-grade security requirements, Fluss 0.7 fully supports Authentication and Authorization mechanisms.</p>
+<p><strong>Authentication</strong> is the process of confirming the identity of the client.
+Fluss introduced a plugin-based authentication with built-in <strong>SASL/PLAIN</strong> support, compatible with <strong>JAAS</strong> (Java Authentication and Authorization Service) configuration for both client and server credentials.</p>
+<p><strong>Authorization</strong> controls which resources the identity can access and which operations it can perform after identity confirmation.
+Fluss implements fine-grained permission control through the <strong>ACL</strong> (Access Control List) mechanism, supporting multi-level access control at the Cluster, Database, and Table levels.</p>
+<p>Additionally, we've integrated Flink SQL's <code>CALL</code> statements to ease ACL permission management for users.
+For instance, granting read access to the <code>mydb</code> database for user <code>Tim</code> can now be accomplished with the following command:</p>
+<div class="language-sql codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#9CDCFE;--prism-background-color:#1E1E1E"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-sql codeBlock_bY9V thin-scrollbar" style="color:#9CDCFE;background-color:#1E1E1E"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#9CDCFE"><span class="token keyword" style="color:rgb(86, 156, 214)">CALL</span><span class="token plain"> admin_catalog</span>< [...]
+<p>For details, please refer to the <a href="https://fluss.apache.org/docs/security/overview/">Security documentation</a> and quickstarts.</p>
+<h2 class="anchor anchorWithStickyNavbar_LWe7" id="flink-datastream-connector">Flink DataStream Connector<a href="https://fluss.apache.org/blog/releases/0.7/#flink-datastream-connector" class="hash-link" aria-label="Direct link to Flink DataStream Connector" title="Direct link to Flink DataStream Connector"></a></h2>
+<p>Fluss 0.7 officially introduces the DataStream Connector, supporting both Source and Sink for reading and writing log and primary key tables. Users can now seamlessly integrate Fluss tables into Flink DataStream pipelines.</p>
+<p>Here’s an example of reading data from a Fluss table into a Flink DataStream:</p>
+<div class="language-java codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#9CDCFE;--prism-background-color:#1E1E1E"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-java codeBlock_bY9V thin-scrollbar" style="color:#9CDCFE;background-color:#1E1E1E"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#9CDCFE"><span class="token class-name" style="color:rgb(78, 201, 176)">FlussSource</span><span class="token generics punctuat [...]
+<p>For usage examples and configuration parameters, see the <a href="https://alibaba.github.io/fluss-docs/docs/engine-flink/datastream/" target="_blank" rel="noopener noreferrer">DataStream Connector documentation</a>.</p>
+<h2 class="anchor anchorWithStickyNavbar_LWe7" id="fluss-java-client">Fluss Java Client<a href="https://fluss.apache.org/blog/releases/0.7/#fluss-java-client" class="hash-link" aria-label="Direct link to Fluss Java Client" title="Direct link to Fluss Java Client"></a></h2>
+<p>In this version, we officially release the Fluss Java Client, a client library designed for developers working with structured stream tables. The client includes two core API modules:</p>
+<ul>
+<li><strong>Table API:</strong> For table-based data operations, supporting streaming reads/writes, updates, deletions, and point queries.</li>
+<li><strong>Admin API:</strong> For metadata management, including cluster management, table lifecycle, and access control.</li>
+</ul>
+<p>The client supports forward and backward compatibility, ensuring smooth upgrades across Fluss versions. With the Fluss Java Client, developers can build online applications and data ingestion services based on Fluss, as well as enterprise-level components such as Fluss management platforms and operations monitoring systems. For detailed usage instructions, please refer to the official documentation: <a href="https://alibaba.github.io/fluss-docs/docs/apis/java-client/" target="_blank" [...]
+<p>Fluss uses Apache Arrow as its underlying storage format, enabling efficient cross-language extensions. A <strong>Fluss Python Client</strong> is planned for future releases, leveraging the rich ecosystem of <strong>PyArrow</strong> to integrate with popular data analysis tools such as <strong>Pandas</strong> and <strong>DuckDB</strong>.
+This will further lower the barrier for real-time data exploration and analytics.</p>
+<h2 class="anchor anchorWithStickyNavbar_LWe7" id="future-roadmap">Future Roadmap<a href="https://fluss.apache.org/blog/releases/0.7/#future-roadmap" class="hash-link" aria-label="Direct link to Future Roadmap" title="Direct link to Future Roadmap"></a></h2>
+<p>In the next releases, we will continue to enhance system robustness and operational capabilities and plan to introduce <strong>Rolling Upgrades</strong> and <strong>Cluster Rebalance</strong>.
+In addition, with the new pluggable datalake format of the Streaming Lakehouse, we will further expand support for the mainstream datalake table formats, such as an <strong>Apache Iceberg</strong> integration.
+Meanwhile, we will explore the possibility of using Fluss in <strong>multimodal AI</strong> use cases, supporting ingestion of multimodal data,
+and integrating with <strong><a href="https://github.com/lancedb/lance" target="_blank" rel="noopener noreferrer">Lance</a></strong> format in the Streaming Lakehouse architecture.</p>
+<p>Fluss is under active development. Be sure to stay updated on the project, give it a try and if you like it,
+don’t forget to give it some ❤️ via ⭐ on <a href="https://github.com/alibaba/fluss" target="_blank" rel="noopener noreferrer">GitHub</a>.</p>
+<h2 class="anchor anchorWithStickyNavbar_LWe7" id="list-of-contributors">List of contributors<a href="https://fluss.apache.org/blog/releases/0.7/#list-of-contributors" class="hash-link" aria-label="Direct link to List of contributors" title="Direct link to List of contributors"></a></h2>
+<p>The Fluss community would like to express gratitude to all the contributors who made this release possible:</p>
+<p>Benchao Li, CaoZhen, Feng Wang, Giannis Polyzos, HZY, Hongshun Wang, Jark Wu, Junbo wang, Kerwin, Leonard Xu, MehulBatra, Michael Koepf, Min Zhao, Nicholas Jiang, Radek Grebski, Rohan Dubey, Xiaojian Sun, Yang Guo, dao-jun, gkatzioura, luoyuxia, majialong, xiaozhou, yunhong, yuxia Luo, yx9o, zhangmang, 道君</p>]]></content>
+ <author>
+ <name>Jark Wu</name>
+ <uri>https://github.com/wuchong</uri>
+ </author>
+ <category label="releases" term="releases"/>
+ </entry>
+ <entry>
+ <title type="html"><![CDATA[Understanding Partial Updates]]></title>
+ <id>https://fluss.apache.org/blog/partial-updates/</id>
+ <link href="https://fluss.apache.org/blog/partial-updates/"/>
+ <updated>2025-06-01T00:00:00.000Z</updated>
+ <summary type="html"><![CDATA[<!--]]></summary>
+ <content type="html"><![CDATA[<p><img decoding="async" loading="lazy" alt="Banner" src="https://fluss.apache.org/assets/images/banner-a09e6bac14dc2bee3dbc698347cb2d7f.png" width="1348" height="958" class="img_ev3q"></p>
+<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:
+<em>user preferences</em>, <em>past purchases</em>, <em>clickstream behavior</em>, <em>cart activity</em>, <em>product reviews</em>, <em>support tickets</em>, <em>ad impressions</em>, and <em>loyalty status</em>.</p>
+<p>That’s at least <strong>8 different data sources</strong>, each producing updates independently.</p>
+<p>Joining multiple data streams at scale, although it works with Apache Flink it can be really challenging and resource-intensive.
+More specifically, it can lead to:</p>
+<ul>
+<li><strong>Really large state sizes in Flink:</strong> as it needs to buffer all incoming events until they can be joined. In many case states need to be kept around for a long period of time if not indefinitely.</li>
+<li><strong>Deal with checkpoints overhead and backpressure:</strong> as the join operation and large state uploading can create a bottleneck in the pipeline.</li>
+<li><strong>States are not easy to inspect and debug:</strong> as they are often large and complex. This can make it difficult to understand what is happening in the pipeline and why certain events are not being processed correctly.</li>
+<li><strong>State TTL can lead to inconsistent results:</strong> as events may be dropped before they can be joined. This can lead to data loss and incorrect results in the final output.</li>
+</ul>
+<p>Overall, this approach not only consumes a lot of memory and CPU, but also complicates the job design and maintenance.</p>
+<p><img decoding="async" loading="lazy" alt="Streaming Joins" src="https://fluss.apache.org/assets/images/streaming_join-761699227c5633f3575e2036b9e2ac61.png" width="1375" height="550" class="img_ev3q"></p>
+<h3 class="anchor anchorWithStickyNavbar_LWe7" id="partial-updates-a-different-approach-with-fluss">Partial Updates: A Different Approach with Fluss<a href="https://fluss.apache.org/blog/partial-updates/#partial-updates-a-different-approach-with-fluss" class="hash-link" aria-label="Direct link to Partial Updates: A Different Approach with Fluss" title="Direct link to Partial Updates: A Different Approach with Fluss"></a></h3>
+<p>Fluss introduces a more elegant solution: <strong>partial updates</strong> on a primary key table.</p>
+<p>Instead of performing multi-way joins in the streaming job, Fluss allows each data stream source to independently update only its relevant columns into a shared wide table identified by the primary key.
+In Fluss, you can define a wide table (for example, a user_profile table based on a <code>user_id</code>) that contains all possible fields from all sources.
+Each source stream then writes partial rows – only the fields it knows about – into this table.</p>
+<p><img decoding="async" loading="lazy" alt="Partial Update" src="https://fluss.apache.org/assets/images/partial_update-d529bf24211a76b31444bc7918872d59.png" width="1488" height="669" class="img_ev3q"></p>
+<p>Fluss’s storage engine automatically merges these partial updates together based on the primary key.
+Essentially, Fluss maintains the latest combined value for each key, so you don’t have to manage large join states in Flink.</p>
+<p>Under the hood, when a new partial update for a key arrives, Fluss will look up the existing record for that primary key, update the specific columns provided, and leave other columns unchanged.
+The result is written back as the new version of the record.
+This happens in <em>real-time</em>, so the table is <strong>always up-to-date</strong> with the latest information from all streams.</p>
+<p>Next, let's try and better understand how this works in practice with a concrete example.</p>
+<h3 class="anchor anchorWithStickyNavbar_LWe7" id="example-building-a-unified-wide-table">Example: Building a Unified Wide Table<a href="https://fluss.apache.org/blog/partial-updates/#example-building-a-unified-wide-table" class="hash-link" aria-label="Direct link to Example: Building a Unified Wide Table" title="Direct link to Example: Building a Unified Wide Table"></a></h3>
+<blockquote>
+<p>You can find the full source code on github <a href="https://github.com/ververica/ververica-fluss-examples/tree/main/partial_updates" target="_blank" rel="noopener noreferrer">here</a>.</p>
+</blockquote>
+<p>Start by cloning the repository, run <code>docker compose up</code> to spin up the development enviroment and finally grab a terminal
+into the <code>jobmanager</code> and start the Flink SQL cli, by running the following command:</p>
+<div class="language-shell codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#9CDCFE;--prism-background-color:#1E1E1E"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-shell codeBlock_bY9V thin-scrollbar" style="color:#9CDCFE;background-color:#1E1E1E"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#9CDCFE"><span class="token plain">./bin/sql-client.sh</span><br></span></code></pre></div></div>
+<p>Great so far ! 👍</p>
+<p><strong>Step 1:</strong> The first thing we need to do is to create a Flink catalog that will be used to store the tables we are going to create.
+Let's create a catalog called <code>fluss_catalog</code> and use this catalog.</p>
+<div class="language-sql codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#9CDCFE;--prism-background-color:#1E1E1E"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-sql codeBlock_bY9V thin-scrollbar" style="color:#9CDCFE;background-color:#1E1E1E"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#9CDCFE"><span class="token keyword" style="color:rgb(86, 156, 214)">CREATE</span><span class="token plain"> CATALOG fluss_catal [...]
+<p><strong>Step 2:</strong> Then let's create <code>3 tables</code> to represent the different data sources that will be used to build the recommendations wide table.</p>
+<div class="language-sql codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#9CDCFE;--prism-background-color:#1E1E1E"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-sql codeBlock_bY9V thin-scrollbar" style="color:#9CDCFE;background-color:#1E1E1E"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#9CDCFE"><span class="token comment" style="color:rgb(106, 153, 85)">-- Recommendations – model scores</span><span class="token [...]
+<p><strong>Step 3:</strong> Of course, we will need some sample data to work with , so let's go on and insert some records into the tables. 💻</p>
+<div class="language-sql codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#9CDCFE;--prism-background-color:#1E1E1E"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-sql codeBlock_bY9V thin-scrollbar" style="color:#9CDCFE;background-color:#1E1E1E"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#9CDCFE"><span class="token comment" style="color:rgb(106, 153, 85)">-- Recommendations – model scores</span><span class="token [...]
+<div class="language-sql codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#9CDCFE;--prism-background-color:#1E1E1E"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-sql codeBlock_bY9V thin-scrollbar" style="color:#9CDCFE;background-color:#1E1E1E"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#9CDCFE"><span class="token comment" style="color:rgb(106, 153, 85)">-- Impressions – how often each (user,item) was shown</span [...]
+<div class="language-sql codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#9CDCFE;--prism-background-color:#1E1E1E"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-sql codeBlock_bY9V thin-scrollbar" style="color:#9CDCFE;background-color:#1E1E1E"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#9CDCFE"><span class="token comment" style="color:rgb(106, 153, 85)">-- Clicks – user engagement</span><span class="token plain" [...]
+<blockquote>
+<p><strong>Note:</strong> 🚨 So far the jobs we run were bounded jobs, so they will finish after inserting the records. Moving forward we will run some streaming jobs.
+So keep in mind that each job runs with a <code>parallelism of 3</code> and our environment is set up <code>with 10 slots total</code>.
+So make sure to keep an eye to the Flink Web UI to see how many slots are used and how many are available and stop some jobs when are no longer needed to free up resourecs.</p>
+</blockquote>
+<p><strong>Step 4:</strong> At this point let's open up a separate terminal and start the Flink SQL CLI.
+In this new terminal, make sure to run set the <code>result-mode</code>:</p>
+<div class="language-shell codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#9CDCFE;--prism-background-color:#1E1E1E"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-shell codeBlock_bY9V thin-scrollbar" style="color:#9CDCFE;background-color:#1E1E1E"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#9CDCFE"><span class="token plain">SET </span><span class="token string" style="color:rgb(206, 145, 120)">'sql-client.execut [...]
+<p>and then run:</p>
+<div class="language-sql codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#9CDCFE;--prism-background-color:#1E1E1E"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-sql codeBlock_bY9V thin-scrollbar" style="color:#9CDCFE;background-color:#1E1E1E"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#9CDCFE"><span class="token keyword" style="color:rgb(86, 156, 214)">SELECT</span><span class="token plain"> </span><span class= [...]
+<p>to observe the output of the table, as we insert <code>partially</code> records into the it from the different sources.</p>
+<p><strong>Step 5:</strong> Let's insert the records from the <code>recommendations</code> table into the <code>user_rec_wide</code> table.</p>
+<div class="language-sql codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#9CDCFE;--prism-background-color:#1E1E1E"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-sql codeBlock_bY9V thin-scrollbar" style="color:#9CDCFE;background-color:#1E1E1E"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#9CDCFE"><span class="token comment" style="color:rgb(106, 153, 85)">-- Apply recommendation scores</span><span class="token pla [...]
+<p><strong>Output:</strong> Notice, how only the related columns are updated in the <code>user_rec_wide</code> table and the rest of the columns are <code>NULL</code>.</p>
+<div class="language-shell codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#9CDCFE;--prism-background-color:#1E1E1E"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-shell codeBlock_bY9V thin-scrollbar" style="color:#9CDCFE;background-color:#1E1E1E"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#9CDCFE"><span class="token plain">Flink SQL</span><span class="token operator" style="color:rgb(212, 212, 212)">></span> [...]
+<p><strong>Step 5:</strong> Next, let's insert the records from the <code>impressions</code> table into the <code>user_rec_wide</code> table.</p>
+<div class="language-sql codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#9CDCFE;--prism-background-color:#1E1E1E"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-sql codeBlock_bY9V thin-scrollbar" style="color:#9CDCFE;background-color:#1E1E1E"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#9CDCFE"><span class="token comment" style="color:rgb(106, 153, 85)">-- Apply impression counts</span><span class="token plain"> [...]
+<p><strong>Output:</strong> Notice how the <code>impressions</code> records are inserted into the <code>user_rec_wide</code> table and the <code>imp_cnt</code> column is updated.</p>
+<div class="language-shell codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#9CDCFE;--prism-background-color:#1E1E1E"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-shell codeBlock_bY9V thin-scrollbar" style="color:#9CDCFE;background-color:#1E1E1E"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#9CDCFE"><span class="token plain">Flink SQL</span><span class="token operator" style="color:rgb(212, 212, 212)">></span> [...]
+<p><strong>Step 6:</strong> Finally, let's insert the records from the <code>clicks</code> table into the <code>user_rec_wide</code> table.</p>
+<div class="language-sql codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#9CDCFE;--prism-background-color:#1E1E1E"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-sql codeBlock_bY9V thin-scrollbar" style="color:#9CDCFE;background-color:#1E1E1E"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#9CDCFE"><span class="token comment" style="color:rgb(106, 153, 85)">-- Apply click counts</span><span class="token plain"></spa [...]
+<p><strong>Output:</strong> Notice how the <code>clicks</code> records are inserted into the <code>user_rec_wide</code> table and the <code>click_cnt</code> column is updated.</p>
+<div class="language-shell codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#9CDCFE;--prism-background-color:#1E1E1E"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-shell codeBlock_bY9V thin-scrollbar" style="color:#9CDCFE;background-color:#1E1E1E"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#9CDCFE"><span class="token plain">Flink SQL</span><span class="token operator" style="color:rgb(212, 212, 212)">></span> [...]
+<p><strong>Reminder:</strong> ‼️As mentioned before make sure to stop the jobs that are no longer needed to free up resources.</p>
+<p>Now let's switch to <code>batch</code> mode and query the current snapshot of the <code>user_rec_wide</code> table.</p>
+<p>But before that, let's start the <a href="https://alibaba.github.io/fluss-docs/docs/maintenance/tiered-storage/lakehouse-storage/#start-the-datalake-tiering-service" target="_blank" rel="noopener noreferrer">Tiering Service</a> that allows offloading the tables as <code>Lakehouse</code> tables.</p>
+<p><strong>Step 7:</strong> Open a new terminal 💻 in the <code>Coordinator Server</code> and run the following command to start the <code>Tiering Service</code>:</p>
+<div class="language-shell codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#9CDCFE;--prism-background-color:#1E1E1E"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-shell codeBlock_bY9V thin-scrollbar" style="color:#9CDCFE;background-color:#1E1E1E"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#9CDCFE"><span class="token plain">./bin/lakehouse.sh </span><span class="token parameter variable" style="color:rgb(156, 22 [...]
+<p>The configured checkpoint is <code>flink.execution.checkpointing.interval=30s</code> so wait a bit until the first checkpoint is created
+and data gets offloading to the <code>Lakehouse</code> tables.</p>
+<p><strong>Step 8:</strong> Finally let's switch to <code>batch</code> mode and query the current snapshot of the <code>user_rec_wide</code> table.</p>
+<div class="language-shell codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#9CDCFE;--prism-background-color:#1E1E1E"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-shell codeBlock_bY9V thin-scrollbar" style="color:#9CDCFE;background-color:#1E1E1E"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#9CDCFE"><span class="token plain">SET </span><span class="token string" style="color:rgb(206, 145, 120)">'execution.runtime [...]
+<p>🎉 That's it! You have successfully created a unified wide table using partial updates in Fluss.</p>
+<h3 class="anchor anchorWithStickyNavbar_LWe7" id="conclusion">Conclusion<a href="https://fluss.apache.org/blog/partial-updates/#conclusion" class="hash-link" aria-label="Direct link to Conclusion" title="Direct link to Conclusion"></a></h3>
+<p>Partial updates in Fluss enable an alternative approach in how we design streaming data pipelines for enriching or joining data.</p>
+<p>When all your sources share a primary key - otherwise you can mix & match <a href="https://alibaba.github.io/fluss-docs/docs/engine-flink/lookups/#lookup" target="_blank" rel="noopener noreferrer">streaming lookup joins</a> - you can turn the problem on its head: update a unified table incrementally, rather than joining streams on the fly.</p>
+<p>The result is a more scalable, maintainable, and efficient pipeline.
+Engineers can spend less time wrestling with Flink’s state, checkpoints and join mechanics, and more time delivering fresh, integrated data to power real-time analytics and applications.
+With Fluss handling the merge logic, achieving a single, up-to-date view from multiple disparate streams becomes way more elegant. 😁</p>
+<p>And before you go 😊 don’t forget to give Fluss 🌊 some ❤️ via ⭐ on <a href="https://github.com/alibaba/fluss" target="_blank" rel="noopener noreferrer">GitHub</a></p>]]></content>
+ <author>
+ <name>Giannis Polyzos</name>
+ <uri>https://github.com/polyzos</uri>
+ </author>
+ </entry>
+ <entry>
+ <title type="html"><![CDATA[The Story of Fluss Logo]]></title>
+ <id>https://fluss.apache.org/blog/unveil-fluss-logo/</id>
+ <link href="https://fluss.apache.org/blog/unveil-fluss-logo/"/>
+ <updated>2025-05-28T00:00:00.000Z</updated>
+ <summary type="html"><![CDATA[<!--]]></summary>
+ <content type="html"><![CDATA[<p><img decoding="async" loading="lazy" src="https://fluss.apache.org/assets/images/colored_logo-570a85568f48c50f3ce9cdcfc57c8670.png" width="1614" height="686" class="img_ev3q"></p>
+<h2 class="anchor anchorWithStickyNavbar_LWe7" id="introducing-the-little-otter">Introducing the Little Otter<a href="https://fluss.apache.org/blog/unveil-fluss-logo/#introducing-the-little-otter" class="hash-link" aria-label="Direct link to Introducing the Little Otter" title="Direct link to Introducing the Little Otter"></a></h2>
+<p>Today is <a href="https://www.otter.org/world-otter-day" target="_blank" rel="noopener noreferrer">World Otter Day</a>, and we are thrilled to introduce the little otter to the Fluss community! 🎉</p>
+<p>Since open-sourced half a year ago, many community members and friends have asked us:
+"When will Fluss get a logo?" After more than a month of careful design work and over 30 iterations, we’re excited to finally unveil the official Fluss logo — a surfing otter! 🦦🌊</p>
+<p>I don't want to interpret the symbolic meaning behind the Logo in a rigid way. Instead, I’d like to share the story behind its design — how we defined the direction and iterated step by step toward the final version. This process involved numerous subjective decisions made by the team. You might prefer one of the discarded versions, or disagree with some of the design choices. However, we want to share the journey with our community, and we hope it can also serve as a reference or ins [...]
+<h2 class="anchor anchorWithStickyNavbar_LWe7" id="logo-symbolism-what-do-we-want-to-convey">Logo symbolism: what do we want to convey?<a href="https://fluss.apache.org/blog/unveil-fluss-logo/#logo-symbolism-what-do-we-want-to-convey" class="hash-link" aria-label="Direct link to Logo symbolism: what do we want to convey?" title="Direct link to Logo symbolism: what do we want to convey?"></a></h2>
+<p><a href="https://github.com/alibaba/fluss" target="_blank" rel="noopener noreferrer">Fluss</a> is an open-source streaming storage system designed for analytical workloads, with the goal of serving as a real-time data layer for Lakehouse architectures. Therefore, <em><strong>fluidity</strong></em> is the first key message we want to convey.</p>
+<p>Secondly, Fluss’s vision is to <strong>"Bring better analytics to data streams, and bring better freshness to data Lakehouses"</strong>. This requires the ability to adapt to multiple data lake formats and support a variety of query engines and compute engines. So, <em><strong>adaptability</strong></em> is the second core idea we want to convey.</p>
+<p>Additionally, as an open-source project planning to be donated to the Apache Software Foundation, building an open, diverse, and collaborative community has always been one of our core goals. In line with this value, we wanted the brand to express <em><strong>friendliness</strong></em>, which ultimately led us to choose animal as the logo design direction.</p>
+<p>We have also considered using abstract graphics for logo design. However, we noticed that many open-source projects that start with abstract logos, eventually introduce animal mascots to convey the friendliness of the community. These mascots not only play an important role in community outreach but also often replace the main logo in many contexts, becoming more representative visual symbols — such as Go’s gopher, Rust’s crab, and Airbyte’s octopus. Animal images are easier to get cl [...]
+<p><img decoding="async" loading="lazy" src="https://fluss.apache.org/assets/images/image1-6acb85f09ad799d93582a37896aabf30.png" width="2768" height="1604" class="img_ev3q"></p>
+<p>Therefore, we made clear the direction in the early stage of Fluss Logo design: use an Animal image to convey our concept of <strong>fluidity</strong>, <strong>adaptability</strong>, and <strong>friendliness</strong>. The project name "Fluss" comes from the German word for "river" (Fluss), and we also hope that this animal has a close relationship with the river. Combined with these characteristics, the first animal that comes to our mind is the <strong>otter</strong>. The otter is an [...]
+<p><img decoding="async" loading="lazy" src="https://fluss.apache.org/assets/images/image2-b9a57e1c35eb09c32fa4fcd07406ceeb.png" width="2310" height="1242" class="img_ev3q"></p>
+<h2 class="anchor anchorWithStickyNavbar_LWe7" id="design-iterations-for-more-than-30-versions">Design iterations for more than 30 versions<a href="https://fluss.apache.org/blog/unveil-fluss-logo/#design-iterations-for-more-than-30-versions" class="hash-link" aria-label="Direct link to Design iterations for more than 30 versions" title="Direct link to Design iterations for more than 30 versions"></a></h2>
+<p>After clarifying the design direction and core values of Fluss Logo, we began to communicate with the design team in depth and launched multiple rounds of iteration. However, in the early versions of the design, we still couldn’t find the right feel — something was missing: the fluidity.</p>
+<p><img decoding="async" loading="lazy" src="https://fluss.apache.org/assets/images/image3-37c9a30c044c5afbc6e35fa21c1793bc.png" width="1930" height="1014" class="img_ev3q"></p>
+<p>Therefore, we used ChatGPT to find inspiration, and tried a variety of prompt words, and this picture with a surfing wave quickly caught our eyes: dynamic, energy, speed, and flow, which is what we want! Although this otter looks like a Jerry rat... our design team quickly got our idea.</p>
+<p><img decoding="async" loading="lazy" src="https://fluss.apache.org/assets/images/image4-c4082ae4730f49472a0414543ab5075a.png" width="298" height="294" class="img_ev3q"></p>
+<p>Based on the core elements of “otter” + “surfing”, we started a new round of design, and we iterated more than 20 versions based on this and finally evolved to the version you see today.</p>
+<p><img decoding="async" loading="lazy" src="https://fluss.apache.org/assets/images/image5-7b6a1c8656ea141b803b8787e89d75df.png" width="2626" height="1204" class="img_ev3q"></p>
+<p>Subsequently, we also made many variations of the logo to adapt to different environments and background colors.</p>
+<p><img decoding="async" loading="lazy" src="https://fluss.apache.org/assets/images/image6-ec1c384b777aef0f617d3fcb08a5e39e.png" width="1900" height="1048" class="img_ev3q"></p>
+<h2 class="anchor anchorWithStickyNavbar_LWe7" id="get-feedback-from-community-users">Get feedback from community users<a href="https://fluss.apache.org/blog/unveil-fluss-logo/#get-feedback-from-community-users" class="hash-link" aria-label="Direct link to Get feedback from community users" title="Direct link to Get feedback from community users"></a></h2>
+<p>Designing a logo is a highly subjective process. But for an open-source project, the goal isn't to please the founding team — it's to resonate with the community. That’s why we've always valued community feedback and used it to guide our iterations.</p>
+<p>Some of the community feedback I loved very much:</p>
+<ul>
+<li>"The Fluss otter seems to be a sibling to Flink's squirrel."</li>
+<li>"I see Paimon in it!"</li>
+<li>"It's soooo cute!"</li>
+</ul>
+<p>Give it some ❤️ via ⭐ on GitHub if you like it as well!
+<a href="https://github.com/alibaba/fluss" target="_blank" rel="noopener noreferrer">https://github.com/alibaba/fluss</a></p>
+<h2 class="anchor anchorWithStickyNavbar_LWe7" id="community-egg">Community Egg<a href="https://fluss.apache.org/blog/unveil-fluss-logo/#community-egg" class="hash-link" aria-label="Direct link to Community Egg" title="Direct link to Community Egg"></a></h2>
+<p>At the time of the Fluss logo release, we also submitted an <a href="https://lists.apache.org/thread/osg23opm9x95xm318160808r984k0wk9" target="_blank" rel="noopener noreferrer">incubation proposal</a> to the Apache Software Foundation, thanks to the strong support from our incubation mentors Yu Li, tison, Jingsong Lee, Becket Qin, and Jean-Baptiste. We're confident that Fluss will soon become one of the Apache projects.</p>
+<p>In parallel, we’ve designed and launched a series of Fluss community gifts, including stickers, t-shirts, and coffee cups. These items will be available at upcoming community events — stay tuned and pick your swags!</p>
+<p><img decoding="async" loading="lazy" src="https://fluss.apache.org/assets/images/image7-246c5eae97745ed3ae9872e84a86b134.png" width="1130" height="633" class="img_ev3q"></p>]]></content>
+ <author>
+ <name>Jark Wu</name>
+ <uri>https://github.com/wuchong</uri>
+ </author>
+ </entry>
+ <entry>
+ <title type="html"><![CDATA[Announcing Fluss 0.6]]></title>
+ <id>https://fluss.apache.org/blog/releases/0.6/</id>
+ <link href="https://fluss.apache.org/blog/releases/0.6/"/>
+ <updated>2025-03-10T00:00:00.000Z</updated>
+ <summary type="html"><![CDATA[<!--]]></summary>
+ <content type="html"><![CDATA[<p>The Fluss community is pleased to announce the official release of <strong>Fluss 0.6.0</strong>. This version has undergone over
+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="https://fluss.apache.org/assets/images/announce-9ab924e071ec69fe7af8765954f9e966.png" width="1224" height="440" class="img_ev3q"></p>
+<p>This release introduces several exciting features:</p>
+<ul>
+<li><strong>Column Compression</strong>: Reduces storage space by up to <strong>6x</strong> while preserving column pruning performance!</li>
+<li><strong>Merge Engine</strong>: Introduces flexible merge strategies for primary key data, addressing diverse real-time processing needs.</li>
+<li><strong>Prefix Lookup</strong>: Delta Join functionality is now ready on the Fluss side!</li>
+</ul>
+<p>These new features not only significantly enhance the functionality of Fluss but also represent a solid step
+forward in our journey toward building the next-generation analytical stream storage solution.</p>
+<h2 class="anchor anchorWithStickyNavbar_LWe7" id="column-compression">Column Compression<a href="https://fluss.apache.org/blog/releases/0.6/#column-compression" class="hash-link" aria-label="Direct link to Column Compression" title="Direct link to Column Compression"></a></h2>
+<p>Fluss uses the <a href="https://arrow.apache.org/" target="_blank" rel="noopener noreferrer">Apache Arrow</a> columnar format for it's underlying log file storage, fully leveraging Arrow's streaming
+columnar capabilities to achieve highly efficient streaming reads and column pruning. Column pruning in Fluss is performed on the server side,
+with end-to-end zero-copy optimization that allows the required column data to be sent directly to the network without
+loading it into memory from disk. This design not only significantly improves performance but also drastically reduces
+network I/O costs and resource overhead. In previous <a href="https://fluss.apache.org/blog/fluss-intro/#columnar-stream">benchmark tests</a>,
+when 90% of the columns were pruned, Fluss achieved a 10x increase in read throughput, demonstrating its exceptional
+performance in streaming data processing and transmission.</p>
+<p>While column pruning effectively reduces network I/O costs, disk storage costs remain high. To address this,
+we have introduced <strong>column compression</strong> in this version, supporting two highly efficient compression algorithms: <strong>ZSTD</strong> and <strong>LZ4</strong>.
+These algorithms significantly reduce data storage requirements, thereby lowering storage costs substantially.
+Since both compression and decompression are performed on the client side, the amount of data transmitted over the network is reduced,
+further decreasing network I/O costs. Notably, compression is applied independently to each column, ensuring that the original column pruning performance is preserved and that streaming read efficiency remains unaffected.</p>
+<p>To validate the actual effectiveness of this feature, we conducted benchmark tests using a typical business scenario from Alibaba Taobao.
+In the tests, we used datasets of the same scale and Flink jobs with identical resources, writing to Fluss with and without ZSTD compression,
+and compared the write throughput. Subsequently, we read data from the table and tested the read throughput.
+The results showed that column compression not only reduced storage space by approximately 6x but also improved read and write throughput.</p>
+<p><img decoding="async" loading="lazy" alt="Compression Benchmark" src="https://fluss.apache.org/assets/images/compression1-0b666a1467321b28376db725380eda3c.jpg" width="962" height="572" class="img_ev3q"></p>
+<p>However, enabling compression had no noticeable impact on Flink's read/write CPU and memory usage.</p>
+<p><img decoding="async" loading="lazy" alt="Compression Benchmark" src="https://fluss.apache.org/assets/images/compression2-c0feecf4a8fbff819c1ad37ce03ca6e9.jpg" width="1180" height="542" class="img_ev3q"></p>
+<p>The performance of column pruning on compressed data was also tested. The results show that as the number of pruned columns increases,
+a multiple-fold performance improvement is still achieved, maintaining the original column pruning efficiency.</p>
+<p><img decoding="async" loading="lazy" alt="Compression Benchmark" src="https://fluss.apache.org/assets/images/compression3-1f5de9eec6dd66394a793f26395a8f49.jpg" width="1196" height="624" class="img_ev3q"></p>
+<p>Given the significant cost savings and performance improvements achieved by column compression in general use cases,
+ZSTD compression is enabled by default for log tables in Fluss 0.6. Users can disable compression by
+setting the parameter <code>'table.log.arrow.compression.type'='NONE'</code> on the table.</p>
+<h2 class="anchor anchorWithStickyNavbar_LWe7" id="merge-engine">Merge Engine<a href="https://fluss.apache.org/blog/releases/0.6/#merge-engine" class="hash-link" aria-label="Direct link to Merge Engine" title="Direct link to Merge Engine"></a></h2>
+<p>In this version, Fluss introduces a new Merge Engine feature for primary key tables to flexibly support merging strategies for data with the same primary key.
+The default Merge Engine strategy for primary key tables is to retain the latest record for each primary key.
+Users can also choose alternative Merge Engines, including the currently supported <strong>FirstRow Merge Engine</strong> and <strong>Versioned Merge Engine</strong>.
+Support for the <strong>Aggregate Merge Engine</strong> is planned for future releases.</p>
+<h3 class="anchor anchorWithStickyNavbar_LWe7" id="firstrow-merge-engine">FirstRow Merge Engine<a href="https://fluss.apache.org/blog/releases/0.6/#firstrow-merge-engine" class="hash-link" aria-label="Direct link to FirstRow Merge Engine" title="Direct link to FirstRow Merge Engine"></a></h3>
+<p>By setting the table property <code>'table.merge-engine' = 'first_row'</code>, users can retain the first record for each primary key.
+When this configuration is enabled, the primary key table will generate an append-only changelog. This allows downstream
+Flink jobs subscribing to the table to receive an append-only stream, enabling the use of operators that do not support retraction messages,
+such as Window Aggregations and Interval Joins. This feature is commonly used as a replacement for log deduplication in streaming processing,
+effectively reducing costs and system complexity.</p>
+<div class="language-sql codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#9CDCFE;--prism-background-color:#1E1E1E"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-sql codeBlock_bY9V thin-scrollbar" style="color:#9CDCFE;background-color:#1E1E1E"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#9CDCFE"><span class="token comment" style="color:rgb(106, 153, 85)">-- create first_row primary key table</span><span class="to [...]
+<h3 class="anchor anchorWithStickyNavbar_LWe7" id="versioned-merge-engine">Versioned Merge Engine<a href="https://fluss.apache.org/blog/releases/0.6/#versioned-merge-engine" class="hash-link" aria-label="Direct link to Versioned Merge Engine" title="Direct link to Versioned Merge Engine"></a></h3>
+<p>The Versioned Merge Engine supports data updates based on version numbers (or event timestamps). It ensures that only the record
+with the highest version number (or event timestamp) for each primary key is retained. This mechanism is particularly useful for
+deduplicating or merging out-of-order data while guaranteeing eventual consistency with the upstream data source.
+In Flink streaming processing, this feature can be used as a replacement for <code>Rank</code> or <code>Deduplication</code> operations, simplifying workflows and reducing costs effectively.</p>
+<div class="language-sql codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#9CDCFE;--prism-background-color:#1E1E1E"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-sql codeBlock_bY9V thin-scrollbar" style="color:#9CDCFE;background-color:#1E1E1E"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#9CDCFE"><span class="token comment" style="color:rgb(106, 153, 85)">-- create a versioned primary key table, `ts` as the versio [...]
+<h2 class="anchor anchorWithStickyNavbar_LWe7" id="prefix-lookup-for-delta-join">Prefix Lookup for Delta Join<a href="https://fluss.apache.org/blog/releases/0.6/#prefix-lookup-for-delta-join" class="hash-link" aria-label="Direct link to Prefix Lookup for Delta Join" title="Direct link to Prefix Lookup for Delta Join"></a></h2>
+<p>In the scenario of building wide tables with Flink, optimizing Stream-Stream Join using Delta Join is one of the primary use cases for Fluss.
+We have also contributed this functionality to version 0.6. Delta Join can be simply understood as 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 join 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).
+Delta Join addresses challenges such as high cost, unstable job, checkpoint timeout, slow restart recovery, etc., in the traditional Stream-Stream Join.</p>
+<p><img decoding="async" loading="lazy" alt="Delta Join" src="https://fluss.apache.org/assets/images/delta-join-ad3cf73fc7f3f01e306ad02fd765d26d.jpg" width="2024" height="884" class="img_ev3q"></p>
+<p>Overall, Delta Join relies on three core functionalities:</p>
+<ul>
+<li><strong>CDC Stream Read for Source Table</strong>: The foundational capability of Fluss.</li>
+<li><strong>Lookup on Join Keys for Source Table</strong>: Introduced in Fluss 0.6 with Prefix Lookup support.</li>
+<li><strong>Delta Join Operator in Flink SQL</strong>: Proposed in <a href="https://cwiki.apache.org/confluence/display/FLINK/FLIP-486%3A+Introduce+A+New+DeltaJoin" target="_blank" rel="noopener noreferrer">FLIP-486</a>, planned for Flink 2.1.</li>
+</ul>
+<p>Once FLIP-486 is completed, users will be able to achieve Delta Join using the following SQL in conjunction with Fluss's Prefix Lookup functionality:</p>
+<div class="language-sql codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#9CDCFE;--prism-background-color:#1E1E1E"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-sql codeBlock_bY9V thin-scrollbar" style="color:#9CDCFE;background-color:#1E1E1E"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#9CDCFE"><span class="token keyword" style="color:rgb(86, 156, 214)">CREATE</span><span class="token plain"> </span><span class= [...]
+<p>Flink performs lookups on Fluss tables using the Join Key, which serves as the Bucket Key for the Fluss table.
+This allows it to leverage the prefix index of the primary key in the Fluss table, enabling highly efficient lookup queries.
+This feature in Fluss is referred to as Prefix Lookup. Currently, Prefix Lookup can also be used to perform one-to-many lookup queries.
+For more details, please refer to the <a href="https://fluss.apache.org/docs/engine-flink/lookups/#prefix-lookup">Prefix Lookup</a> documentation.</p>
+<h2 class="anchor anchorWithStickyNavbar_LWe7" id="stability--performance-improvements">Stability & Performance Improvements<a href="https://fluss.apache.org/blog/releases/0.6/#stability--performance-improvements" class="hash-link" aria-label="Direct link to Stability & Performance Improvements" title="Direct link to Stability & Performance Improvements"></a></h2>
+<p>In this version, we have focused on enhancing the stability and performance of the system, resolving over 50 issues and improvements,
+and conducting in-depth optimizations on core modules. For example:</p>
+<ul>
+<li>Server-side Optimization : By introducing a delayed response mechanism, CPU consumption in low-traffic scenarios has been significantly reduced, thereby improving resource utilization efficiency.</li>
+<li>Client-side Optimization : A unified memory management mechanism has been implemented to effectively prevent Out-of-Memory (OOM) issues in high-traffic scenarios while reducing the impact of garbage collection (GC) on system performance.</li>
+</ul>
+<p>These improvements have significantly enhanced Fluss's reliability and performance in high-concurrency, large-data-volume scenarios, enabling it to handle analytical stream storage workload more efficiently.</p>
+<h2 class="anchor anchorWithStickyNavbar_LWe7" id="lakehouse-storage">Lakehouse Storage<a href="https://fluss.apache.org/blog/releases/0.6/#lakehouse-storage" class="hash-link" aria-label="Direct link to Lakehouse Storage" title="Direct link to Lakehouse Storage"></a></h2>
+<p>In previous versions, if a table in Fluss needed to enable the Lakehouse storage capability, it had to be enabled when table is created.
+Otherwise, enabling this feature later would require deleting and recreating the table. This limitation arose because enabling Lakehouse storage changes the key encoding format and bucket sharding strategy, making existing tables incompatible with the new configuration.</p>
+<p>In this version, we resolve this by detecting the cluster's default data lake format and adopting its key encoding and bucketing strategy,
+allowing Lakehouse storage to be enabled dynamically after table creation. This eliminates the need for table recreation, improving usability.
+Additionally, Paimon dependency is upgraded to version 1.0.1 in this release.</p>
+<h2 class="anchor anchorWithStickyNavbar_LWe7" id="flink-integration">Flink Integration<a href="https://fluss.apache.org/blog/releases/0.6/#flink-integration" class="hash-link" aria-label="Direct link to Flink Integration" title="Direct link to Flink Integration"></a></h2>
+<p>This version introduces the following enhancements to the Flink connector:</p>
+<ol>
+<li><strong>Sink Support for Ignoring Retractions:</strong>
+Both Primary Key Tables and Log Tables now support the <code>'sink.ignore-delete'</code> parameter in their Sink implementations. This enables better compatibility with scenarios involving retraction messages, meeting the demands of more complex streaming data processing.</li>
+<li><strong>Enhanced Partition Table Operations:</strong>
+Partitioned tables now support <code>ALTER TABLE ADD/DROP PARTITION</code> and <code>SHOW PARTITIONS</code> operations, further improving the flexibility and usability of partition management.</li>
+<li><strong>Sink Interface Upgrade:</strong>
+The <code>SinkFunction</code> has been upgraded to the <code>SinkV2</code> interface, laying the groundwork for full compatibility with Flink 2.0 in the next version. This ensures the system's scalability and compatibility in future releases.</li>
+</ol>
+<h2 class="anchor anchorWithStickyNavbar_LWe7" id="upgrade-notes">Upgrade Notes<a href="https://fluss.apache.org/blog/releases/0.6/#upgrade-notes" class="hash-link" aria-label="Direct link to Upgrade Notes" title="Direct link to Upgrade Notes"></a></h2>
+<p>The Fluss community try to ensure compatibility during upgrades. However, upgrading from Fluss 0.5 to 0.6 is an incompatible upgrade.
+Starting with version 0.6, we will officially provide backward compatibility to ensure smoother and more reliable upgrades in future releases.
+Therefore, version 0.6 is the recommended version for adoption and ecosystem integration.</p>
+<h2 class="anchor anchorWithStickyNavbar_LWe7" id="future-plan">Future Plan<a href="https://fluss.apache.org/blog/releases/0.6/#future-plan" class="hash-link" aria-label="Direct link to Future Plan" title="Direct link to Future Plan"></a></h2>
+<p>In the next version, we will focus on the development of the following core features:</p>
+<ol>
+<li>
+<p><strong>New Lake-Stream Integrated Architecture:</strong>
+A completely new architecture designed for large-scale production environments, featuring plug-in support for mainstream lake formats such as Iceberg and Hudi. This addresses key pain points in Tiering Service performance, scalability, and operational efficiency, providing a more reliable Lakehouse integrated solution for enterprise use cases.</p>
+</li>
+<li>
+<p><strong>Authentication and Authorization:</strong>
+Introducing plugin-based authentication and fine-grained access control to meet the stringent data security requirements of enterprises.</p>
+</li>
+<li>
+<p><strong>Kafka Compatibility:</strong>
+Compatibility with the Kafka network protocol, enabling seamless integration with the Kafka ecosystem.</p>
+</li>
+</ol>
+<p>For more details about the next release roadmap, please visit the community <a href="https://github.com/alibaba/fluss/discussions/556" target="_blank" rel="noopener noreferrer">discussion page</a>. Your suggestions and contributions are highly welcomed!</p>
+<p>Fluss is under active development. Be sure to stay updated on the project, give it a try and if you like it, don’t forget to give it some ❤️ via ⭐ on <a href="https://github.com/alibaba/fluss" target="_blank" rel="noopener noreferrer">GitHub</a></p>
+<h2 class="anchor anchorWithStickyNavbar_LWe7" id="list-of-contributors">List of Contributors<a href="https://fluss.apache.org/blog/releases/0.6/#list-of-contributors" class="hash-link" aria-label="Direct link to List of Contributors" title="Direct link to List of Contributors"></a></h2>
+<p>The Fluss community would like to express gratitude to all the 45 contributors who made this release possible:</p>
+<p>Benchao Li, ForwardXu, Gang Yang, Georgios Andrianakis, Giannis Polyzos, Hongshun Wang, Jark Wu, Kerwin, Leonard Xu, LiJingwei, Liu Xiao, MehulBatra, Michael Koepf, Nicholas Jiang, Ron, RunningDB, Sagar Sumit, SeungMin, Shuo Cheng, Stan, SteNicholas, Tyrantlucifer, Vipamp, WangS-C, WenjunMin, Wenston Xin, Xiaojian Sun, Yang Guo, Yubin Li, Yuepeng Pan, Zmm, benjobs, gongzhongqiang, gyang94, jon-qj, luoyuxia, moses, psxjoy, wangwj, wudi, xiaozhou, yunhong, yuxia Luo, 码界探索, 道君</p>]]></content>
+ <author>
+ <name>Jark Wu</name>
+ <uri>https://github.com/wuchong</uri>
+ </author>
+ <category label="releases" term="releases"/>
+ </entry>
+ <entry>
+ <title type="html"><![CDATA[Towards A Unified Streaming & Lakehouse Architecture]]></title>
+ <id>https://fluss.apache.org/blog/unified-streaming-lakehouse/</id>
+ <link href="https://fluss.apache.org/blog/unified-streaming-lakehouse/"/>
+ <updated>2025-01-28T00:00:00.000Z</updated>
+ <summary type="html"><![CDATA[<!--]]></summary>
+ <content type="html"><![CDATA[<p>The unification of Lakehouse and streaming storage represents a major trend in the future development of modern data lakes and streaming storage systems. Designed specifically for real-time analytics, Fluss has embraced a unified Streaming and Lakehouse architecture from its inception, enabling seamless integration into existing Lakehouse architectures.</p>
+<p>Fluss is designed to address the demands of real-time analytics with the following key capabilities:</p>
+<ul>
+<li><strong>Real-Time Stream Reading and Writing:</strong> Supports millisecond-level end-to-end latency.</li>
+<li><strong>Columnar Stream:</strong> Optimizes storage and query efficiency.</li>
+<li><strong>Streaming Updates:</strong> Enables low-latency updates to data streams.</li>
+<li><strong>Changelog Generation:</strong> Supports changelog generation and consumption.</li>
+<li><strong>Real-Time Lookup Queries:</strong> Facilitates instant lookup queries on primary keys.</li>
+<li><strong>Streaming & Lakehouse Unification:</strong> Seamlessly integrates streaming and lakehouse storage for unified data processing.</li>
+</ul>
+<h3 class="anchor anchorWithStickyNavbar_LWe7" id="fluss-unified-streaming--lakehouse-architecture">Fluss Unified Streaming & Lakehouse Architecture<a href="https://fluss.apache.org/blog/unified-streaming-lakehouse/#fluss-unified-streaming--lakehouse-architecture" class="hash-link" aria-label="Direct link to Fluss Unified Streaming & Lakehouse Architecture" title="Direct link to Fluss Unified Streaming & Lakehouse Architecture"></a></h3>
+<p><img decoding="async" loading="lazy" alt="Unification Solutions" src="https://fluss.apache.org/assets/images/img1-163f1412a1ed7b661686302df5bf9edb.png" width="1866" height="635" class="img_ev3q">
+The Fluss architecture is designed to provide millisecond-level end-to-end latency, ensuring high-performance real-time data writing and reading. A core component of this architecture is the <strong>Tiering Service</strong>, which continuously offloads data in Fluss into a standard lakehouse format, such as <code>Apache Paimon</code> or <code>Apache Iceberg</code>. This tiering ensures that external query engines can directly analyze data in the Lakehouse format, enabling efficient batch [...]
+In this architecture:</p>
+<ul>
+<li><strong>Latest Data in Fluss:</strong> Fluss stores the most recent, high-fidelity data for real-time analytics.</li>
+<li><strong>Historical Data in Paimon:</strong> Older data is compacted and stored in Apache Paimon for large-scale historical analysis.</li>
+</ul>
+<p>By leveraging Apache Flink, the integration of Fluss and Paimon supports Union Reads, which combine real-time data in Fluss with historical data in Paimon. This enables analytical queries with second-level freshness, allowing businesses to benefit from up-to-date insights while maintaining access to extensive historical datasets.</p>
+<p>The Streaming/Lakehouse unification design of Fluss provides:</p>
+<ul>
+<li><strong>Unified Architecture:</strong> Simplifies the Lakehouse ecosystem by combining the strengths of streaming and Lakehouse storage.</li>
+<li><strong>Enhanced Real-Time Capabilities:</strong> Millisecond-level latency ensures data is always fresh for critical use cases.</li>
+<li><strong>Seamless Compatibility:</strong> Native support for standard lakehouse formats ensures interoperability with existing analytics engines.</li>
+<li><strong>Optimized Data Management:</strong> Combines real-time and historical data seamlessly for comprehensive analytics workflows.</li>
+</ul>
+<p>Fluss is <strong>a next-generation approach to streaming storage, purpose-built to complement Lakehouse architectures</strong> and drive the adoption of a streaming and Lakehouse unification across industries.</p>
+<h3 class="anchor anchorWithStickyNavbar_LWe7" id="unified-metadata">Unified metadata<a href="https://fluss.apache.org/blog/unified-streaming-lakehouse/#unified-metadata" class="hash-link" aria-label="Direct link to Unified metadata" title="Direct link to Unified metadata"></a></h3>
+<p><img decoding="async" loading="lazy" alt="Unification Solutions" src="https://fluss.apache.org/assets/images/img2-86b0eb7b0f26884f8ead16dc4a8db648.png" width="1842" height="732" class="img_ev3q"></p>
+<p>In traditional architectures, streaming storage systems like Kafka and Lakehouse storage solutions like Apache Paimon operated as distinct entities, each maintaining its own metadata. For computing engines such as Apache Flink, this separation presented two significant challenges:</p>
+<ol>
+<li><strong>Dual Catalogs:</strong> Users were required to create and manage two separate catalogs—one for streaming storage and another for lake storage.</li>
+<li><strong>Manual Switching:</strong> Accessing data involved manually switching between catalogs to determine whether to query stream storage or lake storage, resulting in operational complexity and inefficiencies.</li>
+</ol>
+<h3 class="anchor anchorWithStickyNavbar_LWe7" id="unified-access-in-fluss">Unified Access in Fluss<a href="https://fluss.apache.org/blog/unified-streaming-lakehouse/#unified-access-in-fluss" class="hash-link" aria-label="Direct link to Unified Access in Fluss" title="Direct link to Unified Access in Fluss"></a></h3>
+<p>In the Fluss, although Fluss and Paimon still maintain independent metadata, they expose a unified catalog and a single table abstraction to the computing engine, such as Apache Flink. This unified approach offers several key advantages:</p>
+<ul>
+<li><strong>Simplified Data Access:</strong> Users can seamlessly access both Lakehouse storage (Paimon) and streaming storage (Fluss) through a single catalog, eliminating the need to manage or switch between separate catalogs.</li>
+<li><strong>Integrated Querying:</strong> The unified table abstraction allows direct access to real-time data in Fluss and historical data in Paimon. For scenarios requiring both, users can leverage <code>Union Reads</code>, combining data from Fluss and Paimon to enable comprehensive analytics with second-level data freshness.</li>
+<li><strong>Operational Efficiency:</strong> By presenting a cohesive interface, the architecture reduces operational complexity, making it easier for users to work with real-time and historical data within a single workflow.</li>
+</ul>
+<p>This unified approach streamlines the interaction between computing engines and storage layers, enhancing both usability and productivity while supporting the high-performance demands of modern analytics workflows.</p>
+<h3 class="anchor anchorWithStickyNavbar_LWe7" id="alignment-of-data-distribution">Alignment of Data Distribution<a href="https://fluss.apache.org/blog/unified-streaming-lakehouse/#alignment-of-data-distribution" class="hash-link" aria-label="Direct link to Alignment of Data Distribution" title="Direct link to Alignment of Data Distribution"></a></h3>
+<p><img decoding="async" loading="lazy" alt="Unification Solutions" src="https://fluss.apache.org/assets/images/img3-d0ea956fb83807118c4d522bdd7b30f4.png" width="1777" height="856" class="img_ev3q"></p>
+<p>In the Fluss, the data distribution between Fluss and Lakehouse storage (e.g., Apache Paimon) is strictly aligned. Fluss supports partitioned tables and buckets, and its bucketing algorithm is fully consistent with Paimon’s. This ensures that a given piece of data is always allocated to the same bucket in both systems, creating a one-to-one correspondence between Fluss buckets and Paimon buckets.
+This strong consistency in data distribution provides two significant benefits:</p>
+<h4 class="anchor anchorWithStickyNavbar_LWe7" id="1-elimination-of-shuffle-overhead-during-tiering">1. Elimination of Shuffle Overhead During Tiering<a href="https://fluss.apache.org/blog/unified-streaming-lakehouse/#1-elimination-of-shuffle-overhead-during-tiering" class="hash-link" aria-label="Direct link to 1. Elimination of Shuffle Overhead During Tiering" title="Direct link to 1. Elimination of Shuffle Overhead During Tiering"></a></h4>
+<p>When tiering data from Fluss into Paimon format:</p>
+<ul>
+<li>A Fluss bucket (e.g., bucket1) can be tiered directly into the corresponding Paimon bucket (bucket1).</li>
+<li>There is no need to read data from a Fluss bucket, calculate which Paimon bucket each piece of data belongs to, and then write it to the appropriate Paimon bucket.</li>
+</ul>
+<p>By bypassing this intermediate redistribution step, the architecture avoids costly shuffle overhead, significantly improving compaction efficiency.</p>
+<h4 class="anchor anchorWithStickyNavbar_LWe7" id="2-prevention-of-data-inconsistencies">2. Prevention of Data Inconsistencies<a href="https://fluss.apache.org/blog/unified-streaming-lakehouse/#2-prevention-of-data-inconsistencies" class="hash-link" aria-label="Direct link to 2. Prevention of Data Inconsistencies" title="Direct link to 2. Prevention of Data Inconsistencies"></a></h4>
+<p>Data consistency is maintained through the use of an identical bucketing algorithm in both Fluss and Paimon. This algorithm calculates the bucket assignment for each piece of data as follows:</p>
+<blockquote>
+<p>bucket_id = hash(row) % bucket_num</p>
+</blockquote>
+<p>By employing the same hash function and algorithm, Fluss and Paimon ensure consistent bucket assignment. If differing algorithms were used, inconsistencies would arise. For example:</p>
+<ul>
+<li>For a primary key table, a data row a might be assigned to bucket1 in Fluss but to bucket2 in Paimon.</li>
+<li>During tiering, if rows were mistakenly placed in bucket1 in Paimon (per Fluss’s assignment), users would fail to locate the data in Paimon due to the mismatch.</li>
+</ul>
+<p>By maintaining strong alignment in data distribution, the architecture eliminates this risk, ensuring data consistency across Fluss and Paimon while simplifying compaction workflows. This alignment underscores the robustness and efficiency of the Fluss unification design.</p>
+<h3 class="anchor anchorWithStickyNavbar_LWe7" id="streaming-reading-more-efficient-data-tracing">Streaming Reading: More Efficient Data Tracing<a href="https://fluss.apache.org/blog/unified-streaming-lakehouse/#streaming-reading-more-efficient-data-tracing" class="hash-link" aria-label="Direct link to Streaming Reading: More Efficient Data Tracing" title="Direct link to Streaming Reading: More Efficient Data Tracing"></a></h3>
+<p>In the Fluss, historical data resides in Lakehouse storage, while real-time data is maintained in Fluss. During streaming reads, this architecture enables a seamless combination of historical and real-time data access:</p>
+<ul>
+<li><strong>Historical Data Access:</strong> Fluss retrieves historical data directly from the Lakehouse storage, leveraging its inherent advantages, such as:<!-- -->
+<ul>
+<li><strong>Efficient Filter Pushdown:</strong> Enables query engines to apply filtering conditions at the storage layer, reducing the amount of data read and improving performance.</li>
+<li><strong>Column Pruning:</strong> Allows retrieval of only the necessary columns, optimizing data transfer and query efficiency.</li>
+<li><strong>High Compression Ratios:</strong> Minimizes storage overhead while maintaining fast retrieval speeds.</li>
+</ul>
+</li>
+<li><strong>Real-Time Data Access:</strong> Fluss concurrently reads the latest real-time data from its own storage, ensuring up-to-the-millisecond freshness.</li>
+</ul>
+<p>By combining the strengths of Lakehouse storage for efficient historical data retrieval and Fluss for real-time streaming data, this architecture delivers a highly performant and scalable solution for streaming read scenarios. This integration ensures that users benefit from low-latency data freshness and optimized query performance across both historical and real-time datasets.</p>
+<h3 class="anchor anchorWithStickyNavbar_LWe7" id="batch-reading-data-freshness-in-seconds">Batch Reading: Data Freshness in Seconds<a href="https://fluss.apache.org/blog/unified-streaming-lakehouse/#batch-reading-data-freshness-in-seconds" class="hash-link" aria-label="Direct link to Batch Reading: Data Freshness in Seconds" title="Direct link to Batch Reading: Data Freshness in Seconds"></a></h3>
+<p><img decoding="async" loading="lazy" alt="Unification Solutions" src="https://fluss.apache.org/assets/images/img4-06aab50ae6bb5a5df5cc0e2658815c1f.png" width="1770" height="747" class="img_ev3q"></p>
+<p>Historical data is stored in the Lakehouse, and real-time data is stored in Fluss. In batch reading scenarios, computing engines (such as Flink) can perform union reading of data in Fluss and lake storage to achieve analysis of data freshness in seconds.</p>
+<h3 class="anchor anchorWithStickyNavbar_LWe7" id="apache-flink-and-fluss">Apache Flink and Fluss<a href="https://fluss.apache.org/blog/unified-streaming-lakehouse/#apache-flink-and-fluss" class="hash-link" aria-label="Direct link to Apache Flink and Fluss" title="Direct link to Apache Flink and Fluss"></a></h3>
+<p><img decoding="async" loading="lazy" alt="Unification Solutions" src="https://fluss.apache.org/assets/images/img5-36f56d95c22f50252c6a5caedbfed1d4.png" width="1761" height="730" class="img_ev3q">
+Fluss exposes a unified API to Flink users, allowing them to choose whether to use union reads or read-only reads on the Lakehouse, using the following SQL:</p>
+<div class="language-sql codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#9CDCFE;--prism-background-color:#1E1E1E"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-sql codeBlock_bY9V thin-scrollbar" style="color:#9CDCFE;background-color:#1E1E1E"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#9CDCFE"><span class="token keyword" style="color:rgb(86, 156, 214)">SELECT</span><span class="token plain"> </span><span class= [...]
+<p>This reads the complete data of the orders table and Flink will union read the data in Fluss and the Lakehouse.
+If the user only needs to read data on the data lake, you can add the <code>$lake</code> suffix after the table to be read. The SQL is as follows</p>
+<div class="language-sql codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#9CDCFE;--prism-background-color:#1E1E1E"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-sql codeBlock_bY9V thin-scrollbar" style="color:#9CDCFE;background-color:#1E1E1E"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#9CDCFE"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#9CDCFE" [...]
+<p>For scenarios where data on a data lake is read-only, Fluss inherits all the optimizations and capabilities of the lake format as a Flink source, such as runtime filters, system table queries, and time travel.</p>
+<h2 class="anchor anchorWithStickyNavbar_LWe7" id="benefits-of-the-unified-architecture">Benefits Of The Unified Architecture<a href="https://fluss.apache.org/blog/unified-streaming-lakehouse/#benefits-of-the-unified-architecture" class="hash-link" aria-label="Direct link to Benefits Of The Unified Architecture" title="Direct link to Benefits Of The Unified Architecture"></a></h2>
+<p>Next, using Apache Paimon as an example, we will illustrate the advantages of using Fluss to build a unified architecture. We will highlight how Fluss enhances the capabilities of Paimon, creating a unified solution that combines the strengths of both systems for efficient real-time and historical data processing.</p>
+<h3 class="anchor anchorWithStickyNavbar_LWe7" id="second-level-timeliness">Second-level Timeliness<a href="https://fluss.apache.org/blog/unified-streaming-lakehouse/#second-level-timeliness" class="hash-link" aria-label="Direct link to Second-level Timeliness" title="Direct link to Second-level Timeliness"></a></h3>
+<p>In Apache Paimon, data visibility is traditionally determined by the Flink checkpoint interval, which typically operates at one minute-level granularity. However, by integrating Fluss with Paimon to build unfiied architecture, this dependency is eliminated.</p>
+<p>With this unification, data becomes visible immediately upon entering Fluss, significantly improving data timeliness to second-level latency. This enhancement ensures that real-time insights can be derived more quickly, meeting the demands of time-sensitive applications while maintaining seamless access to both historical and real-time data.</p>
+<h3 class="anchor anchorWithStickyNavbar_LWe7" id="consistent-data-freshness-across-all-layers">Consistent Data Freshness Across All Layers<a href="https://fluss.apache.org/blog/unified-streaming-lakehouse/#consistent-data-freshness-across-all-layers" class="hash-link" aria-label="Direct link to Consistent Data Freshness Across All Layers" title="Direct link to Consistent Data Freshness Across All Layers"></a></h3>
+<p><img decoding="async" loading="lazy" alt="Unification Solutions" src="https://fluss.apache.org/assets/images/img6-5fdec641b3032d1c0f236cf990d914da.png" width="1570" height="782" class="img_ev3q">
+In the process of building a data warehouse, it is common to organize and manage data by layering, such as Bronze, Silver and Gold following the medallion architecture. As data flows through these layers, maintaining data freshness becomes a critical consideration.</p>
+<p>When Paimon is used as the sole storage solution for each layer, data visibility depends on the Flink checkpoint interval. This introduces cumulative delays:</p>
+<ul>
+<li>The changelog for a given layer becomes visible only after the completion of a Flink checkpoint.</li>
+<li>As this changelog propagates to subsequent layers, the data freshness delay increases with each checkpoint interval.</li>
+</ul>
+<p>For example, with a Flink checkpoint interval of 1 minute:</p>
+<ul>
+<li>The Bronze layer experiences 1-minute delay.</li>
+<li>The Silver layer adds another 1-minute delay, totaling 2 minutes.</li>
+<li>The Gold layer adds yet another 1-minute delay, resulting in a cumulative 3-minute delay.</li>
+</ul>
+<p>With Fluss and Paimon though we get:</p>
+<ul>
+<li><strong>Immediate Data Visibility:</strong> Data in Fluss becomes visible immediately upon ingestion, without waiting for a Flink checkpoint to complete. The changelog is instantly transferred to the next layer.</li>
+<li><strong>Consistent Data Freshness:</strong> The data freshness across all layers is consistent and measured in seconds, eliminating cumulative delays.</li>
+</ul>
+<p>Additionally, if the Fluss Tiering Service is configured with a tiering cycle of 1 minute, the data delay for Paimon storage at each layer is limited to 1 minute, regardless of the number of layers. This ensures:</p>
+<ul>
+<li><strong>Real-Time Data Processing:</strong> Layers can propagate and process data with minimal delay.</li>
+<li><strong>Optimized Streaming & Lakehouse Unification:</strong> The architecture balances the strengths of real-time and batch-oriented storage.</li>
+</ul>
+<p>This integration significantly improves the performance and usability of layered data warehouses, enabling faster insights and better responsiveness to real-time demands.</p>
+<h3 class="anchor anchorWithStickyNavbar_LWe7" id="more-efficient-and-higher-throughput-changelog-generation">More efficient and higher throughput changelog generation<a href="https://fluss.apache.org/blog/unified-streaming-lakehouse/#more-efficient-and-higher-throughput-changelog-generation" class="hash-link" aria-label="Direct link to More efficient and higher throughput changelog generation" title="Direct link to More efficient and higher throughput changelog generation"></a></h3>
+<p>In Apache Paimon, there are currently two commonly used methods for generating changelogs (excluding the Input Producer, which requires more stringent data source requirements and is not considered here):</p>
+<h4 class="anchor anchorWithStickyNavbar_LWe7" id="lookup-changelog-producer">Lookup Changelog Producer<a href="https://fluss.apache.org/blog/unified-streaming-lakehouse/#lookup-changelog-producer" class="hash-link" aria-label="Direct link to Lookup Changelog Producer" title="Direct link to Lookup Changelog Producer"></a></h4>
+<ul>
+<li><strong>Advantages:</strong> Offers high timeliness for generating changelogs.</li>
+<li><strong>Challenges:</strong> Consumes significant computational resources, leading to higher operational costs.</li>
+</ul>
+<h4 class="anchor anchorWithStickyNavbar_LWe7" id="full-compaction-producer">Full Compaction Producer:<a href="https://fluss.apache.org/blog/unified-streaming-lakehouse/#full-compaction-producer" class="hash-link" aria-label="Direct link to Full Compaction Producer:" title="Direct link to Full Compaction Producer:"></a></h4>
+<ul>
+<li><strong>Advantages:</strong> Does not require additional resource consumption, as changelogs are generated during the Full Compaction process.</li>
+<li><strong>Challenges:</strong> Suffers from poor timeliness, as changelog generation is delayed until a Full Compaction is triggered, which typically occurs after several checkpoints.</li>
+</ul>
+<h4 class="anchor anchorWithStickyNavbar_LWe7" id="fluss-and-paimon-optimizing-changelog-generation">Fluss and Paimon: Optimizing Changelog Generation<a href="https://fluss.apache.org/blog/unified-streaming-lakehouse/#fluss-and-paimon-optimizing-changelog-generation" class="hash-link" aria-label="Direct link to Fluss and Paimon: Optimizing Changelog Generation" title="Direct link to Fluss and Paimon: Optimizing Changelog Generation"></a></h4>
+<p>The Fluss and Paimon architecture strikes a balance between timeliness and performance in changelog generation:</p>
+<ul>
+<li><strong>Changelog Timeliness:</strong> Fluss generates changelogs in seconds, ensuring near real-time visibility of data changes.</li>
+<li><strong>Efficient Conversion:</strong> The Fluss Tiering Service efficiently writes Fluss changelogs directly into the Paimon changelog format. This conversion process is highly optimized, avoiding resource-intensive operations such as lookups. Instead, it relies on direct read-and-write operations, significantly reducing overhead.</li>
+</ul>
+<h4 class="anchor anchorWithStickyNavbar_LWe7" id="key-benefits-of-fluss-and-paimon-changelog-generation">Key Benefits of Fluss and Paimon Changelog Generation<a href="https://fluss.apache.org/blog/unified-streaming-lakehouse/#key-benefits-of-fluss-and-paimon-changelog-generation" class="hash-link" aria-label="Direct link to Key Benefits of Fluss and Paimon Changelog Generation" title="Direct link to Key Benefits of Fluss and Paimon Changelog Generation"></a></h4>
+<ol>
+<li><strong>Improved Timeliness:</strong> Near real-time changelog generation ensures data freshness and faster insights.</li>
+<li><strong>Resource Efficiency:</strong> By eliminating the need for computationally expensive operations, the architecture reduces resource consumption while maintaining high performance.</li>
+<li><strong>Seamless Integration:</strong> The direct compatibility between Fluss changelogs and Paimon changelog formats simplifies the process, enhancing system efficiency and reducing operational complexity.</li>
+</ol>
+<p>This architecture provides an elegant solution for use cases that demand both low-latency data updates and optimized resource utilization, making it a robust choice for modern data processing needs.</p>
+<h3 class="anchor anchorWithStickyNavbar_LWe7" id="enabling-multi-writer-support-for-paimon-partial-updates">Enabling Multi-Writer Support for Paimon Partial Updates<a href="https://fluss.apache.org/blog/unified-streaming-lakehouse/#enabling-multi-writer-support-for-paimon-partial-updates" class="hash-link" aria-label="Direct link to Enabling Multi-Writer Support for Paimon Partial Updates" title="Direct link to Enabling Multi-Writer Support for Paimon Partial Updates"></a></h3>
+<p>Partial updates are a critical feature in Apache Paimon, particularly for managing large, wide tables. However, in the current Paimon architecture, performing partial updates on wide tables presents significant challenges:</p>
+<ul>
+<li><strong>Single Writer Limitation:</strong> To ensure consistency, all partial updates to a table must be consolidated into a single SQL job. This requires using a UNION statement to combine all partial update operations into a single pipeline, ensuring only one writer is responsible for updating the table.</li>
+<li><strong>Operational Complexity:</strong> Consolidating all updates into one job makes it difficult to manage and tune individual update operations, leading to challenges in scalability and flexibility.</li>
+</ul>
+<p>With Fluss and Paimon integration these limitations are eliminated</p>
+<p><img decoding="async" loading="lazy" alt="Unification Solutions" src="https://fluss.apache.org/assets/images/img7-8b8e86a6e036ca0f37b6d53f8fc5ae77.png" width="1833" height="783" class="img_ev3q"></p>
+<ul>
+<li><strong>Intermediate Synchronization via Fluss:</strong> All updates pass through Fluss, which serves as an intermediary layer to synchronize changes with Paimon.</li>
+<li><strong>Support for Concurrent Updates:</strong> Fluss enables concurrent updates from multiple SQL jobs, removing the need to consolidate updates into a single job.</li>
+<li><strong>Fine-Grained Job Management:</strong> With the ability to execute multiple independent SQL jobs for updating any number of columns in a wide table, users can perform job-level tuning and management, improving operational efficiency and flexibility.</li>
+</ul>
+<p>This enables organizations to unlock several key advantages:</p>
+<ul>
+<li><strong>High Real-Time Performance:</strong> Lakehouse storage achieves second-level data freshness, meeting the demands of real-time data applications.</li>
+<li><strong>Unified Streaming and Lakehouse Processing:</strong> Data is written once into the architecture and can seamlessly support both batch and streaming use cases, reducing duplication of effort.</li>
+<li><strong>Lower Operational Costs:</strong> Simplified maintenance and reduced complexity of partial updates, lower storage costs by minimizing data duplication and reduced computational costs by eliminating redundant processing pipelines.</li>
+</ul>
+<p>The Fluss and Paimon architecture offers a robust solution for managing partial updates in wide tables while delivering significant improvements in performance, scalability, and operational efficiency.</p>
+<p>All the above highlight the power of a unified streaming and Lakehouse architecture in modern data systems, ensuring real-time capabilities with streamlined workflows.</p>
+<h2 class="anchor anchorWithStickyNavbar_LWe7" id="future-plans">Future plans<a href="https://fluss.apache.org/blog/unified-streaming-lakehouse/#future-plans" class="hash-link" aria-label="Direct link to Future plans" title="Direct link to Future plans"></a></h2>
+<p>The Fluss community is actively working to enhance the streaming and Lakehouse unification capabilities, focusing on the following key areas.</p>
+<h3 class="anchor anchorWithStickyNavbar_LWe7" id="expanding-union-read-ecosystem">Expanding Union Read Ecosystem<a href="https://fluss.apache.org/blog/unified-streaming-lakehouse/#expanding-union-read-ecosystem" class="hash-link" aria-label="Direct link to Expanding Union Read Ecosystem" title="Direct link to Expanding Union Read Ecosystem"></a></h3>
+<p>Currently, Union Read functionality is integrated with Apache Flink, enabling seamless querying of real-time and historical data. Moving forward, the community plans to extend this capability to support additional query engines, such as Apache Spark and StarRocks, further broadening its ecosystem compatibility and adoption.</p>
+<h3 class="anchor anchorWithStickyNavbar_LWe7" id="diversifying-lake-storage-formats">Diversifying Lake Storage Formats<a href="https://fluss.apache.org/blog/unified-streaming-lakehouse/#diversifying-lake-storage-formats" class="hash-link" aria-label="Direct link to Diversifying Lake Storage Formats" title="Direct link to Diversifying Lake Storage Formats"></a></h3>
+<p>At present, Fluss supports Apache Paimon as its primary lake storage. To meet diverse user requirements, the community aims to add support for more lake formats, including <strong>Apache Iceberg</strong> and <strong>Apache Hudi</strong>, thereby providing flexibility and interoperability with a wider range of Lakehouse ecosystems.</p>
+<h3 class="anchor anchorWithStickyNavbar_LWe7" id="optimizing-arrow-to-parquet-conversion">Optimizing Arrow-to-Parquet Conversion<a href="https://fluss.apache.org/blog/unified-streaming-lakehouse/#optimizing-arrow-to-parquet-conversion" class="hash-link" aria-label="Direct link to Optimizing Arrow-to-Parquet Conversion" title="Direct link to Optimizing Arrow-to-Parquet Conversion"></a></h3>
+<p>Fluss leverages Apache Arrow as its storage format, while many Lakehouse formats, such as Paimon, Iceberg, and Hudi, utilize parquet for storage. The Apache Arrow community has developed a mature and efficient solution for converting Arrow data to Parquet. In the future, Fluss will integrate these advancements to enable high-performance Arrow-to-Parquet conversions, significantly reducing the computational overhead of the tiering service and enhancing overall efficiency.</p>]]></content>
+ <author>
+ <name>Luo Yuxia</name>
+ <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[<!--]]></summary>
+ <content type="html"><![CDATA[<p>We have discussed the challenges of using Kafka for real-time analytics in our previous <a 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 anchorWithStickyNavbar_LWe7" 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"></a></h2>
+<h3 class="anchor anchorWithStickyNavbar_LWe7" 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"></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">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 anchorWithStickyNavbar_LWe7" 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"></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 anchorWithStickyNavbar_LWe7" 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"></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 anchorWithStickyNavbar_LWe7" 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"></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 anchorWithStickyNavbar_LWe7" 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"></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 anchorWithStickyNavbar_LWe7" 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"></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><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><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><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">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 anchorWithStickyNavbar_LWe7" 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"></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><strong>Apache Kafka Protocol Compatibility:</strong> This is aimed at helping existing streaming data migrate to Fluss more effectively.</li>
+<li><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><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 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>
+ <entry>
+ <title type="html"><![CDATA[Why Fluss? Top 4 Challenges of Using Kafka for Real-Time Analytics]]></title>
+ <id>https://fluss.apache.org/blog/why-fluss/</id>
+ <link href="https://fluss.apache.org/blog/why-fluss/"/>
+ <updated>2024-12-11T00:00:00.000Z</updated>
+ <summary type="html"><![CDATA[<!--]]></summary>
+ <content type="html"><![CDATA[<p>The industry is undergoing a clear and significant shift as big data computing transitions from offline to real-time processing.
+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>
+<p><img decoding="async" loading="lazy" alt="FF Announcement" src="https://fluss.apache.org/assets/images/img1-a29d423ce0b5f952b79ad2babb903cf5.jpg" width="3656" height="1240" class="img_ev3q">
+The evolution of big data technology is becoming increasingly impactful, reshaping the computing architecture landscape.
+The traditional Hive-based data warehouse has given way to modern architectures, starting with Lakehouse models and progressing
+to the Paimon streaming Lakehouse, which has gained significant traction in markets like China and more recently started expanding to EU/US markets.
+The core driver behind these architectural innovations is the need to improve data processing timeliness. The data freshness is improved from traditional
+T+1 (next-day readiness) to T+1 hours, and now T+1 minutes. However, Lakehouse architectures, being file-system-based,
+inherently face minute-level latency as their practical upper limit.</p>
+<p>Yet, many critical use cases, such as search and recommendation systems, advertisement attribution, and anomaly detection, demand second-level latency.
+While big data technologies have advanced significantly, there remains a notable gap: a user-friendly, second-level storage solution tailored for big data analytics.</p>
+<p>In most real-time data scenarios, Apache Kafka has emerged as the go-to second-level storage solution. Its integration with Apache Flink represents the dominant architecture for building real-time data warehouses. However, while widely adopted, this combination presents significant challenges for achieving true real-time analytics at scale. The limitations of using Kafka for big data analytics highlight the need for a more robust solution to meet the demands of modern real-time use ca [...]
+<h2 class="anchor anchorWithStickyNavbar_LWe7" id="kafka-falls-short-in-real-time-analytics">Kafka Falls Short in Real-Time Analytics<a href="https://fluss.apache.org/blog/why-fluss/#kafka-falls-short-in-real-time-analytics" class="hash-link" aria-label="Direct link to Kafka Falls Short in Real-Time Analytics" title="Direct link to Kafka Falls Short in Real-Time Analytics"></a></h2>
+<h3 class="anchor anchorWithStickyNavbar_LWe7" id="no-support-for-updates">No Support for Updates<a href="https://fluss.apache.org/blog/why-fluss/#no-support-for-updates" class="hash-link" aria-label="Direct link to No Support for Updates" title="Direct link to No Support for Updates"></a></h3>
+<p>The first significant challenge with Apache Kafka is its lack of support for updates, a critical feature for data warehouses. In data warehousing, updates are often essential to correct or amend data. However, Kafka's inability to handle updates results in duplicate records for the same primary key. When consumed by a computing engine, this duplication necessitates costly deduplication processes to ensure accurate results.</p>
+<p><img decoding="async" loading="lazy" alt="FF Announcement" src="https://fluss.apache.org/assets/images/img2-d2d1a314768a1be3da0308e20851d3f3.jpg" width="3656" height="1172" class="img_ev3q"></p>
+<p>In Apache Flink, for instance, handling this issue requires materializing all upstream data in state, which is resource-intensive. Every time data is consumed from Kafka, the deduplication process incurs a substantial overhead, significantly increasing computational and storage costs. This limitation not only impacts performance but also hampers the reusability of Kafka-stored data for downstream business processes.</p>
+<h3 class="anchor anchorWithStickyNavbar_LWe7" id="lack-of-querying-capabilities">Lack of Querying Capabilities<a href="https://fluss.apache.org/blog/why-fluss/#lack-of-querying-capabilities" class="hash-link" aria-label="Direct link to Lack of Querying Capabilities" title="Direct link to Lack of Querying Capabilities"></a></h3>
+<p>The second major limitation of Apache Kafka is hard to debug, primarily due to its lack of native querying capabilities. In data warehousing, querying is a fundamental feature that facilitates troubleshooting and ad-hoc analysis to understand data trends. Unfortunately, Kafka operates much like a black box, making it challenging to perform these critical tasks without additional tools or layers.</p>
+<p><img decoding="async" loading="lazy" alt="FF Announcement" src="https://fluss.apache.org/assets/images/img3-32732f50a5420dad7d1dd6c5b3d17d6f.jpg" width="3696" height="1214" class="img_ev3q"></p>
+<p>To address this limitation, the industry has adopted two primary approaches, each with its own trade-offs:</p>
+<ul>
+<li><strong>Synchronizing Kafka Data to an OLAP System:</strong> This allows for querying data using the OLAP system’s capabilities. However, this approach introduces additional components into the architecture, increasing both complexity and cost. Moreover, it risks data inconsistencies due to synchronization delays.</li>
+<li><strong>Querying Kafka Directly Using Trino:</strong> While Trino can query Kafka, it relies solely on full scans, which are inefficient for large-scale operations. For instance, a simple query on just 1GB of Kafka data can take up to one minute, rendering it impractical for large datasets or real-time requirements.</li>
+</ul>
+<p>These limitations make Kafka unsuitable for efficient and scalable data exploration in modern data warehousing workflows.</p>
+<h3 class="anchor anchorWithStickyNavbar_LWe7" id="difficulty-with-data-backfilling">Difficulty with Data Backfilling<a href="https://fluss.apache.org/blog/why-fluss/#difficulty-with-data-backfilling" class="hash-link" aria-label="Direct link to Difficulty with Data Backfilling" title="Direct link to Difficulty with Data Backfilling"></a></h3>
+<p><img decoding="async" loading="lazy" alt="FF Announcement" src="https://fluss.apache.org/assets/images/img4-5a57c638bb5dd478a86a9fcd1683734f.jpg" width="3526" height="1210" class="img_ev3q">
+The third significant issue with Apache Kafka is processing historical data, also known as data backfilling, a common requirement in data warehousing.
+For instance, in logistics, it usually needs to process and analyze historical data from several months ago. However, Kafka only retain data for a few days due to the high cost of storage.
+Even though Kafka community has introduced <a href="https://cwiki.apache.org/confluence/display/KAFKA/KIP-405%3A+Kafka+Tiered+Storage" target="_blank" rel="noopener noreferrer">Tiered Storage</a> to address the long-term data issue, it still has limitations.
+Reading historical data still require all the data to pass through Kafka brokers, which can lead to brokers unstable and <a href="https://www.warpstream.com/blog/tiered-storage-wont-fix-kafka#increased-complexity-and-operational-burden" target="_blank" rel="noopener noreferrer">disrupt live traffics</a>.</p>
+<p>These limitations highlight Kafka’s inefficiency as a solution for data backfilling in large-scale and long-term analytical use cases, further underscoring the need for more robust alternatives in real-time data warehousing.</p>
+<h3 class="anchor anchorWithStickyNavbar_LWe7" id="excessive-network-costs">Excessive Network Costs<a href="https://fluss.apache.org/blog/why-fluss/#excessive-network-costs" class="hash-link" aria-label="Direct link to Excessive Network Costs" title="Direct link to Excessive Network Costs"></a></h3>
+<p>The final major challenge with Apache Kafka lies in its high network costs, which account for an estimated 88% of Kafka's overall operational expenses. In data warehousing, the "one write, multiple read" pattern is common, with each consumer often requiring only a subset of the data. However, Kafka's design mandates that consumers read the entire dataset, regardless of how much is actually needed.</p>
+<p><img decoding="async" loading="lazy" alt="FF Announcement" src="https://fluss.apache.org/assets/images/img5-e185731d5e249a6c80b962b77b5a16ad.jpg" width="3636" height="1206" class="img_ev3q"></p>
+<p>For instance, among the tens of thousands of Flink SQL jobs at Alibaba, only 49% of the upstream columns are utilized per job on average. Despite this, consumers must read all the columns and pay 100% networking cost, which is highly inefficient and wasteful.</p>
+<p>In summary, using Kafka for real-time analytics presents several critical issues: <strong>(1) lack of support for updates</strong>, <strong>(2) absence of querying capabilities</strong>, <strong>(3) difficulty with data backfilling</strong>, and <strong>(4) excessive network costs</strong>. These limitations make the combination of Flink and Kafka less than ideal for real-time data warehousing.
+But why Kafka lacks these abilities? Is it possible to add the abilities to Kafka?</p>
+<h2 class="anchor anchorWithStickyNavbar_LWe7" id="kafka-is-not-designed-for-analytics">Kafka is not designed for Analytics<a href="https://fluss.apache.org/blog/why-fluss/#kafka-is-not-designed-for-analytics" class="hash-link" aria-label="Direct link to Kafka is not designed for Analytics" title="Direct link to Kafka is not designed for Analytics"></a></h2>
+<p><img decoding="async" loading="lazy" alt="FF Announcement" src="https://fluss.apache.org/assets/images/img6-4741286b7e5d1410d5a8d7036e3cad8d.jpg" width="3620" height="1148" class="img_ev3q">
+The root cause of these challenges lies in the fundamental design philosophy of Kafka: <strong>Kafka is designed for streaming events, NOT for streaming analytics</strong>. Each system has its own focus and strengths, and Kafka's design is optimized for message queue scenarios rather than analytical workloads.</p>
+<p>In Kafka, data is typically stored in a row-oriented format, such as CSV, JSON, or Avro.
+While this is highly efficient for use cases involving message streaming, it becomes a bottleneck for analytical scenarios.
+Data analysis requires handling large volumes of data, and therefore heavily relies on data skipping capabilities from storage, such as column pruning and predicate pushdown.
+For this reason, columnar storage is far better suited for analytical workloads, whereas Kafka's row-based storage is not designed to meet these demands effectively.</p>
+<h2 class="anchor anchorWithStickyNavbar_LWe7" id="introducing-fluss">Introducing Fluss<a href="https://fluss.apache.org/blog/why-fluss/#introducing-fluss" class="hash-link" aria-label="Direct link to Introducing Fluss" title="Direct link to Introducing Fluss"></a></h2>
+<p><img decoding="async" loading="lazy" alt="FF Announcement" src="https://fluss.apache.org/assets/images/img7-06886bca9797751895c82d707cb04b2d.jpg" width="3644" height="1210" class="img_ev3q">
+When visualizing the data ecosystem as a four-quadrant matrix, an intriguing pattern emerges.
+The left side of the matrix represents operational systems, while the right side represents analytical systems.
+The top half is dedicated to stream storage, and the bottom half to table storage.
+In operational systems, both databases and stream storage predominantly use row-based formats, as row storage is more efficient for transactional workloads. Conversely, in analytical systems like Apache Iceberg and Snowflake, columnar storage is preferred due to its superior performance in analytical scenarios.</p>
+<p>Interestingly, the upper-right quadrant of the matrix remains empty, indicating a significant gap in the market: a streaming storage for analytical scenarios. Unsurprisingly, such a storage would likely adopt a columnar format to effectively address the needs of real-time analytics.</p>
+<p>To fill the gap and resolve problems in Flink and streaming analytics, we embarked on a journey two years ago to create a streaming storage. We named the project "<strong>FL</strong>ink <strong>U</strong>nified <strong>S</strong>treaming <strong>S</strong>torage", and from its initials, we derived the name <strong>Fluss</strong>.
+<img decoding="async" loading="lazy" alt="FF Announcement" src="https://fluss.apache.org/assets/images/img8-87cfb5887e9a49febaacd805de5216fe.jpg" width="3700" height="946" class="img_ev3q">
+Interestingly, Flink is derived from the German word for "<strong>agile</strong>", and Fluss, which translates to "<strong>river</strong>" in German, resonates deeply with the project’s vision.
+It symbolizes the streaming data is continuously flowing, distributing and converging into data lakes, just like a river.
+The launch of Fluss coincides with Flink's 10th anniversary, making it a fitting tribute to the project’s heritage and its enduring contribution to the streaming data landscape.</p>
+<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"></p>
+<p>Learn more details about Fluss in the next <a href="https://fluss.apache.org/blog/fluss-intro/">blog post</a>, where we will delve deeper into Fluss's architecture, design principles, key features, and explore how it addresses the challenges of using Kafka for real-time analytics.</p>]]></content>
+ <author>
+ <name>Jark Wu</name>
+ <uri>https://github.com/wuchong</uri>
+ </author>
+ </entry>
+ <entry>
+ <title type="html"><![CDATA[Fluss is Now Open Source]]></title>
+ <id>https://fluss.apache.org/blog/fluss-open-source/</id>
+ <link href="https://fluss.apache.org/blog/fluss-open-source/"/>
+ <updated>2024-11-29T00:00:00.000Z</updated>
+ <summary type="html"><![CDATA[<!--]]></summary>
+ <content type="html"><![CDATA[<p>Earlier this year at Flink Forward 2024 Berlin we <a href="https://www.ververica.com/blog/introducing-fluss" target="_blank" rel="noopener noreferrer">announced Fluss</a> and today we are thrilled to announce open-sourcing the project.
+Fluss is a <strong>streaming storage system</strong> designed to power real-time analytics. It aspires to change how organizations approach real-time data by acting as the <strong>real-time data layer</strong> for the Lakehouse.
+Its cutting-edge design enables businesses to achieve <strong>sub-second latency</strong>, <strong>high throughput</strong>, and <strong>cost efficiency</strong> for data analytics, making it the ideal solution for modern data-driven applications.</p>
+<p>We have historically invested a lot of effort into advancing the data streaming ecosystem, being major contributors to <a href="https://flink.apache.org/" target="_blank" rel="noopener noreferrer">Apache Flink®</a>, <a href="https://www.ververica.com/blog/ververica-donates-flink-cdc-empowering-real-time-data-integration-for-the-community" target="_blank" rel="noopener noreferrer">Apache Flink CDC</a>, and <a href="https://paimon.apache.org/" target="_blank" rel="noopener noreferrer">A [...]
+As part of our commitment, Fluss is now open source under the Apache 2.0 license and is available on <a href="https://github.com/alibaba/fluss" target="_blank" rel="noopener noreferrer">GitHub</a>, inviting users to create the next generation of real-time architectures.</p>
+<p><img decoding="async" loading="lazy" alt="FF Announcement" src="https://fluss.apache.org/assets/images/ff_os-2589690ef465b4d2c76c7861438ad18b.png" width="3840" height="1286" class="img_ev3q"></p>
+<h3 class="anchor anchorWithStickyNavbar_LWe7" id="real-time-streaming-storage-for-the-lakehouse-era">Real-Time Streaming Storage for the Lakehouse Era<a href="https://fluss.apache.org/blog/fluss-open-source/#real-time-streaming-storage-for-the-lakehouse-era" class="hash-link" aria-label="Direct link to Real-Time Streaming Storage for the Lakehouse Era" title="Direct link to Real-Time Streaming Storage for the Lakehouse Era"></a></h3>
+<p>The need for real-time insights has grown exponentially - especially with the recent explosion of AI. Still, the tools and architectures we’ve relied on for years weren’t designed with streaming-first analytical workflows in mind. Traditional architectures often involve complex integrations between message queues like Kafka, processing engines like Flink, and storage systems that are more batch-oriented than real-time. This approach not only increases latency but also adds operational [...]
+<p>At its core, Fluss combines the best of <strong>streaming</strong> and <strong>analytical storage</strong>. Its <strong>columnar stream</strong> design is optimized for real-time analytical queries, enabling lightning-fast data access and updates. With support for <strong>real-time data ingestion</strong> and integrations with <strong>real-time lakehouse solutions</strong> such as Paimon, Fluss ensures that data is always fresh and ready for analysis, making it ideal for applications [...]
+<p>A critical aspect of Fluss is also its deep integration with Apache FlinkⓇ the de facto gold standard for stream processing. This integration combines a <strong>stream processor</strong> and a <strong>real-time storage layer</strong>, eliminating the need for separate message queues like Kafka in analytics-focused architectures. Fluss simplifies pipelines, reduces costs, and improves performance for <strong>high-throughput</strong>, <strong>low-latency analytics</strong>.</p>
+<h3 class="anchor anchorWithStickyNavbar_LWe7" id="building-the-future-of-analytics-with-fluss">Building the Future of Analytics with Fluss<a href="https://fluss.apache.org/blog/fluss-open-source/#building-the-future-of-analytics-with-fluss" class="hash-link" aria-label="Direct link to Building the Future of Analytics with Fluss" title="Direct link to Building the Future of Analytics with Fluss"></a></h3>
+<p>Fluss is designed to support a wide range of use cases, from powering dashboards and monitoring systems to enabling <strong>streaming ETL</strong> and <strong>real-time intelligence pipelines</strong> for the modern AI era. Its ability to provide real-time updates makes it a natural fit for <strong>streaming data warehouses</strong>, where fresh data is essential for decision-making.</p>
+<p>By serving as the real-time data layer on the Lakehouse, Fluss supports both <strong>streaming-first</strong> architectures and <strong>unified batch and stream processing</strong>. This flexibility should be appealing for organizations looking to modernize their analytics stack while keeping costs low and performance high.</p>
+<h3 class="anchor anchorWithStickyNavbar_LWe7" id="whats-next-for-fluss">What’s Next for Fluss?<a href="https://fluss.apache.org/blog/fluss-open-source/#whats-next-for-fluss" class="hash-link" aria-label="Direct link to What’s Next for Fluss?" title="Direct link to What’s Next for Fluss?"></a></h3>
+<p>Open-sourcing Fluss is just the beginning and it will be donated to the Apache Software Foundation (ASF). We’re committed to working closely with the community to expand its capabilities and adoption. You can find more information about the project’s roadmap <a href="https://alibaba.github.io/fluss-docs/roadmap/" target="_blank" rel="noopener noreferrer">here</a>.</p>
+<p><img decoding="async" loading="lazy" alt="Banner" src="https://fluss.apache.org/assets/images/banner-5523bd3a3f5145b15e36c6bfb46796be.png" width="1998" height="1001" class="img_ev3q"></p>
+<h3 class="anchor anchorWithStickyNavbar_LWe7" id="join-the-journey">Join the Journey<a href="https://fluss.apache.org/blog/fluss-open-source/#join-the-journey" class="hash-link" aria-label="Direct link to Join the Journey" title="Direct link to Join the Journey"></a></h3>
+<p>We invite you to join us and help grow our community around the project. Explore Fluss, contribute to its development, and build the next generation of data pipelines.</p>
+<p>Make sure to keep an eye on the project, give it a try and if you like it, don’t forget to give it some ❤️ via ⭐ on <a href="https://github.com/alibaba/fluss" target="_blank" rel="noopener noreferrer">GitHub</a></p>
+<h3 class="anchor anchorWithStickyNavbar_LWe7" id="getting-started">Getting Started<a href="https://fluss.apache.org/blog/fluss-open-source/#getting-started" class="hash-link" aria-label="Direct link to Getting Started" title="Direct link to Getting Started"></a></h3>
+<ul>
+<li>Visit the <a href="https://github.com/alibaba/fluss" target="_blank" rel="noopener noreferrer">GitHub repository</a>.</li>
+<li>Check out the <a href="https://alibaba.github.io/fluss-docs/docs/quickstart/flink/" target="_blank" rel="noopener noreferrer">quickstart guide</a>.</li>
+</ul>
+<h3 class="anchor anchorWithStickyNavbar_LWe7" id="additional-resources">Additional Resources<a href="https://fluss.apache.org/blog/fluss-open-source/#additional-resources" class="hash-link" aria-label="Direct link to Additional Resources" title="Direct link to Additional Resources"></a></h3>
+<ul>
+<li>Announcement Blog Post: <a href="https://www.ververica.com/blog/introducing-fluss" target="_blank" rel="noopener noreferrer">Introducing Fluss: Unified Streaming Storage For Next-Generation Data Analytics</a></li>
+<li>Flink Forward Keynote Announcement: <a href="https://www.ververica.academy/courses/3d163483-5040-4d60-b5b3-755c3277edf7/activities/1af290fd-05bc-4fab-90be-6ed4628399be" target="_blank" rel="noopener noreferrer">The Future - Introducing Fluss</a></li>
+<li>Flink Forward Fluss Presentation: <a href="https://www.ververica.academy/courses/3d163483-5040-4d60-b5b3-755c3277edf7/activities/a366d118-6c53-47ef-91bb-289fc2462b07" target="_blank" rel="noopener noreferrer">Is Kafka the Best Storage for Streaming Analytics?</a></li>
+</ul>]]></content>
+ <author>
+ <name>Jark Wu</name>
+ <uri>https://github.com/wuchong</uri>
+ </author>
+ <author>
+ <name>Giannis Polyzos</name>
+ <uri>https://github.com/polyzos</uri>
+ </author>
+ </entry>
+</feed>
\ No newline at end of file
diff --git a/blog/atom.xsl b/blog/atom.xsl
new file mode 100644
index 0000000..b4b2d96
--- /dev/null
+++ b/blog/atom.xsl
@@ -0,0 +1,92 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<xsl:stylesheet
+ version="3.0"
+ xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
+ xmlns:atom="http://www.w3.org/2005/Atom">
+ <xsl:output method="html" version="1.0" encoding="UTF-8" indent="yes" />
+
+ <xsl:template match="/">
+ <html xmlns="http://www.w3.org/1999/xhtml" lang="en">
+ <head>
+ <title>Atom Feed | <xsl:value-of
+ select="atom:feed/atom:title"
+ /></title>
+ <link rel="stylesheet" href="atom.css" />
+ </head>
+ <body>
+ <main>
+ <div class="description">
+ <div class="info">
+ <strong>This is an Atom feed</strong>. Subscribe by copying the URL
+ from the address bar into your newsreader. Visit
+ <a href="https://aboutfeeds.com/">About Feeds</a> to learn more
+ and get started. It’s free.
+ </div>
+ <h1>
+ <div class="rss-icon">
+ <svg
+ version="1.1"
+ id="Capa_1"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:xlink="http://www.w3.org/1999/xlink"
+ viewBox="0 0 455.731 455.731"
+ xml:space="preserve">
+ <g>
+ <rect
+ x="0"
+ y="0"
+ style="fill: #f78422"
+ width="455.731"
+ height="455.731"
+ />
+ <g>
+ <path
+ style="fill: #ffffff"
+ d="M296.208,159.16C234.445,97.397,152.266,63.382,64.81,63.382v64.348
+ c70.268,0,136.288,27.321,185.898,76.931c49.609,49.61,76.931,115.63,76.931,185.898h64.348
+ C391.986,303.103,357.971,220.923,296.208,159.16z"
+ />
+ <path
+ style="fill: #ffffff"
+ d="M64.143,172.273v64.348c84.881,0,153.938,69.056,153.938,153.939h64.348
+ C282.429,270.196,184.507,172.273,64.143,172.273z"
+ />
+ <circle
+ style="fill: #ffffff"
+ cx="109.833"
+ cy="346.26"
+ r="46.088"
+ />
+ </g>
+ </g>
+ </svg>
+ </div>
+ <xsl:value-of select="atom:feed/atom:title" />
+ </h1>
+ <p class="blog-description">
+ <xsl:value-of select="atom:feed/atom:subtitle" />
+ </p>
+ </div>
+ <h2>Recent Posts</h2>
+ <div class="blog-posts">
+ <xsl:for-each select="atom:feed/atom:entry">
+ <div class="blog-post">
+ <h3><a href="{atom:link/@href}"><xsl:value-of
+ select="atom:title"
+ /></a></h3>
+ <div class="blog-post-date">
+ Published on <xsl:value-of
+ select="substring(atom:updated,0,11)"
+ />
+ </div>
+ <div class="blog-post-description">
+ <xsl:value-of select="atom:summary" />
+ </div>
+ </div>
+ </xsl:for-each>
+ </div>
+ </main>
+ </body>
+ </html>
+ </xsl:template>
+</xsl:stylesheet>
diff --git a/blog/authors/index.html b/blog/authors/index.html
new file mode 100644
index 0000000..2f34599
--- /dev/null
+++ b/blog/authors/index.html
@@ -0,0 +1,27 @@
+<!doctype html>
+<html lang="en" dir="ltr" class="blog-wrapper blog-authors-list-page plugin-blog plugin-id-default" data-has-hydrated="false">
+<head>
+<meta charset="UTF-8">
+<meta name="generator" content="Docusaurus v3.8.1">
+<title data-rh="true">Authors | Fluss</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/docusaurus-social-card.jpg"><meta data-rh="true" name="twitter:image" content="https://fluss.apache.org/img/docusaurus-social-card.jpg"><meta data-rh="true" property="og:url" content="https://fluss.apache.org/blog/a [...]
+<link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Fluss Atom Feed">
+
+
+
+
+<link rel="search" type="application/opensearchdescription+xml" title="Fluss" href="/opensearch.xml">
+
+<link rel="icon" href="/img/logo.svg">
+<link rel="manifest" href="/manifest.json">
+<meta name="theme-color" content="#0071e3"><link rel="stylesheet" href="/assets/css/styles.3ca55d09.css">
+<script src="/assets/js/runtime~main.264c6f6f.js" defer="defer"></script>
+<script src="/assets/js/main.a06cb6b9.js" defer="defer"></script>
+</head>
+<body class="navigation-with-keyboard">
+<svg xmlns="http://www.w3.org/2000/svg" style="display: none;"><defs>
+<symbol id="theme-svg-external-link" viewBox="0 0 24 24"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"/></symbol>
+</defs></svg>
+<script>!function(){var t="light";var e=function(){try{return new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}}()||function(){try{return window.localStorage.getItem("theme")}catch(t){}}();document.documentElement.setAttribute("data-theme",e||t),document.documentElement.setAttribute("data-theme-choice",e||t)}(),function(){try{const c=new URLSearchParams(window.location.search).entries();for(var[t,e]of c)if(t.startsWith("docusaurus-data-")){var a=t.replace("do [...]
+ Apache®, Apache Flink®, Flink®, Apache Kafka®, Kafka®, Spark® and associated open source project names and logos are trademarks of the Apache Software Foundation.</div></div></div></footer></div>
+</body>
+</html>
\ No newline at end of file
diff --git a/blog/fluss-intro/index.html b/blog/fluss-intro/index.html
new file mode 100644
index 0000000..0421406
--- /dev/null
+++ b/blog/fluss-intro/index.html
@@ -0,0 +1,94 @@
+<!doctype html>
+<html lang="en" dir="ltr" class="blog-wrapper blog-post-page plugin-blog plugin-id-default" data-has-hydrated="false">
+<head>
+<meta charset="UTF-8">
+<meta name="generator" content="Docusaurus v3.8.1">
+<title data-rh="true">Introducing Fluss: Streaming Storage for Real-Time Analytics | Fluss</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/docusaurus-social-card.jpg"><meta data-rh="true" name="twitter:image" content="https://fluss.apache.org/img/docusaurus-social-card.jpg"><meta data-rh="true" prope [...]
+<link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Fluss Atom Feed">
+
+
+
+
+<link rel="search" type="application/opensearchdescription+xml" title="Fluss" href="/opensearch.xml">
+
+<link rel="icon" href="/img/logo.svg">
+<link rel="manifest" href="/manifest.json">
+<meta name="theme-color" content="#0071e3"><link rel="stylesheet" href="/assets/css/styles.3ca55d09.css">
+<script src="/assets/js/runtime~main.264c6f6f.js" defer="defer"></script>
+<script src="/assets/js/main.a06cb6b9.js" defer="defer"></script>
+</head>
+<body class="navigation-with-keyboard">
+<svg xmlns="http://www.w3.org/2000/svg" style="display: none;"><defs>
+<symbol id="theme-svg-external-link" viewBox="0 0 24 24"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"/></symbol>
+</defs></svg>
+<script>!function(){var t="light";var e=function(){try{return new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}}()||function(){try{return window.localStorage.getItem("theme")}catch(t){}}();document.documentElement.setAttribute("data-theme",e||t),document.documentElement.setAttribute("data-theme-choice",e||t)}(),function(){try{const c=new URLSearchParams(window.location.search).entries();for(var[t,e]of c)if(t.startsWith("docusaurus-data-")){var a=t.replace("do [...]
+Today, we are excited to introduce Fluss, a cutting-edge streaming storage system designed to power real-time analytics.
+We are going to explore Fluss's architecture, design principles, key features, and how it addresses the challenges of using Kafka for real-time analytics.</p>
+<h2 class="anchor anchorWithStickyNavbar_LWe7" id="key-features-of-fluss">Key Features of Fluss<a href="#key-features-of-fluss" class="hash-link" aria-label="Direct link to Key Features of Fluss" title="Direct link to Key Features of Fluss"></a></h2>
+<h3 class="anchor anchorWithStickyNavbar_LWe7" id="columnar-stream">Columnar Stream<a href="#columnar-stream" class="hash-link" aria-label="Direct link to Columnar Stream" title="Direct link to Columnar Stream"></a></h3>
+<p><img decoding="async" loading="lazy" alt="FF Announcement" src="/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">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 anchorWithStickyNavbar_LWe7" id="real-time-updates-and-changelog">Real-Time Updates and Changelog<a href="#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"></a></h3>
+<p><img decoding="async" loading="lazy" alt="FF Announcement" src="/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 anchorWithStickyNavbar_LWe7" id="queryable">Queryable<a href="#queryable" class="hash-link" aria-label="Direct link to Queryable" title="Direct link to Queryable"></a></h3>
+<p><img decoding="async" loading="lazy" alt="FF Announcement" src="/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 anchorWithStickyNavbar_LWe7" id="unification-of-stream-and-lakehouse">Unification of Stream and Lakehouse<a href="#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"></a></h3>
+<p><img decoding="async" loading="lazy" alt="FF Announcement" src="/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 anchorWithStickyNavbar_LWe7" id="overall-architecture">Overall Architecture<a href="#overall-architecture" class="hash-link" aria-label="Direct link to Overall Architecture" title="Direct link to Overall Architecture"></a></h2>
+<p><img decoding="async" loading="lazy" alt="FF Announcement" src="/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 anchorWithStickyNavbar_LWe7" id="use-case-delta-join">Use Case: Delta Join<a href="#use-case-delta-join" class="hash-link" aria-label="Direct link to Use Case: Delta Join" title="Direct link to Use Case: Delta Join"></a></h2>
+<p><img decoding="async" loading="lazy" alt="FF Announcement" src="/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><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><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><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">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 anchorWithStickyNavbar_LWe7" id="future-plan">Future Plan<a href="#future-plan" class="hash-link" aria-label="Direct link to Future Plan" title="Direct link to Future Plan"></a></h2>
+<p><img decoding="async" loading="lazy" alt="FF Announcement" src="/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><strong>Apache Kafka Protocol Compatibility:</strong> This is aimed at helping existing streaming data migrate to Fluss more effectively.</li>
+<li><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><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 href="/roadmap/">Fluss Roadmap</a> for a comprehensive future planning.</p></div></article><nav class="pagination-nav docusaurus-mt-lg" aria-label="Blog post page navigation"><a class="pagination-nav__link pagination-nav__link--prev" href="/blog/unified-streaming-lakehouse/"><div class="pagination-nav__sublabel">Newer post</div><div class="pagination-nav__label">Towards A Unified Streaming & Lakehouse Ar [...]
+ Apache®, Apache Flink®, Flink®, Apache Kafka®, Kafka®, Spark® and associated open source project names and logos are trademarks of the Apache Software Foundation.</div></div></div></footer></div>
+</body>
+</html>
\ No newline at end of file
diff --git a/blog/fluss-open-source/index.html b/blog/fluss-open-source/index.html
new file mode 100644
index 0000000..c81b040
--- /dev/null
+++ b/blog/fluss-open-source/index.html
@@ -0,0 +1,56 @@
+<!doctype html>
+<html lang="en" dir="ltr" class="blog-wrapper blog-post-page plugin-blog plugin-id-default" data-has-hydrated="false">
+<head>
+<meta charset="UTF-8">
+<meta name="generator" content="Docusaurus v3.8.1">
+<title data-rh="true">Fluss is Now Open Source | Fluss</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/docusaurus-social-card.jpg"><meta data-rh="true" name="twitter:image" content="https://fluss.apache.org/img/docusaurus-social-card.jpg"><meta data-rh="true" property="og:url" content="https://fluss. [...]
+<link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Fluss Atom Feed">
+
+
+
+
+<link rel="search" type="application/opensearchdescription+xml" title="Fluss" href="/opensearch.xml">
+
+<link rel="icon" href="/img/logo.svg">
+<link rel="manifest" href="/manifest.json">
+<meta name="theme-color" content="#0071e3"><link rel="stylesheet" href="/assets/css/styles.3ca55d09.css">
+<script src="/assets/js/runtime~main.264c6f6f.js" defer="defer"></script>
+<script src="/assets/js/main.a06cb6b9.js" defer="defer"></script>
+</head>
+<body class="navigation-with-keyboard">
+<svg xmlns="http://www.w3.org/2000/svg" style="display: none;"><defs>
+<symbol id="theme-svg-external-link" viewBox="0 0 24 24"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"/></symbol>
+</defs></svg>
+<script>!function(){var t="light";var e=function(){try{return new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}}()||function(){try{return window.localStorage.getItem("theme")}catch(t){}}();document.documentElement.setAttribute("data-theme",e||t),document.documentElement.setAttribute("data-theme-choice",e||t)}(),function(){try{const c=new URLSearchParams(window.location.search).entries();for(var[t,e]of c)if(t.startsWith("docusaurus-data-")){var a=t.replace("do [...]
+Fluss is a <strong>streaming storage system</strong> designed to power real-time analytics. It aspires to change how organizations approach real-time data by acting as the <strong>real-time data layer</strong> for the Lakehouse.
+Its cutting-edge design enables businesses to achieve <strong>sub-second latency</strong>, <strong>high throughput</strong>, and <strong>cost efficiency</strong> for data analytics, making it the ideal solution for modern data-driven applications.</p>
+<p>We have historically invested a lot of effort into advancing the data streaming ecosystem, being major contributors to <a href="https://flink.apache.org/" target="_blank" rel="noopener noreferrer">Apache Flink®</a>, <a href="https://www.ververica.com/blog/ververica-donates-flink-cdc-empowering-real-time-data-integration-for-the-community" target="_blank" rel="noopener noreferrer">Apache Flink CDC</a>, and <a href="https://paimon.apache.org/" target="_blank" rel="noopener noreferrer">A [...]
+As part of our commitment, Fluss is now open source under the Apache 2.0 license and is available on <a href="https://github.com/alibaba/fluss" target="_blank" rel="noopener noreferrer">GitHub</a>, inviting users to create the next generation of real-time architectures.</p>
+<p><img decoding="async" loading="lazy" alt="FF Announcement" src="/assets/images/ff_os-2589690ef465b4d2c76c7861438ad18b.png" width="3840" height="1286" class="img_ev3q"></p>
+<h3 class="anchor anchorWithStickyNavbar_LWe7" id="real-time-streaming-storage-for-the-lakehouse-era">Real-Time Streaming Storage for the Lakehouse Era<a href="#real-time-streaming-storage-for-the-lakehouse-era" class="hash-link" aria-label="Direct link to Real-Time Streaming Storage for the Lakehouse Era" title="Direct link to Real-Time Streaming Storage for the Lakehouse Era"></a></h3>
+<p>The need for real-time insights has grown exponentially - especially with the recent explosion of AI. Still, the tools and architectures we’ve relied on for years weren’t designed with streaming-first analytical workflows in mind. Traditional architectures often involve complex integrations between message queues like Kafka, processing engines like Flink, and storage systems that are more batch-oriented than real-time. This approach not only increases latency but also adds operational [...]
+<p>At its core, Fluss combines the best of <strong>streaming</strong> and <strong>analytical storage</strong>. Its <strong>columnar stream</strong> design is optimized for real-time analytical queries, enabling lightning-fast data access and updates. With support for <strong>real-time data ingestion</strong> and integrations with <strong>real-time lakehouse solutions</strong> such as Paimon, Fluss ensures that data is always fresh and ready for analysis, making it ideal for applications [...]
+<p>A critical aspect of Fluss is also its deep integration with Apache FlinkⓇ the de facto gold standard for stream processing. This integration combines a <strong>stream processor</strong> and a <strong>real-time storage layer</strong>, eliminating the need for separate message queues like Kafka in analytics-focused architectures. Fluss simplifies pipelines, reduces costs, and improves performance for <strong>high-throughput</strong>, <strong>low-latency analytics</strong>.</p>
+<h3 class="anchor anchorWithStickyNavbar_LWe7" id="building-the-future-of-analytics-with-fluss">Building the Future of Analytics with Fluss<a href="#building-the-future-of-analytics-with-fluss" class="hash-link" aria-label="Direct link to Building the Future of Analytics with Fluss" title="Direct link to Building the Future of Analytics with Fluss"></a></h3>
+<p>Fluss is designed to support a wide range of use cases, from powering dashboards and monitoring systems to enabling <strong>streaming ETL</strong> and <strong>real-time intelligence pipelines</strong> for the modern AI era. Its ability to provide real-time updates makes it a natural fit for <strong>streaming data warehouses</strong>, where fresh data is essential for decision-making.</p>
+<p>By serving as the real-time data layer on the Lakehouse, Fluss supports both <strong>streaming-first</strong> architectures and <strong>unified batch and stream processing</strong>. This flexibility should be appealing for organizations looking to modernize their analytics stack while keeping costs low and performance high.</p>
+<h3 class="anchor anchorWithStickyNavbar_LWe7" id="whats-next-for-fluss">What’s Next for Fluss?<a href="#whats-next-for-fluss" class="hash-link" aria-label="Direct link to What’s Next for Fluss?" title="Direct link to What’s Next for Fluss?"></a></h3>
+<p>Open-sourcing Fluss is just the beginning and it will be donated to the Apache Software Foundation (ASF). We’re committed to working closely with the community to expand its capabilities and adoption. You can find more information about the project’s roadmap <a href="https://alibaba.github.io/fluss-docs/roadmap/" target="_blank" rel="noopener noreferrer">here</a>.</p>
+<p><img decoding="async" loading="lazy" alt="Banner" src="/assets/images/banner-5523bd3a3f5145b15e36c6bfb46796be.png" width="1998" height="1001" class="img_ev3q"></p>
+<h3 class="anchor anchorWithStickyNavbar_LWe7" id="join-the-journey">Join the Journey<a href="#join-the-journey" class="hash-link" aria-label="Direct link to Join the Journey" title="Direct link to Join the Journey"></a></h3>
+<p>We invite you to join us and help grow our community around the project. Explore Fluss, contribute to its development, and build the next generation of data pipelines.</p>
+<p>Make sure to keep an eye on the project, give it a try and if you like it, don’t forget to give it some ❤️ via ⭐ on <a href="https://github.com/alibaba/fluss" target="_blank" rel="noopener noreferrer">GitHub</a></p>
+<h3 class="anchor anchorWithStickyNavbar_LWe7" id="getting-started">Getting Started<a href="#getting-started" class="hash-link" aria-label="Direct link to Getting Started" title="Direct link to Getting Started"></a></h3>
+<ul>
+<li>Visit the <a href="https://github.com/alibaba/fluss" target="_blank" rel="noopener noreferrer">GitHub repository</a>.</li>
+<li>Check out the <a href="https://alibaba.github.io/fluss-docs/docs/quickstart/flink/" target="_blank" rel="noopener noreferrer">quickstart guide</a>.</li>
+</ul>
+<h3 class="anchor anchorWithStickyNavbar_LWe7" id="additional-resources">Additional Resources<a href="#additional-resources" class="hash-link" aria-label="Direct link to Additional Resources" title="Direct link to Additional Resources"></a></h3>
+<ul>
+<li>Announcement Blog Post: <a href="https://www.ververica.com/blog/introducing-fluss" target="_blank" rel="noopener noreferrer">Introducing Fluss: Unified Streaming Storage For Next-Generation Data Analytics</a></li>
+<li>Flink Forward Keynote Announcement: <a href="https://www.ververica.academy/courses/3d163483-5040-4d60-b5b3-755c3277edf7/activities/1af290fd-05bc-4fab-90be-6ed4628399be" target="_blank" rel="noopener noreferrer">The Future - Introducing Fluss</a></li>
+<li>Flink Forward Fluss Presentation: <a href="https://www.ververica.academy/courses/3d163483-5040-4d60-b5b3-755c3277edf7/activities/a366d118-6c53-47ef-91bb-289fc2462b07" target="_blank" rel="noopener noreferrer">Is Kafka the Best Storage for Streaming Analytics?</a></li>
+</ul></div></article><nav class="pagination-nav docusaurus-mt-lg" aria-label="Blog post page navigation"><a class="pagination-nav__link pagination-nav__link--prev" href="/blog/why-fluss/"><div class="pagination-nav__sublabel">Newer post</div><div class="pagination-nav__label">Why Fluss? Top 4 Challenges of Using Kafka for Real-Time Analytics</div></a></nav></main><div class="col col--2"><div class="tableOfContents_bqdL thin-scrollbar"><ul class="table-of-contents table-of-contents__left- [...]
+ Apache®, Apache Flink®, Flink®, Apache Kafka®, Kafka®, Spark® and associated open source project names and logos are trademarks of the Apache Software Foundation.</div></div></div></footer></div>
+</body>
+</html>
\ No newline at end of file
diff --git a/blog/index.html b/blog/index.html
new file mode 100644
index 0000000..49d852b
--- /dev/null
+++ b/blog/index.html
@@ -0,0 +1,60 @@
+<!doctype html>
+<html lang="en" dir="ltr" class="blog-wrapper blog-list-page plugin-blog plugin-id-default" data-has-hydrated="false">
+<head>
+<meta charset="UTF-8">
+<meta name="generator" content="Docusaurus v3.8.1">
+<title data-rh="true">Blog | Fluss</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/docusaurus-social-card.jpg"><meta data-rh="true" name="twitter:image" content="https://fluss.apache.org/img/docusaurus-social-card.jpg"><meta data-rh="true" property="og:url" content="https://fluss.apache.org/blog/"><m [...]
+<link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Fluss Atom Feed">
+
+
+
+
+<link rel="search" type="application/opensearchdescription+xml" title="Fluss" href="/opensearch.xml">
+
+<link rel="icon" href="/img/logo.svg">
+<link rel="manifest" href="/manifest.json">
+<meta name="theme-color" content="#0071e3"><link rel="stylesheet" href="/assets/css/styles.3ca55d09.css">
+<script src="/assets/js/runtime~main.264c6f6f.js" defer="defer"></script>
+<script src="/assets/js/main.a06cb6b9.js" defer="defer"></script>
+</head>
+<body class="navigation-with-keyboard">
+<svg xmlns="http://www.w3.org/2000/svg" style="display: none;"><defs>
+<symbol id="theme-svg-external-link" viewBox="0 0 24 24"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"/></symbol>
+</defs></svg>
+<script>!function(){var t="light";var e=function(){try{return new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}}()||function(){try{return window.localStorage.getItem("theme")}catch(t){}}();document.documentElement.setAttribute("data-theme",e||t),document.documentElement.setAttribute("data-theme-choice",e||t)}(),function(){try{const c=new URLSearchParams(window.location.search).entries();for(var[t,e]of c)if(t.startsWith("docusaurus-data-")){var a=t.replace("do [...]
+<p>🌊 We are excited to announce the official release of <strong>Fluss 0.7</strong>!</p>
+<p>This version has undergone extensive improvements in <strong>stability</strong>, <strong>architecture</strong>, <strong>performance optimization</strong>, and <strong>security</strong>, further enhancing its readiness for <strong>production environments</strong>. Over the past three months, we have completed more than <strong>250 commits</strong>, making this release a significant milestone toward becoming a mature, production-grade streaming storage platform.</p></div><footer class=" [...]
+<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:
+<em>user preferences</em>, <em>past purchases</em>, <em>clickstream behavior</em>, <em>cart activity</em>, <em>product reviews</em>, <em>support tickets</em>, <em>ad impressions</em>, and <em>loyalty status</em>.</p>
+<p>That’s at least <strong>8 different data sources</strong>, each producing updates independently.</p></div><footer class="row docusaurus-mt-lg"><div class="col text--right"><a aria-label="Read more about Understanding Partial Updates" href="/blog/partial-updates/"><b>Read more</b></a></div></footer></article><article class="margin-bottom--xl"><header><h2 class="title_f1Hy"><a href="/blog/unveil-fluss-logo/">The Story of Fluss Logo</a></h2><div class="container_mt6G margin-vert--md"><ti [...]
+<h2 class="anchor anchorWithStickyNavbar_LWe7" id="introducing-the-little-otter">Introducing the Little Otter<a href="#introducing-the-little-otter" class="hash-link" aria-label="Direct link to Introducing the Little Otter" title="Direct link to Introducing the Little Otter"></a></h2>
+<p>Today is <a href="https://www.otter.org/world-otter-day" target="_blank" rel="noopener noreferrer">World Otter Day</a>, and we are thrilled to introduce the little otter to the Fluss community! 🎉</p>
+<p>Since open-sourced half a year ago, many community members and friends have asked us:
+"When will Fluss get a logo?" After more than a month of careful design work and over 30 iterations, we’re excited to finally unveil the official Fluss logo — a surfing otter! 🦦🌊</p></div><footer class="row docusaurus-mt-lg"><div class="col text--right"><a aria-label="Read more about The Story of Fluss Logo" href="/blog/unveil-fluss-logo/"><b>Read more</b></a></div></footer></article><article class="margin-bottom--xl"><header><h2 class="title_f1Hy"><a href="/blog/releases/0.6/" [...]
+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></div><footer class="row docusaurus-mt-lg"><div class="col col--9"><b>Tags:</b><ul class="tags_jXut padding--none margin-left--sm"><li class="tag_QGVx"><a rel="tag" title="Content related release announcement." class="tag_zVej tagRegular_sFm0" href="/blog/tags/releases/">releases</a></li></ul></div><div class= [...]
+<p>Fluss is designed to address the demands of real-time analytics with the following key capabilities:</p>
+<ul>
+<li><strong>Real-Time Stream Reading and Writing:</strong> Supports millisecond-level end-to-end latency.</li>
+<li><strong>Columnar Stream:</strong> Optimizes storage and query efficiency.</li>
+<li><strong>Streaming Updates:</strong> Enables low-latency updates to data streams.</li>
+<li><strong>Changelog Generation:</strong> Supports changelog generation and consumption.</li>
+<li><strong>Real-Time Lookup Queries:</strong> Facilitates instant lookup queries on primary keys.</li>
+<li><strong>Streaming & Lakehouse Unification:</strong> Seamlessly integrates streaming and lakehouse storage for unified data processing.</li>
+</ul></div><footer class="row docusaurus-mt-lg"><div class="col text--right"><a aria-label="Read more about Towards A Unified Streaming & Lakehouse Architecture" href="/blog/unified-streaming-lakehouse/"><b>Read more</b></a></div></footer></article><article class="margin-bottom--xl"><header><h2 class="title_f1Hy"><a href="/blog/fluss-intro/">Introducing Fluss: Streaming Storage for Real-Time Analytics</a></h2><div class="container_mt6G margin-vert--md"><time datetime="2024-12-12T00:0 [...]
+Today, we are excited to introduce Fluss, a cutting-edge streaming storage system designed to power real-time analytics.
+We are going to explore Fluss's architecture, design principles, key features, and how it addresses the challenges of using Kafka for real-time analytics.</p></div><footer class="row docusaurus-mt-lg"><div class="col text--right"><a aria-label="Read more about Introducing Fluss: Streaming Storage for Real-Time Analytics" href="/blog/fluss-intro/"><b>Read more</b></a></div></footer></article><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_ [...]
+Fluss is a <strong>streaming storage system</strong> designed to power real-time analytics. It aspires to change how organizations approach real-time data by acting as the <strong>real-time data layer</strong> for the Lakehouse.
+Its cutting-edge design enables businesses to achieve <strong>sub-second latency</strong>, <strong>high throughput</strong>, and <strong>cost efficiency</strong> for data analytics, making it the ideal solution for modern data-driven applications.</p>
+<p>We have historically invested a lot of effort into advancing the data streaming ecosystem, being major contributors to <a href="https://flink.apache.org/" target="_blank" rel="noopener noreferrer">Apache Flink®</a>, <a href="https://www.ververica.com/blog/ververica-donates-flink-cdc-empowering-real-time-data-integration-for-the-community" target="_blank" rel="noopener noreferrer">Apache Flink CDC</a>, and <a href="https://paimon.apache.org/" target="_blank" rel="noopener noreferrer">A [...]
+As part of our commitment, Fluss is now open source under the Apache 2.0 license and is available on <a href="https://github.com/alibaba/fluss" target="_blank" rel="noopener noreferrer">GitHub</a>, inviting users to create the next generation of real-time architectures.</p>
+<p><img decoding="async" loading="lazy" alt="FF Announcement" src="/assets/images/ff_os-2589690ef465b4d2c76c7861438ad18b.png" width="3840" height="1286" class="img_ev3q"></p></div><footer class="row docusaurus-mt-lg"><div class="col text--right"><a aria-label="Read more about Fluss is Now Open Source" href="/blog/fluss-open-source/"><b>Read more</b></a></div></footer></article><nav class="pagination-nav" aria-label="Blog list page navigation"></nav></main></div></div></div><footer class= [...]
+ Apache®, Apache Flink®, Flink®, Apache Kafka®, Kafka®, Spark® and associated open source project names and logos are trademarks of the Apache Software Foundation.</div></div></div></footer></div>
+</body>
+</html>
\ No newline at end of file
diff --git a/blog/partial-updates/index.html b/blog/partial-updates/index.html
new file mode 100644
index 0000000..7b58bf5
--- /dev/null
+++ b/blog/partial-updates/index.html
@@ -0,0 +1,111 @@
+<!doctype html>
+<html lang="en" dir="ltr" class="blog-wrapper blog-post-page plugin-blog plugin-id-default" data-has-hydrated="false">
+<head>
+<meta charset="UTF-8">
+<meta name="generator" content="Docusaurus v3.8.1">
+<title data-rh="true">Understanding Partial Updates | Fluss</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/docusaurus-social-card.jpg"><meta data-rh="true" name="twitter:image" content="https://fluss.apache.org/img/docusaurus-social-card.jpg"><meta data-rh="true" property="og:url" content="https://f [...]
+<link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Fluss Atom Feed">
+
+
+
+
+<link rel="search" type="application/opensearchdescription+xml" title="Fluss" href="/opensearch.xml">
+
+<link rel="icon" href="/img/logo.svg">
+<link rel="manifest" href="/manifest.json">
+<meta name="theme-color" content="#0071e3"><link rel="stylesheet" href="/assets/css/styles.3ca55d09.css">
+<script src="/assets/js/runtime~main.264c6f6f.js" defer="defer"></script>
+<script src="/assets/js/main.a06cb6b9.js" defer="defer"></script>
+</head>
+<body class="navigation-with-keyboard">
+<svg xmlns="http://www.w3.org/2000/svg" style="display: none;"><defs>
+<symbol id="theme-svg-external-link" viewBox="0 0 24 24"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"/></symbol>
+</defs></svg>
+<script>!function(){var t="light";var e=function(){try{return new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}}()||function(){try{return window.localStorage.getItem("theme")}catch(t){}}();document.documentElement.setAttribute("data-theme",e||t),document.documentElement.setAttribute("data-theme-choice",e||t)}(),function(){try{const c=new URLSearchParams(window.location.search).entries();for(var[t,e]of c)if(t.startsWith("docusaurus-data-")){var a=t.replace("do [...]
+<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:
+<em>user preferences</em>, <em>past purchases</em>, <em>clickstream behavior</em>, <em>cart activity</em>, <em>product reviews</em>, <em>support tickets</em>, <em>ad impressions</em>, and <em>loyalty status</em>.</p>
+<p>That’s at least <strong>8 different data sources</strong>, each producing updates independently.</p>
+<p>Joining multiple data streams at scale, although it works with Apache Flink it can be really challenging and resource-intensive.
+More specifically, it can lead to:</p>
+<ul>
+<li><strong>Really large state sizes in Flink:</strong> as it needs to buffer all incoming events until they can be joined. In many case states need to be kept around for a long period of time if not indefinitely.</li>
+<li><strong>Deal with checkpoints overhead and backpressure:</strong> as the join operation and large state uploading can create a bottleneck in the pipeline.</li>
+<li><strong>States are not easy to inspect and debug:</strong> as they are often large and complex. This can make it difficult to understand what is happening in the pipeline and why certain events are not being processed correctly.</li>
+<li><strong>State TTL can lead to inconsistent results:</strong> as events may be dropped before they can be joined. This can lead to data loss and incorrect results in the final output.</li>
+</ul>
+<p>Overall, this approach not only consumes a lot of memory and CPU, but also complicates the job design and maintenance.</p>
+<p><img decoding="async" loading="lazy" alt="Streaming Joins" src="/assets/images/streaming_join-761699227c5633f3575e2036b9e2ac61.png" width="1375" height="550" class="img_ev3q"></p>
+<h3 class="anchor anchorWithStickyNavbar_LWe7" id="partial-updates-a-different-approach-with-fluss">Partial Updates: A Different Approach with Fluss<a href="#partial-updates-a-different-approach-with-fluss" class="hash-link" aria-label="Direct link to Partial Updates: A Different Approach with Fluss" title="Direct link to Partial Updates: A Different Approach with Fluss"></a></h3>
+<p>Fluss introduces a more elegant solution: <strong>partial updates</strong> on a primary key table.</p>
+<p>Instead of performing multi-way joins in the streaming job, Fluss allows each data stream source to independently update only its relevant columns into a shared wide table identified by the primary key.
+In Fluss, you can define a wide table (for example, a user_profile table based on a <code>user_id</code>) that contains all possible fields from all sources.
+Each source stream then writes partial rows – only the fields it knows about – into this table.</p>
+<p><img decoding="async" loading="lazy" alt="Partial Update" src="/assets/images/partial_update-d529bf24211a76b31444bc7918872d59.png" width="1488" height="669" class="img_ev3q"></p>
+<p>Fluss’s storage engine automatically merges these partial updates together based on the primary key.
+Essentially, Fluss maintains the latest combined value for each key, so you don’t have to manage large join states in Flink.</p>
+<p>Under the hood, when a new partial update for a key arrives, Fluss will look up the existing record for that primary key, update the specific columns provided, and leave other columns unchanged.
+The result is written back as the new version of the record.
+This happens in <em>real-time</em>, so the table is <strong>always up-to-date</strong> with the latest information from all streams.</p>
+<p>Next, let's try and better understand how this works in practice with a concrete example.</p>
+<h3 class="anchor anchorWithStickyNavbar_LWe7" id="example-building-a-unified-wide-table">Example: Building a Unified Wide Table<a href="#example-building-a-unified-wide-table" class="hash-link" aria-label="Direct link to Example: Building a Unified Wide Table" title="Direct link to Example: Building a Unified Wide Table"></a></h3>
+<blockquote>
+<p>You can find the full source code on github <a href="https://github.com/ververica/ververica-fluss-examples/tree/main/partial_updates" target="_blank" rel="noopener noreferrer">here</a>.</p>
+</blockquote>
+<p>Start by cloning the repository, run <code>docker compose up</code> to spin up the development enviroment and finally grab a terminal
+into the <code>jobmanager</code> and start the Flink SQL cli, by running the following command:</p>
+<div class="language-shell codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#9CDCFE;--prism-background-color:#1E1E1E"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-shell codeBlock_bY9V thin-scrollbar" style="color:#9CDCFE;background-color:#1E1E1E"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#9CDCFE"><span class="token plain">./bin/sql-client.sh</span><br></span></code></pre></div></div>
+<p>Great so far ! 👍</p>
+<p><strong>Step 1:</strong> The first thing we need to do is to create a Flink catalog that will be used to store the tables we are going to create.
+Let's create a catalog called <code>fluss_catalog</code> and use this catalog.</p>
+<div class="language-sql codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#9CDCFE;--prism-background-color:#1E1E1E"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-sql codeBlock_bY9V thin-scrollbar" style="color:#9CDCFE;background-color:#1E1E1E"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#9CDCFE"><span class="token keyword" style="color:rgb(86, 156, 214)">CREATE</span><span class="token plain"> CATALOG fluss_catal [...]
+<p><strong>Step 2:</strong> Then let's create <code>3 tables</code> to represent the different data sources that will be used to build the recommendations wide table.</p>
+<div class="language-sql codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#9CDCFE;--prism-background-color:#1E1E1E"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-sql codeBlock_bY9V thin-scrollbar" style="color:#9CDCFE;background-color:#1E1E1E"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#9CDCFE"><span class="token comment" style="color:rgb(106, 153, 85)">-- Recommendations – model scores</span><span class="token [...]
+<p><strong>Step 3:</strong> Of course, we will need some sample data to work with , so let's go on and insert some records into the tables. 💻</p>
+<div class="language-sql codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#9CDCFE;--prism-background-color:#1E1E1E"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-sql codeBlock_bY9V thin-scrollbar" style="color:#9CDCFE;background-color:#1E1E1E"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#9CDCFE"><span class="token comment" style="color:rgb(106, 153, 85)">-- Recommendations – model scores</span><span class="token [...]
+<div class="language-sql codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#9CDCFE;--prism-background-color:#1E1E1E"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-sql codeBlock_bY9V thin-scrollbar" style="color:#9CDCFE;background-color:#1E1E1E"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#9CDCFE"><span class="token comment" style="color:rgb(106, 153, 85)">-- Impressions – how often each (user,item) was shown</span [...]
+<div class="language-sql codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#9CDCFE;--prism-background-color:#1E1E1E"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-sql codeBlock_bY9V thin-scrollbar" style="color:#9CDCFE;background-color:#1E1E1E"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#9CDCFE"><span class="token comment" style="color:rgb(106, 153, 85)">-- Clicks – user engagement</span><span class="token plain" [...]
+<blockquote>
+<p><strong>Note:</strong> 🚨 So far the jobs we run were bounded jobs, so they will finish after inserting the records. Moving forward we will run some streaming jobs.
+So keep in mind that each job runs with a <code>parallelism of 3</code> and our environment is set up <code>with 10 slots total</code>.
+So make sure to keep an eye to the Flink Web UI to see how many slots are used and how many are available and stop some jobs when are no longer needed to free up resourecs.</p>
+</blockquote>
+<p><strong>Step 4:</strong> At this point let's open up a separate terminal and start the Flink SQL CLI.
+In this new terminal, make sure to run set the <code>result-mode</code>:</p>
+<div class="language-shell codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#9CDCFE;--prism-background-color:#1E1E1E"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-shell codeBlock_bY9V thin-scrollbar" style="color:#9CDCFE;background-color:#1E1E1E"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#9CDCFE"><span class="token plain">SET </span><span class="token string" style="color:rgb(206, 145, 120)">'sql-client.e [...]
+<p>and then run:</p>
+<div class="language-sql codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#9CDCFE;--prism-background-color:#1E1E1E"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-sql codeBlock_bY9V thin-scrollbar" style="color:#9CDCFE;background-color:#1E1E1E"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#9CDCFE"><span class="token keyword" style="color:rgb(86, 156, 214)">SELECT</span><span class="token plain"> </span><span class= [...]
+<p>to observe the output of the table, as we insert <code>partially</code> records into the it from the different sources.</p>
+<p><strong>Step 5:</strong> Let's insert the records from the <code>recommendations</code> table into the <code>user_rec_wide</code> table.</p>
+<div class="language-sql codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#9CDCFE;--prism-background-color:#1E1E1E"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-sql codeBlock_bY9V thin-scrollbar" style="color:#9CDCFE;background-color:#1E1E1E"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#9CDCFE"><span class="token comment" style="color:rgb(106, 153, 85)">-- Apply recommendation scores</span><span class="token pla [...]
+<p><strong>Output:</strong> Notice, how only the related columns are updated in the <code>user_rec_wide</code> table and the rest of the columns are <code>NULL</code>.</p>
+<div class="language-shell codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#9CDCFE;--prism-background-color:#1E1E1E"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-shell codeBlock_bY9V thin-scrollbar" style="color:#9CDCFE;background-color:#1E1E1E"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#9CDCFE"><span class="token plain">Flink SQL</span><span class="token operator" style="color:rgb(212, 212, 212)">></span> [...]
+<p><strong>Step 5:</strong> Next, let's insert the records from the <code>impressions</code> table into the <code>user_rec_wide</code> table.</p>
+<div class="language-sql codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#9CDCFE;--prism-background-color:#1E1E1E"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-sql codeBlock_bY9V thin-scrollbar" style="color:#9CDCFE;background-color:#1E1E1E"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#9CDCFE"><span class="token comment" style="color:rgb(106, 153, 85)">-- Apply impression counts</span><span class="token plain"> [...]
+<p><strong>Output:</strong> Notice how the <code>impressions</code> records are inserted into the <code>user_rec_wide</code> table and the <code>imp_cnt</code> column is updated.</p>
+<div class="language-shell codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#9CDCFE;--prism-background-color:#1E1E1E"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-shell codeBlock_bY9V thin-scrollbar" style="color:#9CDCFE;background-color:#1E1E1E"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#9CDCFE"><span class="token plain">Flink SQL</span><span class="token operator" style="color:rgb(212, 212, 212)">></span> [...]
+<p><strong>Step 6:</strong> Finally, let's insert the records from the <code>clicks</code> table into the <code>user_rec_wide</code> table.</p>
+<div class="language-sql codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#9CDCFE;--prism-background-color:#1E1E1E"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-sql codeBlock_bY9V thin-scrollbar" style="color:#9CDCFE;background-color:#1E1E1E"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#9CDCFE"><span class="token comment" style="color:rgb(106, 153, 85)">-- Apply click counts</span><span class="token plain"></spa [...]
+<p><strong>Output:</strong> Notice how the <code>clicks</code> records are inserted into the <code>user_rec_wide</code> table and the <code>click_cnt</code> column is updated.</p>
+<div class="language-shell codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#9CDCFE;--prism-background-color:#1E1E1E"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-shell codeBlock_bY9V thin-scrollbar" style="color:#9CDCFE;background-color:#1E1E1E"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#9CDCFE"><span class="token plain">Flink SQL</span><span class="token operator" style="color:rgb(212, 212, 212)">></span> [...]
+<p><strong>Reminder:</strong> ‼️As mentioned before make sure to stop the jobs that are no longer needed to free up resources.</p>
+<p>Now let's switch to <code>batch</code> mode and query the current snapshot of the <code>user_rec_wide</code> table.</p>
+<p>But before that, let's start the <a href="https://alibaba.github.io/fluss-docs/docs/maintenance/tiered-storage/lakehouse-storage/#start-the-datalake-tiering-service" target="_blank" rel="noopener noreferrer">Tiering Service</a> that allows offloading the tables as <code>Lakehouse</code> tables.</p>
+<p><strong>Step 7:</strong> Open a new terminal 💻 in the <code>Coordinator Server</code> and run the following command to start the <code>Tiering Service</code>:</p>
+<div class="language-shell codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#9CDCFE;--prism-background-color:#1E1E1E"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-shell codeBlock_bY9V thin-scrollbar" style="color:#9CDCFE;background-color:#1E1E1E"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#9CDCFE"><span class="token plain">./bin/lakehouse.sh </span><span class="token parameter variable" style="color:rgb(156, 22 [...]
+<p>The configured checkpoint is <code>flink.execution.checkpointing.interval=30s</code> so wait a bit until the first checkpoint is created
+and data gets offloading to the <code>Lakehouse</code> tables.</p>
+<p><strong>Step 8:</strong> Finally let's switch to <code>batch</code> mode and query the current snapshot of the <code>user_rec_wide</code> table.</p>
+<div class="language-shell codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#9CDCFE;--prism-background-color:#1E1E1E"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-shell codeBlock_bY9V thin-scrollbar" style="color:#9CDCFE;background-color:#1E1E1E"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#9CDCFE"><span class="token plain">SET </span><span class="token string" style="color:rgb(206, 145, 120)">'execution.ru [...]
+<p>🎉 That's it! You have successfully created a unified wide table using partial updates in Fluss.</p>
+<h3 class="anchor anchorWithStickyNavbar_LWe7" id="conclusion">Conclusion<a href="#conclusion" class="hash-link" aria-label="Direct link to Conclusion" title="Direct link to Conclusion"></a></h3>
+<p>Partial updates in Fluss enable an alternative approach in how we design streaming data pipelines for enriching or joining data.</p>
+<p>When all your sources share a primary key - otherwise you can mix & match <a href="https://alibaba.github.io/fluss-docs/docs/engine-flink/lookups/#lookup" target="_blank" rel="noopener noreferrer">streaming lookup joins</a> - you can turn the problem on its head: update a unified table incrementally, rather than joining streams on the fly.</p>
+<p>The result is a more scalable, maintainable, and efficient pipeline.
+Engineers can spend less time wrestling with Flink’s state, checkpoints and join mechanics, and more time delivering fresh, integrated data to power real-time analytics and applications.
+With Fluss handling the merge logic, achieving a single, up-to-date view from multiple disparate streams becomes way more elegant. 😁</p>
+<p>And before you go 😊 don’t forget to give Fluss 🌊 some ❤️ via ⭐ on <a href="https://github.com/alibaba/fluss" target="_blank" rel="noopener noreferrer">GitHub</a></p></div></article><nav class="pagination-nav docusaurus-mt-lg" aria-label="Blog post page navigation"><a class="pagination-nav__link pagination-nav__link--prev" href="/blog/releases/0.7/"><div class="pagination-nav__sublabel">Newer post</div><div class="pagination-nav__label">Announcing Fluss 0.7</div></a><a class="paginatio [...]
+ Apache®, Apache Flink®, Flink®, Apache Kafka®, Kafka®, Spark® and associated open source project names and logos are trademarks of the Apache Software Foundation.</div></div></div></footer></div>
+</body>
+</html>
\ No newline at end of file
diff --git a/blog/releases/0.6/index.html b/blog/releases/0.6/index.html
new file mode 100644
index 0000000..d350c15
--- /dev/null
+++ b/blog/releases/0.6/index.html
@@ -0,0 +1,150 @@
+<!doctype html>
+<html lang="en" dir="ltr" class="blog-wrapper blog-post-page plugin-blog plugin-id-default" data-has-hydrated="false">
+<head>
+<meta charset="UTF-8">
+<meta name="generator" content="Docusaurus v3.8.1">
+<title data-rh="true">Announcing Fluss 0.6 | Fluss</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/docusaurus-social-card.jpg"><meta data-rh="true" name="twitter:image" content="https://fluss.apache.org/img/docusaurus-social-card.jpg"><meta data-rh="true" property="og:url" content="https://fluss.apac [...]
+<link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Fluss Atom Feed">
+
+
+
+
+<link rel="search" type="application/opensearchdescription+xml" title="Fluss" href="/opensearch.xml">
+
+<link rel="icon" href="/img/logo.svg">
+<link rel="manifest" href="/manifest.json">
+<meta name="theme-color" content="#0071e3"><link rel="stylesheet" href="/assets/css/styles.3ca55d09.css">
+<script src="/assets/js/runtime~main.264c6f6f.js" defer="defer"></script>
+<script src="/assets/js/main.a06cb6b9.js" defer="defer"></script>
+</head>
+<body class="navigation-with-keyboard">
+<svg xmlns="http://www.w3.org/2000/svg" style="display: none;"><defs>
+<symbol id="theme-svg-external-link" viewBox="0 0 24 24"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"/></symbol>
+</defs></svg>
+<script>!function(){var t="light";var e=function(){try{return new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}}()||function(){try{return window.localStorage.getItem("theme")}catch(t){}}();document.documentElement.setAttribute("data-theme",e||t),document.documentElement.setAttribute("data-theme-choice",e||t)}(),function(){try{const c=new URLSearchParams(window.location.search).entries();for(var[t,e]of c)if(t.startsWith("docusaurus-data-")){var a=t.replace("do [...]
+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>
+<p>This release introduces several exciting features:</p>
+<ul>
+<li><strong>Column Compression</strong>: Reduces storage space by up to <strong>6x</strong> while preserving column pruning performance!</li>
+<li><strong>Merge Engine</strong>: Introduces flexible merge strategies for primary key data, addressing diverse real-time processing needs.</li>
+<li><strong>Prefix Lookup</strong>: Delta Join functionality is now ready on the Fluss side!</li>
+</ul>
+<p>These new features not only significantly enhance the functionality of Fluss but also represent a solid step
+forward in our journey toward building the next-generation analytical stream storage solution.</p>
+<h2 class="anchor anchorWithStickyNavbar_LWe7" id="column-compression">Column Compression<a href="#column-compression" class="hash-link" aria-label="Direct link to Column Compression" title="Direct link to Column Compression"></a></h2>
+<p>Fluss uses the <a href="https://arrow.apache.org/" target="_blank" rel="noopener noreferrer">Apache Arrow</a> columnar format for it's underlying log file storage, fully leveraging Arrow's streaming
+columnar capabilities to achieve highly efficient streaming reads and column pruning. Column pruning in Fluss is performed on the server side,
+with end-to-end zero-copy optimization that allows the required column data to be sent directly to the network without
+loading it into memory from disk. This design not only significantly improves performance but also drastically reduces
+network I/O costs and resource overhead. In previous <a href="/blog/fluss-intro/#columnar-stream">benchmark tests</a>,
+when 90% of the columns were pruned, Fluss achieved a 10x increase in read throughput, demonstrating its exceptional
+performance in streaming data processing and transmission.</p>
+<p>While column pruning effectively reduces network I/O costs, disk storage costs remain high. To address this,
+we have introduced <strong>column compression</strong> in this version, supporting two highly efficient compression algorithms: <strong>ZSTD</strong> and <strong>LZ4</strong>.
+These algorithms significantly reduce data storage requirements, thereby lowering storage costs substantially.
+Since both compression and decompression are performed on the client side, the amount of data transmitted over the network is reduced,
+further decreasing network I/O costs. Notably, compression is applied independently to each column, ensuring that the original column pruning performance is preserved and that streaming read efficiency remains unaffected.</p>
+<p>To validate the actual effectiveness of this feature, we conducted benchmark tests using a typical business scenario from Alibaba Taobao.
+In the tests, we used datasets of the same scale and Flink jobs with identical resources, writing to Fluss with and without ZSTD compression,
+and compared the write throughput. Subsequently, we read data from the table and tested the read throughput.
+The results showed that column compression not only reduced storage space by approximately 6x but also improved read and write throughput.</p>
+<p><img decoding="async" loading="lazy" alt="Compression Benchmark" src="/assets/images/compression1-0b666a1467321b28376db725380eda3c.jpg" width="962" height="572" class="img_ev3q"></p>
+<p>However, enabling compression had no noticeable impact on Flink's read/write CPU and memory usage.</p>
+<p><img decoding="async" loading="lazy" alt="Compression Benchmark" src="/assets/images/compression2-c0feecf4a8fbff819c1ad37ce03ca6e9.jpg" width="1180" height="542" class="img_ev3q"></p>
+<p>The performance of column pruning on compressed data was also tested. The results show that as the number of pruned columns increases,
+a multiple-fold performance improvement is still achieved, maintaining the original column pruning efficiency.</p>
+<p><img decoding="async" loading="lazy" alt="Compression Benchmark" src="/assets/images/compression3-1f5de9eec6dd66394a793f26395a8f49.jpg" width="1196" height="624" class="img_ev3q"></p>
+<p>Given the significant cost savings and performance improvements achieved by column compression in general use cases,
+ZSTD compression is enabled by default for log tables in Fluss 0.6. Users can disable compression by
+setting the parameter <code>'table.log.arrow.compression.type'='NONE'</code> on the table.</p>
+<h2 class="anchor anchorWithStickyNavbar_LWe7" id="merge-engine">Merge Engine<a href="#merge-engine" class="hash-link" aria-label="Direct link to Merge Engine" title="Direct link to Merge Engine"></a></h2>
+<p>In this version, Fluss introduces a new Merge Engine feature for primary key tables to flexibly support merging strategies for data with the same primary key.
+The default Merge Engine strategy for primary key tables is to retain the latest record for each primary key.
+Users can also choose alternative Merge Engines, including the currently supported <strong>FirstRow Merge Engine</strong> and <strong>Versioned Merge Engine</strong>.
+Support for the <strong>Aggregate Merge Engine</strong> is planned for future releases.</p>
+<h3 class="anchor anchorWithStickyNavbar_LWe7" id="firstrow-merge-engine">FirstRow Merge Engine<a href="#firstrow-merge-engine" class="hash-link" aria-label="Direct link to FirstRow Merge Engine" title="Direct link to FirstRow Merge Engine"></a></h3>
+<p>By setting the table property <code>'table.merge-engine' = 'first_row'</code>, users can retain the first record for each primary key.
+When this configuration is enabled, the primary key table will generate an append-only changelog. This allows downstream
+Flink jobs subscribing to the table to receive an append-only stream, enabling the use of operators that do not support retraction messages,
+such as Window Aggregations and Interval Joins. This feature is commonly used as a replacement for log deduplication in streaming processing,
+effectively reducing costs and system complexity.</p>
+<div class="language-sql codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#9CDCFE;--prism-background-color:#1E1E1E"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-sql codeBlock_bY9V thin-scrollbar" style="color:#9CDCFE;background-color:#1E1E1E"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#9CDCFE"><span class="token comment" style="color:rgb(106, 153, 85)">-- create first_row primary key table</span><span class="to [...]
+<h3 class="anchor anchorWithStickyNavbar_LWe7" id="versioned-merge-engine">Versioned Merge Engine<a href="#versioned-merge-engine" class="hash-link" aria-label="Direct link to Versioned Merge Engine" title="Direct link to Versioned Merge Engine"></a></h3>
+<p>The Versioned Merge Engine supports data updates based on version numbers (or event timestamps). It ensures that only the record
+with the highest version number (or event timestamp) for each primary key is retained. This mechanism is particularly useful for
+deduplicating or merging out-of-order data while guaranteeing eventual consistency with the upstream data source.
+In Flink streaming processing, this feature can be used as a replacement for <code>Rank</code> or <code>Deduplication</code> operations, simplifying workflows and reducing costs effectively.</p>
+<div class="language-sql codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#9CDCFE;--prism-background-color:#1E1E1E"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-sql codeBlock_bY9V thin-scrollbar" style="color:#9CDCFE;background-color:#1E1E1E"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#9CDCFE"><span class="token comment" style="color:rgb(106, 153, 85)">-- create a versioned primary key table, `ts` as the versio [...]
+<h2 class="anchor anchorWithStickyNavbar_LWe7" id="prefix-lookup-for-delta-join">Prefix Lookup for Delta Join<a href="#prefix-lookup-for-delta-join" class="hash-link" aria-label="Direct link to Prefix Lookup for Delta Join" title="Direct link to Prefix Lookup for Delta Join"></a></h2>
+<p>In the scenario of building wide tables with Flink, optimizing Stream-Stream Join using Delta Join is one of the primary use cases for Fluss.
+We have also contributed this functionality to version 0.6. Delta Join can be simply understood as 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 join 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).
+Delta Join addresses challenges such as high cost, unstable job, checkpoint timeout, slow restart recovery, etc., in the traditional Stream-Stream Join.</p>
+<p><img decoding="async" loading="lazy" alt="Delta Join" src="/assets/images/delta-join-ad3cf73fc7f3f01e306ad02fd765d26d.jpg" width="2024" height="884" class="img_ev3q"></p>
+<p>Overall, Delta Join relies on three core functionalities:</p>
+<ul>
+<li><strong>CDC Stream Read for Source Table</strong>: The foundational capability of Fluss.</li>
+<li><strong>Lookup on Join Keys for Source Table</strong>: Introduced in Fluss 0.6 with Prefix Lookup support.</li>
+<li><strong>Delta Join Operator in Flink SQL</strong>: Proposed in <a href="https://cwiki.apache.org/confluence/display/FLINK/FLIP-486%3A+Introduce+A+New+DeltaJoin" target="_blank" rel="noopener noreferrer">FLIP-486</a>, planned for Flink 2.1.</li>
+</ul>
+<p>Once FLIP-486 is completed, users will be able to achieve Delta Join using the following SQL in conjunction with Fluss's Prefix Lookup functionality:</p>
+<div class="language-sql codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#9CDCFE;--prism-background-color:#1E1E1E"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-sql codeBlock_bY9V thin-scrollbar" style="color:#9CDCFE;background-color:#1E1E1E"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#9CDCFE"><span class="token keyword" style="color:rgb(86, 156, 214)">CREATE</span><span class="token plain"> </span><span class= [...]
+<p>Flink performs lookups on Fluss tables using the Join Key, which serves as the Bucket Key for the Fluss table.
+This allows it to leverage the prefix index of the primary key in the Fluss table, enabling highly efficient lookup queries.
+This feature in Fluss is referred to as Prefix Lookup. Currently, Prefix Lookup can also be used to perform one-to-many lookup queries.
+For more details, please refer to the <a href="/docs/engine-flink/lookups/#prefix-lookup">Prefix Lookup</a> documentation.</p>
+<h2 class="anchor anchorWithStickyNavbar_LWe7" id="stability--performance-improvements">Stability & Performance Improvements<a href="#stability--performance-improvements" class="hash-link" aria-label="Direct link to Stability & Performance Improvements" title="Direct link to Stability & Performance Improvements"></a></h2>
+<p>In this version, we have focused on enhancing the stability and performance of the system, resolving over 50 issues and improvements,
+and conducting in-depth optimizations on core modules. For example:</p>
+<ul>
+<li>Server-side Optimization : By introducing a delayed response mechanism, CPU consumption in low-traffic scenarios has been significantly reduced, thereby improving resource utilization efficiency.</li>
+<li>Client-side Optimization : A unified memory management mechanism has been implemented to effectively prevent Out-of-Memory (OOM) issues in high-traffic scenarios while reducing the impact of garbage collection (GC) on system performance.</li>
+</ul>
+<p>These improvements have significantly enhanced Fluss's reliability and performance in high-concurrency, large-data-volume scenarios, enabling it to handle analytical stream storage workload more efficiently.</p>
+<h2 class="anchor anchorWithStickyNavbar_LWe7" id="lakehouse-storage">Lakehouse Storage<a href="#lakehouse-storage" class="hash-link" aria-label="Direct link to Lakehouse Storage" title="Direct link to Lakehouse Storage"></a></h2>
+<p>In previous versions, if a table in Fluss needed to enable the Lakehouse storage capability, it had to be enabled when table is created.
+Otherwise, enabling this feature later would require deleting and recreating the table. This limitation arose because enabling Lakehouse storage changes the key encoding format and bucket sharding strategy, making existing tables incompatible with the new configuration.</p>
+<p>In this version, we resolve this by detecting the cluster's default data lake format and adopting its key encoding and bucketing strategy,
+allowing Lakehouse storage to be enabled dynamically after table creation. This eliminates the need for table recreation, improving usability.
+Additionally, Paimon dependency is upgraded to version 1.0.1 in this release.</p>
+<h2 class="anchor anchorWithStickyNavbar_LWe7" id="flink-integration">Flink Integration<a href="#flink-integration" class="hash-link" aria-label="Direct link to Flink Integration" title="Direct link to Flink Integration"></a></h2>
+<p>This version introduces the following enhancements to the Flink connector:</p>
+<ol>
+<li><strong>Sink Support for Ignoring Retractions:</strong>
+Both Primary Key Tables and Log Tables now support the <code>'sink.ignore-delete'</code> parameter in their Sink implementations. This enables better compatibility with scenarios involving retraction messages, meeting the demands of more complex streaming data processing.</li>
+<li><strong>Enhanced Partition Table Operations:</strong>
+Partitioned tables now support <code>ALTER TABLE ADD/DROP PARTITION</code> and <code>SHOW PARTITIONS</code> operations, further improving the flexibility and usability of partition management.</li>
+<li><strong>Sink Interface Upgrade:</strong>
+The <code>SinkFunction</code> has been upgraded to the <code>SinkV2</code> interface, laying the groundwork for full compatibility with Flink 2.0 in the next version. This ensures the system's scalability and compatibility in future releases.</li>
+</ol>
+<h2 class="anchor anchorWithStickyNavbar_LWe7" id="upgrade-notes">Upgrade Notes<a href="#upgrade-notes" class="hash-link" aria-label="Direct link to Upgrade Notes" title="Direct link to Upgrade Notes"></a></h2>
+<p>The Fluss community try to ensure compatibility during upgrades. However, upgrading from Fluss 0.5 to 0.6 is an incompatible upgrade.
+Starting with version 0.6, we will officially provide backward compatibility to ensure smoother and more reliable upgrades in future releases.
+Therefore, version 0.6 is the recommended version for adoption and ecosystem integration.</p>
+<h2 class="anchor anchorWithStickyNavbar_LWe7" id="future-plan">Future Plan<a href="#future-plan" class="hash-link" aria-label="Direct link to Future Plan" title="Direct link to Future Plan"></a></h2>
+<p>In the next version, we will focus on the development of the following core features:</p>
+<ol>
+<li>
+<p><strong>New Lake-Stream Integrated Architecture:</strong>
+A completely new architecture designed for large-scale production environments, featuring plug-in support for mainstream lake formats such as Iceberg and Hudi. This addresses key pain points in Tiering Service performance, scalability, and operational efficiency, providing a more reliable Lakehouse integrated solution for enterprise use cases.</p>
+</li>
+<li>
+<p><strong>Authentication and Authorization:</strong>
+Introducing plugin-based authentication and fine-grained access control to meet the stringent data security requirements of enterprises.</p>
+</li>
+<li>
+<p><strong>Kafka Compatibility:</strong>
+Compatibility with the Kafka network protocol, enabling seamless integration with the Kafka ecosystem.</p>
+</li>
+</ol>
+<p>For more details about the next release roadmap, please visit the community <a href="https://github.com/alibaba/fluss/discussions/556" target="_blank" rel="noopener noreferrer">discussion page</a>. Your suggestions and contributions are highly welcomed!</p>
+<p>Fluss is under active development. Be sure to stay updated on the project, give it a try and if you like it, don’t forget to give it some ❤️ via ⭐ on <a href="https://github.com/alibaba/fluss" target="_blank" rel="noopener noreferrer">GitHub</a></p>
+<h2 class="anchor anchorWithStickyNavbar_LWe7" 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"></a></h2>
+<p>The Fluss community would like to express gratitude to all the 45 contributors who made this release possible:</p>
+<p>Benchao Li, ForwardXu, Gang Yang, Georgios Andrianakis, Giannis Polyzos, Hongshun Wang, Jark Wu, Kerwin, Leonard Xu, LiJingwei, Liu Xiao, MehulBatra, Michael Koepf, Nicholas Jiang, Ron, RunningDB, Sagar Sumit, SeungMin, Shuo Cheng, Stan, SteNicholas, Tyrantlucifer, Vipamp, WangS-C, WenjunMin, Wenston Xin, Xiaojian Sun, Yang Guo, Yubin Li, Yuepeng Pan, Zmm, benjobs, gongzhongqiang, gyang94, jon-qj, luoyuxia, moses, psxjoy, wangwj, wudi, xiaozhou, yunhong, yuxia Luo, 码界探索, 道君</p></div>< [...]
+ Apache®, Apache Flink®, Flink®, Apache Kafka®, Kafka®, Spark® and associated open source project names and logos are trademarks of the Apache Software Foundation.</div></div></div></footer></div>
+</body>
+</html>
\ No newline at end of file
diff --git a/blog/releases/0.7/index.html b/blog/releases/0.7/index.html
new file mode 100644
index 0000000..6ee023a
--- /dev/null
+++ b/blog/releases/0.7/index.html
@@ -0,0 +1,143 @@
+<!doctype html>
+<html lang="en" dir="ltr" class="blog-wrapper blog-post-page plugin-blog plugin-id-default" data-has-hydrated="false">
+<head>
+<meta charset="UTF-8">
+<meta name="generator" content="Docusaurus v3.8.1">
+<title data-rh="true">Announcing Fluss 0.7 | Fluss</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/docusaurus-social-card.jpg"><meta data-rh="true" name="twitter:image" content="https://fluss.apache.org/img/docusaurus-social-card.jpg"><meta data-rh="true" property="og:url" content="https://fluss.apac [...]
+<link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Fluss Atom Feed">
+
+
+
+
+<link rel="search" type="application/opensearchdescription+xml" title="Fluss" href="/opensearch.xml">
+
+<link rel="icon" href="/img/logo.svg">
+<link rel="manifest" href="/manifest.json">
+<meta name="theme-color" content="#0071e3"><link rel="stylesheet" href="/assets/css/styles.3ca55d09.css">
+<script src="/assets/js/runtime~main.264c6f6f.js" defer="defer"></script>
+<script src="/assets/js/main.a06cb6b9.js" defer="defer"></script>
+</head>
+<body class="navigation-with-keyboard">
+<svg xmlns="http://www.w3.org/2000/svg" style="display: none;"><defs>
+<symbol id="theme-svg-external-link" viewBox="0 0 24 24"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"/></symbol>
+</defs></svg>
+<script>!function(){var t="light";var e=function(){try{return new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}}()||function(){try{return window.localStorage.getItem("theme")}catch(t){}}();document.documentElement.setAttribute("data-theme",e||t),document.documentElement.setAttribute("data-theme-choice",e||t)}(),function(){try{const c=new URLSearchParams(window.location.search).entries();for(var[t,e]of c)if(t.startsWith("docusaurus-data-")){var a=t.replace("do [...]
+<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>
+<h2 class="anchor anchorWithStickyNavbar_LWe7" id="stability-enhancements">Stability Enhancements<a href="#stability-enhancements" class="hash-link" aria-label="Direct link to Stability Enhancements" title="Direct link to Stability Enhancements"></a></h2>
+<p>In this release, we have dedicated significant effort to enhancing system stability. By building a comprehensive stability testing framework covering end-to-end processes and multi-scenario fault simulations, combined with large-scale stress testing using real business data, and through rigorous production-level stability validation in Alibaba, we have addressed and resolved over 50 issues. This has significantly improved the stability of Fluss' core modules and the overall robus [...]
+<ul>
+<li><strong>Online/Offline Node Optimization:</strong> Refactored the ISR (In-Sync Replica) update mechanism and replica synchronization logic and enhanced idempotency guarantees. This significantly improves system stability and reduces the risk of data loss during node failures.</li>
+<li><strong>Server Metadata Caching:</strong> Introduced a consistent metadata caching layer on the server side. Clients now fetch metadata from the local server cache instead of ZooKeeper, significantly reducing request latency and pressure on ZooKeeper.</li>
+<li><strong>Server Rack-Aware Support:</strong> During replica assignment, the system automatically avoids placing multiple replicas within the same "rack", thereby significantly improving fault tolerance and high availability. This feature is especially beneficial in multi-AZ deployments and large-scale data center disaster recovery scenarios. You can configure the "rack" of the TabletServer via setting <code>tablet-server.rack</code> in <code>server.yaml</code>.</li>
+<li><strong>Accelerated Table Creation:</strong> Leveraged batched metadata updates to reduce table initialization time. For example, the time for a table creation with 1024 buckets was reduced from minutes to milliseconds.</li>
+<li><strong>Optimized Read/Write Pipelines:</strong>
+<ul>
+<li>Introduce bucket-id-based shuffle for primary key tables to improve write throughput.</li>
+<li>Dynamically estimate the batch size based on incoming traffic to optimize memory usage and throughput.</li>
+<li>Optimize the Arrow memory release logic to enhance job stability.</li>
+</ul>
+</li>
+</ul>
+<p>These enhancements make Fluss 0.7 ready for most production use cases.</p>
+<h2 class="anchor anchorWithStickyNavbar_LWe7" id="new-architecture-of-the-streaming-lakehouse">New Architecture of the Streaming Lakehouse<a href="#new-architecture-of-the-streaming-lakehouse" class="hash-link" aria-label="Direct link to New Architecture of the Streaming Lakehouse" title="Direct link to New Architecture of the Streaming Lakehouse"></a></h2>
+<p>In Fluss 0.5, we first introduced the Streaming Lakehouse feature, with the powerful Union Read ability, we can significantly reduce the cost of streaming storage and improve the data freshness of Lakehouse.</p>
+<blockquote>
+<p>Note: Union Reads allows querying and combining the results from both Lakehouse (historical) and Fluss (real-time) data.</p>
+</blockquote>
+<p>However, the initial implementation had architectural limitations affecting scalability and operability in production. In Fluss 0.7, we’ve completely re-architected the Streaming Lakehouse feature to address these challenges.</p>
+<h3 class="anchor anchorWithStickyNavbar_LWe7" id="elastic-stateless-service">Elastic Stateless Service<a href="#elastic-stateless-service" class="hash-link" aria-label="Direct link to Elastic Stateless Service" title="Direct link to Elastic Stateless Service"></a></h3>
+<p>Previously, the lake tiering service was implemented as a Flink job encapsulating Fluss as a Source and Paimon as a Sink, storing sync offsets state in Flink’s State, this making it a stateful service.
+This led to several operational issues:</p>
+<ul>
+<li><strong>Single Point of Failure:</strong> The lifecycle of each table is bound to a specific Flink job. Once a job fails, the synchronization of all tables hosted by the job will be blocked.</li>
+<li><strong>Limited Scalability:</strong> Could only scale vertically (increase job resources), not horizontally (start multiple jobs).</li>
+<li><strong>Inflexible Scheduling:</strong> Unable to prioritize tables and dynamically assign to dedicated Flink clusters.</li>
+<li><strong>Opaque State:</strong> Flink State being a black box made monitoring and troubleshooting the offset difficult.</li>
+</ul>
+<p>To address these challenges, we've re-architected the lake tiering service into a truly elastic and stateless component.
+The sync offset is now persisted directly within Fluss metadata, with future plans for integration into Paimon v1.2 snapshot properties.
+Furthermore, Flink jobs have transitioned from maintaining persistent table subscriptions to a more efficient model where they process one table at a time,
+dynamically requesting the next table upon completion of the current one.</p>
+<p><img decoding="async" loading="lazy" alt="New Architecture Diagram" src="/assets/images/new_tiering_service-4509c1a4b51c6821c0fe622cdda534e4.png" width="1980" height="1805" class="img_ev3q"></p>
+<p>This optimization significantly reduces the load on Fluss and boosts batch processing efficiency. As a result, cluster operators gain:</p>
+<ul>
+<li><strong>Enhanced Service Robustness:</strong> Operators can launch multiple Flink jobs to distribute workload and increase overall system resilience.</li>
+<li><strong>Flexible Resource Management:</strong> The ability to stop idle jobs at any time allows for immediate reclamation of valuable cluster resources.</li>
+<li><strong>Dynamic Task Orchestration:</strong> Sync tasks can now be dynamically scheduled across all active Flink jobs, optimizing resource utilization.</li>
+<li><strong>Actionable Offset Visibility:</strong> The offset state is now queryable, providing greater insight and control over data processing.</li>
+</ul>
+<p>This design ensures end-to-end consistency across all operations.
+Furthermore, this stateless design also decouples us from the tight Flink dependency, paving the way for future lightweight execution models, such as running on FaaS (Function as a Service).</p>
+<h3 class="anchor anchorWithStickyNavbar_LWe7" id="pluggable-lake-format">Pluggable Lake Format<a href="#pluggable-lake-format" class="hash-link" aria-label="Direct link to Pluggable Lake Format" title="Direct link to Pluggable Lake Format"></a></h3>
+<p>The previous implementation had a tight coupling with Apache Paimon, which restricted our ability to integrate with other lake formats, such as Iceberg.
+With version 0.7, we have abstracted and modularized all lake format interfaces.
+This enhancement enables easy, plugin-style support for Iceberg and other emerging formats.</p>
+<h3 class="anchor anchorWithStickyNavbar_LWe7" id="native-flink-command-submission">Native Flink Command Submission<a href="#native-flink-command-submission" class="hash-link" aria-label="Direct link to Native Flink Command Submission" title="Direct link to Native Flink Command Submission"></a></h3>
+<p>Previously, users were limited to the <code>lakehouse.sh</code> script for initiating the lake tiering service, which submitted jobs to the Flink cluster.
+While convenient, this approach restricted deployment flexibility, particularly when encountering diverse Flink deployment modes and internal product platforms.
+Fluss 0.7 now addresses this by supporting <strong>native job submission via standard Flink commands</strong> (<code>flink run</code>).
+This enhancement ensures broad compatibility with various deployment modes while significantly lowering learning and integration costs.
+The following is an example of how to submit the lake tiering service using the native Flink command:</p>
+<div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#9CDCFE;--prism-background-color:#1E1E1E"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style="color:#9CDCFE;background-color:#1E1E1E"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#9CDCFE"><span class="token plain">flink run /path/to/fluss-flink-tiering-0.7.0.jar </span><span class="token punctuation" sty [...]
+<p>See more details in the <a href="/docs/maintenance/tiered-storage/lakehouse-storage/">Streaming Lakehouse documentation</a>.</p>
+<h2 class="anchor anchorWithStickyNavbar_LWe7" id="streaming-partition-pruning">Streaming Partition Pruning<a href="#streaming-partition-pruning" class="hash-link" aria-label="Direct link to Streaming Partition Pruning" title="Direct link to Streaming Partition Pruning"></a></h2>
+<p>Partitioning is a foundational technique in modern data warehouses and Lakehouse architectures for optimizing query performance by
+logically dividing datasets along meaningful dimensions (e.g., time, region, business line).</p>
+<p>Fluss 0.7 introduces <strong>streaming partition pruning</strong>, enabling selective reading of relevant partitions based on query conditions.
+For example, if a query filters on <code>nation_key = 'US'</code>, the Fluss Source will only read matching partitions,
+significantly reducing network I/O and compute overhead.
+Apart from that, we also support the following advanced partition features to make partition pruning adaptable and easy to use:</p>
+<ul>
+<li><strong>Multi-level Partitioning:</strong> Supports nested partition strategies (e.g., <code>dt=20250617/region=US/business=sale</code>).</li>
+<li><strong>Dynamic Partition Creation:</strong> Automatically creates required partitions based on incoming data, no manual pre-creation is required.</li>
+<li><strong>Automatic Partition Discovery:</strong> Fluss source adds matched new partitions to the subscription in real-time.</li>
+</ul>
+<p>Using real business data from <strong>Taobao - the largest online shopping platform in China,</strong> we tested the read and write performance between non-partitioned and partitioned tables (with 20 auto-created partitions). The write results show that the multi-level partition and dynamic partition creation mechanism do not have a significant impact on the write performance.
+<img decoding="async" loading="lazy" alt="Write Perf" src="/assets/images/write_perf-25c062766e117f2c092a79653cf69a85.jpg" width="890" height="554" class="img_ev3q"></p>
+<p>At the same time, under the same data scale, we tested the streaming read performance of non-partitioned tables and partitioned tables under three partition conditions:
+<strong>unconditional</strong>, <strong>medium matching</strong> (hitting five partitions), and <strong>exact matching</strong> (hitting one partition).
+From the results, we can observe that when the partition condition only matches 1/20 of the partitions,
+<strong>the network traffic is reduced by about 20x</strong> and the <strong>processing time is reduced by nearly 9x</strong>,
+demonstrating the huge performance benefit of partition pruning in streaming reads.</p>
+<p><img decoding="async" loading="lazy" alt="Read Perf" src="/assets/images/read_perf-66abe9aa4ee1bf9ef52dc10c59072c0f.jpg" width="836" height="852" class="img_ev3q"></p>
+<p>Streaming partition pruning is the second pushdown feature introduced after streaming column pruning in Fluss.
+Looking ahead, we plan to introduce <strong>predicate pushdown with Arrow batch-level I/O pruning</strong> to further enhance query efficiency.</p>
+<h2 class="anchor anchorWithStickyNavbar_LWe7" id="enterprise-grade-security">Enterprise-Grade Security<a href="#enterprise-grade-security" class="hash-link" aria-label="Direct link to Enterprise-Grade Security" title="Direct link to Enterprise-Grade Security"></a></h2>
+<p>To meet enterprise-grade security requirements, Fluss 0.7 fully supports Authentication and Authorization mechanisms.</p>
+<p><strong>Authentication</strong> is the process of confirming the identity of the client.
+Fluss introduced a plugin-based authentication with built-in <strong>SASL/PLAIN</strong> support, compatible with <strong>JAAS</strong> (Java Authentication and Authorization Service) configuration for both client and server credentials.</p>
+<p><strong>Authorization</strong> controls which resources the identity can access and which operations it can perform after identity confirmation.
+Fluss implements fine-grained permission control through the <strong>ACL</strong> (Access Control List) mechanism, supporting multi-level access control at the Cluster, Database, and Table levels.</p>
+<p>Additionally, we've integrated Flink SQL's <code>CALL</code> statements to ease ACL permission management for users.
+For instance, granting read access to the <code>mydb</code> database for user <code>Tim</code> can now be accomplished with the following command:</p>
+<div class="language-sql codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#9CDCFE;--prism-background-color:#1E1E1E"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-sql codeBlock_bY9V thin-scrollbar" style="color:#9CDCFE;background-color:#1E1E1E"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#9CDCFE"><span class="token keyword" style="color:rgb(86, 156, 214)">CALL</span><span class="token plain"> admin_catalog</span>< [...]
+<p>For details, please refer to the <a href="/docs/security/overview/">Security documentation</a> and quickstarts.</p>
+<h2 class="anchor anchorWithStickyNavbar_LWe7" id="flink-datastream-connector">Flink DataStream Connector<a href="#flink-datastream-connector" class="hash-link" aria-label="Direct link to Flink DataStream Connector" title="Direct link to Flink DataStream Connector"></a></h2>
+<p>Fluss 0.7 officially introduces the DataStream Connector, supporting both Source and Sink for reading and writing log and primary key tables. Users can now seamlessly integrate Fluss tables into Flink DataStream pipelines.</p>
+<p>Here’s an example of reading data from a Fluss table into a Flink DataStream:</p>
+<div class="language-java codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#9CDCFE;--prism-background-color:#1E1E1E"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-java codeBlock_bY9V thin-scrollbar" style="color:#9CDCFE;background-color:#1E1E1E"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#9CDCFE"><span class="token class-name" style="color:rgb(78, 201, 176)">FlussSource</span><span class="token generics punctuat [...]
+<p>For usage examples and configuration parameters, see the <a href="https://alibaba.github.io/fluss-docs/docs/engine-flink/datastream/" target="_blank" rel="noopener noreferrer">DataStream Connector documentation</a>.</p>
+<h2 class="anchor anchorWithStickyNavbar_LWe7" id="fluss-java-client">Fluss Java Client<a href="#fluss-java-client" class="hash-link" aria-label="Direct link to Fluss Java Client" title="Direct link to Fluss Java Client"></a></h2>
+<p>In this version, we officially release the Fluss Java Client, a client library designed for developers working with structured stream tables. The client includes two core API modules:</p>
+<ul>
+<li><strong>Table API:</strong> For table-based data operations, supporting streaming reads/writes, updates, deletions, and point queries.</li>
+<li><strong>Admin API:</strong> For metadata management, including cluster management, table lifecycle, and access control.</li>
+</ul>
+<p>The client supports forward and backward compatibility, ensuring smooth upgrades across Fluss versions. With the Fluss Java Client, developers can build online applications and data ingestion services based on Fluss, as well as enterprise-level components such as Fluss management platforms and operations monitoring systems. For detailed usage instructions, please refer to the official documentation: <a href="https://alibaba.github.io/fluss-docs/docs/apis/java-client/" target="_blank" [...]
+<p>Fluss uses Apache Arrow as its underlying storage format, enabling efficient cross-language extensions. A <strong>Fluss Python Client</strong> is planned for future releases, leveraging the rich ecosystem of <strong>PyArrow</strong> to integrate with popular data analysis tools such as <strong>Pandas</strong> and <strong>DuckDB</strong>.
+This will further lower the barrier for real-time data exploration and analytics.</p>
+<h2 class="anchor anchorWithStickyNavbar_LWe7" id="future-roadmap">Future Roadmap<a href="#future-roadmap" class="hash-link" aria-label="Direct link to Future Roadmap" title="Direct link to Future Roadmap"></a></h2>
+<p>In the next releases, we will continue to enhance system robustness and operational capabilities and plan to introduce <strong>Rolling Upgrades</strong> and <strong>Cluster Rebalance</strong>.
+In addition, with the new pluggable datalake format of the Streaming Lakehouse, we will further expand support for the mainstream datalake table formats, such as an <strong>Apache Iceberg</strong> integration.
+Meanwhile, we will explore the possibility of using Fluss in <strong>multimodal AI</strong> use cases, supporting ingestion of multimodal data,
+and integrating with <strong><a href="https://github.com/lancedb/lance" target="_blank" rel="noopener noreferrer">Lance</a></strong> format in the Streaming Lakehouse architecture.</p>
+<p>Fluss is under active development. Be sure to stay updated on the project, give it a try and if you like it,
+don’t forget to give it some ❤️ via ⭐ on <a href="https://github.com/alibaba/fluss" target="_blank" rel="noopener noreferrer">GitHub</a>.</p>
+<h2 class="anchor anchorWithStickyNavbar_LWe7" 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"></a></h2>
+<p>The Fluss community would like to express gratitude to all the contributors who made this release possible:</p>
+<p>Benchao Li, CaoZhen, Feng Wang, Giannis Polyzos, HZY, Hongshun Wang, Jark Wu, Junbo wang, Kerwin, Leonard Xu, MehulBatra, Michael Koepf, Min Zhao, Nicholas Jiang, Radek Grebski, Rohan Dubey, Xiaojian Sun, Yang Guo, dao-jun, gkatzioura, luoyuxia, majialong, xiaozhou, yunhong, yuxia Luo, yx9o, zhangmang, 道君</p></div><footer class="docusaurus-mt-lg"><div class="row margin-top--sm theme-blog-footer-edit-meta-row"><div class="col"><b>Tags:</b><ul class="tags_jXut [...]
+ Apache®, Apache Flink®, Flink®, Apache Kafka®, Kafka®, Spark® and associated open source project names and logos are trademarks of the Apache Software Foundation.</div></div></div></footer></div>
+</body>
+</html>
\ No newline at end of file
diff --git a/blog/rss.css b/blog/rss.css
new file mode 100644
index 0000000..d2fc20b
--- /dev/null
+++ b/blog/rss.css
@@ -0,0 +1,75 @@
+/**
+ * Copyright (c) Facebook, Inc. and its affiliates.
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE file in the root directory of this source tree.
+ */
+
+main {
+ flex: 1 0 auto;
+ width: 100%;
+ margin: 2rem auto;
+ max-width: 800px;
+ /* stylelint-disable-next-line font-family-name-quotes */
+ font-family: system-ui, -apple-system, Segoe UI, Roboto, Ubuntu, Cantarell;
+}
+
+.info {
+ display: block;
+ margin: 2rem 0;
+ padding: 1.6rem 2.4rem;
+ border: 1px solid dodgerblue;
+ border-left-width: 0.5rem;
+ border-radius: 0.4rem;
+ background-color: #edf5ff;
+}
+
+a {
+ color: #005aff;
+ text-decoration: none;
+}
+
+h1 {
+ text-wrap: balance;
+ font-size: 3.4rem;
+ font-weight: 800;
+ margin-bottom: 2rem;
+ display: flex;
+ align-items: center;
+}
+
+h1 .rss-icon {
+ height: 3.2rem;
+ width: 3.2rem;
+ margin-right: 1rem;
+}
+
+h2 {
+ font-size: 2.2rem;
+ font-weight: 700;
+ margin-bottom: 0.2rem;
+}
+
+h3 {
+ font-size: 1.8rem;
+ font-weight: 700;
+ margin-bottom: 0.1rem;
+}
+
+.blog-description {
+ font-size: 1.4rem;
+ margin-bottom: 0.6rem;
+}
+
+.blog-post-date {
+ font-size: 1rem;
+ line-height: 1.4rem;
+ font-style: italic;
+ color: #797b7e;
+}
+
+.blog-post-description {
+ font-size: 1rem;
+ line-height: 1.4rem;
+ color: #434349;
+}
diff --git a/blog/rss.xml b/blog/rss.xml
new file mode 100644
index 0000000..40f7b0f
--- /dev/null
+++ b/blog/rss.xml
@@ -0,0 +1,765 @@
+<?xml version="1.0" encoding="utf-8"?><?xml-stylesheet type="text/xsl" href="rss.xsl"?>
+<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/">
+ <channel>
+ <title>Fluss Blog</title>
+ <link>https://fluss.apache.org/blog/</link>
+ <description>Fluss Blog</description>
+ <lastBuildDate>Wed, 18 Jun 2025 00:00:00 GMT</lastBuildDate>
+ <docs>https://validator.w3.org/feed/docs/rss2.html</docs>
+ <generator>https://github.com/jpmonette/feed</generator>
+ <language>en</language>
+ <item>
+ <title><![CDATA[Announcing Fluss 0.7]]></title>
+ <link>https://fluss.apache.org/blog/releases/0.7/</link>
+ <guid>https://fluss.apache.org/blog/releases/0.7/</guid>
+ <pubDate>Wed, 18 Jun 2025 00:00:00 GMT</pubDate>
+ <description><![CDATA[<!--]]></description>
+ <content:encoded><![CDATA[<p><img decoding="async" loading="lazy" alt="Banner" src="https://fluss.apache.org/assets/images/banner-8cc4ea9295caf8358e14adf7a69beb01.png" width="1322" height="632" class="img_ev3q"></p>
+<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="https://fluss.apache.org/assets/images/overview-255047ec7648f12c63660b40d1147c86.png" width="1248" height="778" class="img_ev3q"></p>
+<h2 class="anchor anchorWithStickyNavbar_LWe7" id="stability-enhancements">Stability Enhancements<a href="https://fluss.apache.org/blog/releases/0.7/#stability-enhancements" class="hash-link" aria-label="Direct link to Stability Enhancements" title="Direct link to Stability Enhancements"></a></h2>
+<p>In this release, we have dedicated significant effort to enhancing system stability. By building a comprehensive stability testing framework covering end-to-end processes and multi-scenario fault simulations, combined with large-scale stress testing using real business data, and through rigorous production-level stability validation in Alibaba, we have addressed and resolved over 50 issues. This has significantly improved the stability of Fluss' core modules and the overall robustness [...]
+<ul>
+<li><strong>Online/Offline Node Optimization:</strong> Refactored the ISR (In-Sync Replica) update mechanism and replica synchronization logic and enhanced idempotency guarantees. This significantly improves system stability and reduces the risk of data loss during node failures.</li>
+<li><strong>Server Metadata Caching:</strong> Introduced a consistent metadata caching layer on the server side. Clients now fetch metadata from the local server cache instead of ZooKeeper, significantly reducing request latency and pressure on ZooKeeper.</li>
+<li><strong>Server Rack-Aware Support:</strong> During replica assignment, the system automatically avoids placing multiple replicas within the same "rack", thereby significantly improving fault tolerance and high availability. This feature is especially beneficial in multi-AZ deployments and large-scale data center disaster recovery scenarios. You can configure the "rack" of the TabletServer via setting <code>tablet-server.rack</code> in <code>server.yaml</code>.</li>
+<li><strong>Accelerated Table Creation:</strong> Leveraged batched metadata updates to reduce table initialization time. For example, the time for a table creation with 1024 buckets was reduced from minutes to milliseconds.</li>
+<li><strong>Optimized Read/Write Pipelines:</strong>
+<ul>
+<li>Introduce bucket-id-based shuffle for primary key tables to improve write throughput.</li>
+<li>Dynamically estimate the batch size based on incoming traffic to optimize memory usage and throughput.</li>
+<li>Optimize the Arrow memory release logic to enhance job stability.</li>
+</ul>
+</li>
+</ul>
+<p>These enhancements make Fluss 0.7 ready for most production use cases.</p>
+<h2 class="anchor anchorWithStickyNavbar_LWe7" id="new-architecture-of-the-streaming-lakehouse">New Architecture of the Streaming Lakehouse<a href="https://fluss.apache.org/blog/releases/0.7/#new-architecture-of-the-streaming-lakehouse" class="hash-link" aria-label="Direct link to New Architecture of the Streaming Lakehouse" title="Direct link to New Architecture of the Streaming Lakehouse"></a></h2>
+<p>In Fluss 0.5, we first introduced the Streaming Lakehouse feature, with the powerful Union Read ability, we can significantly reduce the cost of streaming storage and improve the data freshness of Lakehouse.</p>
+<blockquote>
+<p>Note: Union Reads allows querying and combining the results from both Lakehouse (historical) and Fluss (real-time) data.</p>
+</blockquote>
+<p>However, the initial implementation had architectural limitations affecting scalability and operability in production. In Fluss 0.7, we’ve completely re-architected the Streaming Lakehouse feature to address these challenges.</p>
+<h3 class="anchor anchorWithStickyNavbar_LWe7" id="elastic-stateless-service">Elastic Stateless Service<a href="https://fluss.apache.org/blog/releases/0.7/#elastic-stateless-service" class="hash-link" aria-label="Direct link to Elastic Stateless Service" title="Direct link to Elastic Stateless Service"></a></h3>
+<p>Previously, the lake tiering service was implemented as a Flink job encapsulating Fluss as a Source and Paimon as a Sink, storing sync offsets state in Flink’s State, this making it a stateful service.
+This led to several operational issues:</p>
+<ul>
+<li><strong>Single Point of Failure:</strong> The lifecycle of each table is bound to a specific Flink job. Once a job fails, the synchronization of all tables hosted by the job will be blocked.</li>
+<li><strong>Limited Scalability:</strong> Could only scale vertically (increase job resources), not horizontally (start multiple jobs).</li>
+<li><strong>Inflexible Scheduling:</strong> Unable to prioritize tables and dynamically assign to dedicated Flink clusters.</li>
+<li><strong>Opaque State:</strong> Flink State being a black box made monitoring and troubleshooting the offset difficult.</li>
+</ul>
+<p>To address these challenges, we've re-architected the lake tiering service into a truly elastic and stateless component.
+The sync offset is now persisted directly within Fluss metadata, with future plans for integration into Paimon v1.2 snapshot properties.
+Furthermore, Flink jobs have transitioned from maintaining persistent table subscriptions to a more efficient model where they process one table at a time,
+dynamically requesting the next table upon completion of the current one.</p>
+<p><img decoding="async" loading="lazy" alt="New Architecture Diagram" src="https://fluss.apache.org/assets/images/new_tiering_service-4509c1a4b51c6821c0fe622cdda534e4.png" width="1980" height="1805" class="img_ev3q"></p>
+<p>This optimization significantly reduces the load on Fluss and boosts batch processing efficiency. As a result, cluster operators gain:</p>
+<ul>
+<li><strong>Enhanced Service Robustness:</strong> Operators can launch multiple Flink jobs to distribute workload and increase overall system resilience.</li>
+<li><strong>Flexible Resource Management:</strong> The ability to stop idle jobs at any time allows for immediate reclamation of valuable cluster resources.</li>
+<li><strong>Dynamic Task Orchestration:</strong> Sync tasks can now be dynamically scheduled across all active Flink jobs, optimizing resource utilization.</li>
+<li><strong>Actionable Offset Visibility:</strong> The offset state is now queryable, providing greater insight and control over data processing.</li>
+</ul>
+<p>This design ensures end-to-end consistency across all operations.
+Furthermore, this stateless design also decouples us from the tight Flink dependency, paving the way for future lightweight execution models, such as running on FaaS (Function as a Service).</p>
+<h3 class="anchor anchorWithStickyNavbar_LWe7" id="pluggable-lake-format">Pluggable Lake Format<a href="https://fluss.apache.org/blog/releases/0.7/#pluggable-lake-format" class="hash-link" aria-label="Direct link to Pluggable Lake Format" title="Direct link to Pluggable Lake Format"></a></h3>
+<p>The previous implementation had a tight coupling with Apache Paimon, which restricted our ability to integrate with other lake formats, such as Iceberg.
+With version 0.7, we have abstracted and modularized all lake format interfaces.
+This enhancement enables easy, plugin-style support for Iceberg and other emerging formats.</p>
+<h3 class="anchor anchorWithStickyNavbar_LWe7" id="native-flink-command-submission">Native Flink Command Submission<a href="https://fluss.apache.org/blog/releases/0.7/#native-flink-command-submission" class="hash-link" aria-label="Direct link to Native Flink Command Submission" title="Direct link to Native Flink Command Submission"></a></h3>
+<p>Previously, users were limited to the <code>lakehouse.sh</code> script for initiating the lake tiering service, which submitted jobs to the Flink cluster.
+While convenient, this approach restricted deployment flexibility, particularly when encountering diverse Flink deployment modes and internal product platforms.
+Fluss 0.7 now addresses this by supporting <strong>native job submission via standard Flink commands</strong> (<code>flink run</code>).
+This enhancement ensures broad compatibility with various deployment modes while significantly lowering learning and integration costs.
+The following is an example of how to submit the lake tiering service using the native Flink command:</p>
+<div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#9CDCFE;--prism-background-color:#1E1E1E"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style="color:#9CDCFE;background-color:#1E1E1E"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#9CDCFE"><span class="token plain">flink run /path/to/fluss-flink-tiering-0.7.0.jar </span><span class="token punctuation" sty [...]
+<p>See more details in the <a href="https://fluss.apache.org/docs/maintenance/tiered-storage/lakehouse-storage/">Streaming Lakehouse documentation</a>.</p>
+<h2 class="anchor anchorWithStickyNavbar_LWe7" id="streaming-partition-pruning">Streaming Partition Pruning<a href="https://fluss.apache.org/blog/releases/0.7/#streaming-partition-pruning" class="hash-link" aria-label="Direct link to Streaming Partition Pruning" title="Direct link to Streaming Partition Pruning"></a></h2>
+<p>Partitioning is a foundational technique in modern data warehouses and Lakehouse architectures for optimizing query performance by
+logically dividing datasets along meaningful dimensions (e.g., time, region, business line).</p>
+<p>Fluss 0.7 introduces <strong>streaming partition pruning</strong>, enabling selective reading of relevant partitions based on query conditions.
+For example, if a query filters on <code>nation_key = 'US'</code>, the Fluss Source will only read matching partitions,
+significantly reducing network I/O and compute overhead.
+Apart from that, we also support the following advanced partition features to make partition pruning adaptable and easy to use:</p>
+<ul>
+<li><strong>Multi-level Partitioning:</strong> Supports nested partition strategies (e.g., <code>dt=20250617/region=US/business=sale</code>).</li>
+<li><strong>Dynamic Partition Creation:</strong> Automatically creates required partitions based on incoming data, no manual pre-creation is required.</li>
+<li><strong>Automatic Partition Discovery:</strong> Fluss source adds matched new partitions to the subscription in real-time.</li>
+</ul>
+<p>Using real business data from <strong>Taobao - the largest online shopping platform in China,</strong> we tested the read and write performance between non-partitioned and partitioned tables (with 20 auto-created partitions). The write results show that the multi-level partition and dynamic partition creation mechanism do not have a significant impact on the write performance.
+<img decoding="async" loading="lazy" alt="Write Perf" src="https://fluss.apache.org/assets/images/write_perf-25c062766e117f2c092a79653cf69a85.jpg" width="890" height="554" class="img_ev3q"></p>
+<p>At the same time, under the same data scale, we tested the streaming read performance of non-partitioned tables and partitioned tables under three partition conditions:
+<strong>unconditional</strong>, <strong>medium matching</strong> (hitting five partitions), and <strong>exact matching</strong> (hitting one partition).
+From the results, we can observe that when the partition condition only matches 1/20 of the partitions,
+<strong>the network traffic is reduced by about 20x</strong> and the <strong>processing time is reduced by nearly 9x</strong>,
+demonstrating the huge performance benefit of partition pruning in streaming reads.</p>
+<p><img decoding="async" loading="lazy" alt="Read Perf" src="https://fluss.apache.org/assets/images/read_perf-66abe9aa4ee1bf9ef52dc10c59072c0f.jpg" width="836" height="852" class="img_ev3q"></p>
+<p>Streaming partition pruning is the second pushdown feature introduced after streaming column pruning in Fluss.
+Looking ahead, we plan to introduce <strong>predicate pushdown with Arrow batch-level I/O pruning</strong> to further enhance query efficiency.</p>
+<h2 class="anchor anchorWithStickyNavbar_LWe7" id="enterprise-grade-security">Enterprise-Grade Security<a href="https://fluss.apache.org/blog/releases/0.7/#enterprise-grade-security" class="hash-link" aria-label="Direct link to Enterprise-Grade Security" title="Direct link to Enterprise-Grade Security"></a></h2>
+<p>To meet enterprise-grade security requirements, Fluss 0.7 fully supports Authentication and Authorization mechanisms.</p>
+<p><strong>Authentication</strong> is the process of confirming the identity of the client.
+Fluss introduced a plugin-based authentication with built-in <strong>SASL/PLAIN</strong> support, compatible with <strong>JAAS</strong> (Java Authentication and Authorization Service) configuration for both client and server credentials.</p>
+<p><strong>Authorization</strong> controls which resources the identity can access and which operations it can perform after identity confirmation.
+Fluss implements fine-grained permission control through the <strong>ACL</strong> (Access Control List) mechanism, supporting multi-level access control at the Cluster, Database, and Table levels.</p>
+<p>Additionally, we've integrated Flink SQL's <code>CALL</code> statements to ease ACL permission management for users.
+For instance, granting read access to the <code>mydb</code> database for user <code>Tim</code> can now be accomplished with the following command:</p>
+<div class="language-sql codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#9CDCFE;--prism-background-color:#1E1E1E"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-sql codeBlock_bY9V thin-scrollbar" style="color:#9CDCFE;background-color:#1E1E1E"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#9CDCFE"><span class="token keyword" style="color:rgb(86, 156, 214)">CALL</span><span class="token plain"> admin_catalog</span>< [...]
+<p>For details, please refer to the <a href="https://fluss.apache.org/docs/security/overview/">Security documentation</a> and quickstarts.</p>
+<h2 class="anchor anchorWithStickyNavbar_LWe7" id="flink-datastream-connector">Flink DataStream Connector<a href="https://fluss.apache.org/blog/releases/0.7/#flink-datastream-connector" class="hash-link" aria-label="Direct link to Flink DataStream Connector" title="Direct link to Flink DataStream Connector"></a></h2>
+<p>Fluss 0.7 officially introduces the DataStream Connector, supporting both Source and Sink for reading and writing log and primary key tables. Users can now seamlessly integrate Fluss tables into Flink DataStream pipelines.</p>
+<p>Here’s an example of reading data from a Fluss table into a Flink DataStream:</p>
+<div class="language-java codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#9CDCFE;--prism-background-color:#1E1E1E"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-java codeBlock_bY9V thin-scrollbar" style="color:#9CDCFE;background-color:#1E1E1E"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#9CDCFE"><span class="token class-name" style="color:rgb(78, 201, 176)">FlussSource</span><span class="token generics punctuat [...]
+<p>For usage examples and configuration parameters, see the <a href="https://alibaba.github.io/fluss-docs/docs/engine-flink/datastream/" target="_blank" rel="noopener noreferrer">DataStream Connector documentation</a>.</p>
+<h2 class="anchor anchorWithStickyNavbar_LWe7" id="fluss-java-client">Fluss Java Client<a href="https://fluss.apache.org/blog/releases/0.7/#fluss-java-client" class="hash-link" aria-label="Direct link to Fluss Java Client" title="Direct link to Fluss Java Client"></a></h2>
+<p>In this version, we officially release the Fluss Java Client, a client library designed for developers working with structured stream tables. The client includes two core API modules:</p>
+<ul>
+<li><strong>Table API:</strong> For table-based data operations, supporting streaming reads/writes, updates, deletions, and point queries.</li>
+<li><strong>Admin API:</strong> For metadata management, including cluster management, table lifecycle, and access control.</li>
+</ul>
+<p>The client supports forward and backward compatibility, ensuring smooth upgrades across Fluss versions. With the Fluss Java Client, developers can build online applications and data ingestion services based on Fluss, as well as enterprise-level components such as Fluss management platforms and operations monitoring systems. For detailed usage instructions, please refer to the official documentation: <a href="https://alibaba.github.io/fluss-docs/docs/apis/java-client/" target="_blank" [...]
+<p>Fluss uses Apache Arrow as its underlying storage format, enabling efficient cross-language extensions. A <strong>Fluss Python Client</strong> is planned for future releases, leveraging the rich ecosystem of <strong>PyArrow</strong> to integrate with popular data analysis tools such as <strong>Pandas</strong> and <strong>DuckDB</strong>.
+This will further lower the barrier for real-time data exploration and analytics.</p>
+<h2 class="anchor anchorWithStickyNavbar_LWe7" id="future-roadmap">Future Roadmap<a href="https://fluss.apache.org/blog/releases/0.7/#future-roadmap" class="hash-link" aria-label="Direct link to Future Roadmap" title="Direct link to Future Roadmap"></a></h2>
+<p>In the next releases, we will continue to enhance system robustness and operational capabilities and plan to introduce <strong>Rolling Upgrades</strong> and <strong>Cluster Rebalance</strong>.
+In addition, with the new pluggable datalake format of the Streaming Lakehouse, we will further expand support for the mainstream datalake table formats, such as an <strong>Apache Iceberg</strong> integration.
+Meanwhile, we will explore the possibility of using Fluss in <strong>multimodal AI</strong> use cases, supporting ingestion of multimodal data,
+and integrating with <strong><a href="https://github.com/lancedb/lance" target="_blank" rel="noopener noreferrer">Lance</a></strong> format in the Streaming Lakehouse architecture.</p>
+<p>Fluss is under active development. Be sure to stay updated on the project, give it a try and if you like it,
+don’t forget to give it some ❤️ via ⭐ on <a href="https://github.com/alibaba/fluss" target="_blank" rel="noopener noreferrer">GitHub</a>.</p>
+<h2 class="anchor anchorWithStickyNavbar_LWe7" id="list-of-contributors">List of contributors<a href="https://fluss.apache.org/blog/releases/0.7/#list-of-contributors" class="hash-link" aria-label="Direct link to List of contributors" title="Direct link to List of contributors"></a></h2>
+<p>The Fluss community would like to express gratitude to all the contributors who made this release possible:</p>
+<p>Benchao Li, CaoZhen, Feng Wang, Giannis Polyzos, HZY, Hongshun Wang, Jark Wu, Junbo wang, Kerwin, Leonard Xu, MehulBatra, Michael Koepf, Min Zhao, Nicholas Jiang, Radek Grebski, Rohan Dubey, Xiaojian Sun, Yang Guo, dao-jun, gkatzioura, luoyuxia, majialong, xiaozhou, yunhong, yuxia Luo, yx9o, zhangmang, 道君</p>]]></content:encoded>
+ <category>releases</category>
+ </item>
+ <item>
+ <title><![CDATA[Understanding Partial Updates]]></title>
+ <link>https://fluss.apache.org/blog/partial-updates/</link>
+ <guid>https://fluss.apache.org/blog/partial-updates/</guid>
+ <pubDate>Sun, 01 Jun 2025 00:00:00 GMT</pubDate>
+ <description><![CDATA[<!--]]></description>
+ <content:encoded><![CDATA[<p><img decoding="async" loading="lazy" alt="Banner" src="https://fluss.apache.org/assets/images/banner-a09e6bac14dc2bee3dbc698347cb2d7f.png" width="1348" height="958" class="img_ev3q"></p>
+<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:
+<em>user preferences</em>, <em>past purchases</em>, <em>clickstream behavior</em>, <em>cart activity</em>, <em>product reviews</em>, <em>support tickets</em>, <em>ad impressions</em>, and <em>loyalty status</em>.</p>
+<p>That’s at least <strong>8 different data sources</strong>, each producing updates independently.</p>
+<p>Joining multiple data streams at scale, although it works with Apache Flink it can be really challenging and resource-intensive.
+More specifically, it can lead to:</p>
+<ul>
+<li><strong>Really large state sizes in Flink:</strong> as it needs to buffer all incoming events until they can be joined. In many case states need to be kept around for a long period of time if not indefinitely.</li>
+<li><strong>Deal with checkpoints overhead and backpressure:</strong> as the join operation and large state uploading can create a bottleneck in the pipeline.</li>
+<li><strong>States are not easy to inspect and debug:</strong> as they are often large and complex. This can make it difficult to understand what is happening in the pipeline and why certain events are not being processed correctly.</li>
+<li><strong>State TTL can lead to inconsistent results:</strong> as events may be dropped before they can be joined. This can lead to data loss and incorrect results in the final output.</li>
+</ul>
+<p>Overall, this approach not only consumes a lot of memory and CPU, but also complicates the job design and maintenance.</p>
+<p><img decoding="async" loading="lazy" alt="Streaming Joins" src="https://fluss.apache.org/assets/images/streaming_join-761699227c5633f3575e2036b9e2ac61.png" width="1375" height="550" class="img_ev3q"></p>
+<h3 class="anchor anchorWithStickyNavbar_LWe7" id="partial-updates-a-different-approach-with-fluss">Partial Updates: A Different Approach with Fluss<a href="https://fluss.apache.org/blog/partial-updates/#partial-updates-a-different-approach-with-fluss" class="hash-link" aria-label="Direct link to Partial Updates: A Different Approach with Fluss" title="Direct link to Partial Updates: A Different Approach with Fluss"></a></h3>
+<p>Fluss introduces a more elegant solution: <strong>partial updates</strong> on a primary key table.</p>
+<p>Instead of performing multi-way joins in the streaming job, Fluss allows each data stream source to independently update only its relevant columns into a shared wide table identified by the primary key.
+In Fluss, you can define a wide table (for example, a user_profile table based on a <code>user_id</code>) that contains all possible fields from all sources.
+Each source stream then writes partial rows – only the fields it knows about – into this table.</p>
+<p><img decoding="async" loading="lazy" alt="Partial Update" src="https://fluss.apache.org/assets/images/partial_update-d529bf24211a76b31444bc7918872d59.png" width="1488" height="669" class="img_ev3q"></p>
+<p>Fluss’s storage engine automatically merges these partial updates together based on the primary key.
+Essentially, Fluss maintains the latest combined value for each key, so you don’t have to manage large join states in Flink.</p>
+<p>Under the hood, when a new partial update for a key arrives, Fluss will look up the existing record for that primary key, update the specific columns provided, and leave other columns unchanged.
+The result is written back as the new version of the record.
+This happens in <em>real-time</em>, so the table is <strong>always up-to-date</strong> with the latest information from all streams.</p>
+<p>Next, let's try and better understand how this works in practice with a concrete example.</p>
+<h3 class="anchor anchorWithStickyNavbar_LWe7" id="example-building-a-unified-wide-table">Example: Building a Unified Wide Table<a href="https://fluss.apache.org/blog/partial-updates/#example-building-a-unified-wide-table" class="hash-link" aria-label="Direct link to Example: Building a Unified Wide Table" title="Direct link to Example: Building a Unified Wide Table"></a></h3>
+<blockquote>
+<p>You can find the full source code on github <a href="https://github.com/ververica/ververica-fluss-examples/tree/main/partial_updates" target="_blank" rel="noopener noreferrer">here</a>.</p>
+</blockquote>
+<p>Start by cloning the repository, run <code>docker compose up</code> to spin up the development enviroment and finally grab a terminal
+into the <code>jobmanager</code> and start the Flink SQL cli, by running the following command:</p>
+<div class="language-shell codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#9CDCFE;--prism-background-color:#1E1E1E"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-shell codeBlock_bY9V thin-scrollbar" style="color:#9CDCFE;background-color:#1E1E1E"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#9CDCFE"><span class="token plain">./bin/sql-client.sh</span><br></span></code></pre></div></div>
+<p>Great so far ! 👍</p>
+<p><strong>Step 1:</strong> The first thing we need to do is to create a Flink catalog that will be used to store the tables we are going to create.
+Let's create a catalog called <code>fluss_catalog</code> and use this catalog.</p>
+<div class="language-sql codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#9CDCFE;--prism-background-color:#1E1E1E"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-sql codeBlock_bY9V thin-scrollbar" style="color:#9CDCFE;background-color:#1E1E1E"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#9CDCFE"><span class="token keyword" style="color:rgb(86, 156, 214)">CREATE</span><span class="token plain"> CATALOG fluss_catal [...]
+<p><strong>Step 2:</strong> Then let's create <code>3 tables</code> to represent the different data sources that will be used to build the recommendations wide table.</p>
+<div class="language-sql codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#9CDCFE;--prism-background-color:#1E1E1E"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-sql codeBlock_bY9V thin-scrollbar" style="color:#9CDCFE;background-color:#1E1E1E"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#9CDCFE"><span class="token comment" style="color:rgb(106, 153, 85)">-- Recommendations – model scores</span><span class="token [...]
+<p><strong>Step 3:</strong> Of course, we will need some sample data to work with , so let's go on and insert some records into the tables. 💻</p>
+<div class="language-sql codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#9CDCFE;--prism-background-color:#1E1E1E"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-sql codeBlock_bY9V thin-scrollbar" style="color:#9CDCFE;background-color:#1E1E1E"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#9CDCFE"><span class="token comment" style="color:rgb(106, 153, 85)">-- Recommendations – model scores</span><span class="token [...]
+<div class="language-sql codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#9CDCFE;--prism-background-color:#1E1E1E"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-sql codeBlock_bY9V thin-scrollbar" style="color:#9CDCFE;background-color:#1E1E1E"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#9CDCFE"><span class="token comment" style="color:rgb(106, 153, 85)">-- Impressions – how often each (user,item) was shown</span [...]
+<div class="language-sql codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#9CDCFE;--prism-background-color:#1E1E1E"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-sql codeBlock_bY9V thin-scrollbar" style="color:#9CDCFE;background-color:#1E1E1E"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#9CDCFE"><span class="token comment" style="color:rgb(106, 153, 85)">-- Clicks – user engagement</span><span class="token plain" [...]
+<blockquote>
+<p><strong>Note:</strong> 🚨 So far the jobs we run were bounded jobs, so they will finish after inserting the records. Moving forward we will run some streaming jobs.
+So keep in mind that each job runs with a <code>parallelism of 3</code> and our environment is set up <code>with 10 slots total</code>.
+So make sure to keep an eye to the Flink Web UI to see how many slots are used and how many are available and stop some jobs when are no longer needed to free up resourecs.</p>
+</blockquote>
+<p><strong>Step 4:</strong> At this point let's open up a separate terminal and start the Flink SQL CLI.
+In this new terminal, make sure to run set the <code>result-mode</code>:</p>
+<div class="language-shell codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#9CDCFE;--prism-background-color:#1E1E1E"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-shell codeBlock_bY9V thin-scrollbar" style="color:#9CDCFE;background-color:#1E1E1E"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#9CDCFE"><span class="token plain">SET </span><span class="token string" style="color:rgb(206, 145, 120)">'sql-client.execut [...]
+<p>and then run:</p>
+<div class="language-sql codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#9CDCFE;--prism-background-color:#1E1E1E"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-sql codeBlock_bY9V thin-scrollbar" style="color:#9CDCFE;background-color:#1E1E1E"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#9CDCFE"><span class="token keyword" style="color:rgb(86, 156, 214)">SELECT</span><span class="token plain"> </span><span class= [...]
+<p>to observe the output of the table, as we insert <code>partially</code> records into the it from the different sources.</p>
+<p><strong>Step 5:</strong> Let's insert the records from the <code>recommendations</code> table into the <code>user_rec_wide</code> table.</p>
+<div class="language-sql codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#9CDCFE;--prism-background-color:#1E1E1E"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-sql codeBlock_bY9V thin-scrollbar" style="color:#9CDCFE;background-color:#1E1E1E"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#9CDCFE"><span class="token comment" style="color:rgb(106, 153, 85)">-- Apply recommendation scores</span><span class="token pla [...]
+<p><strong>Output:</strong> Notice, how only the related columns are updated in the <code>user_rec_wide</code> table and the rest of the columns are <code>NULL</code>.</p>
+<div class="language-shell codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#9CDCFE;--prism-background-color:#1E1E1E"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-shell codeBlock_bY9V thin-scrollbar" style="color:#9CDCFE;background-color:#1E1E1E"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#9CDCFE"><span class="token plain">Flink SQL</span><span class="token operator" style="color:rgb(212, 212, 212)">></span> [...]
+<p><strong>Step 5:</strong> Next, let's insert the records from the <code>impressions</code> table into the <code>user_rec_wide</code> table.</p>
+<div class="language-sql codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#9CDCFE;--prism-background-color:#1E1E1E"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-sql codeBlock_bY9V thin-scrollbar" style="color:#9CDCFE;background-color:#1E1E1E"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#9CDCFE"><span class="token comment" style="color:rgb(106, 153, 85)">-- Apply impression counts</span><span class="token plain"> [...]
+<p><strong>Output:</strong> Notice how the <code>impressions</code> records are inserted into the <code>user_rec_wide</code> table and the <code>imp_cnt</code> column is updated.</p>
+<div class="language-shell codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#9CDCFE;--prism-background-color:#1E1E1E"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-shell codeBlock_bY9V thin-scrollbar" style="color:#9CDCFE;background-color:#1E1E1E"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#9CDCFE"><span class="token plain">Flink SQL</span><span class="token operator" style="color:rgb(212, 212, 212)">></span> [...]
+<p><strong>Step 6:</strong> Finally, let's insert the records from the <code>clicks</code> table into the <code>user_rec_wide</code> table.</p>
+<div class="language-sql codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#9CDCFE;--prism-background-color:#1E1E1E"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-sql codeBlock_bY9V thin-scrollbar" style="color:#9CDCFE;background-color:#1E1E1E"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#9CDCFE"><span class="token comment" style="color:rgb(106, 153, 85)">-- Apply click counts</span><span class="token plain"></spa [...]
+<p><strong>Output:</strong> Notice how the <code>clicks</code> records are inserted into the <code>user_rec_wide</code> table and the <code>click_cnt</code> column is updated.</p>
+<div class="language-shell codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#9CDCFE;--prism-background-color:#1E1E1E"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-shell codeBlock_bY9V thin-scrollbar" style="color:#9CDCFE;background-color:#1E1E1E"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#9CDCFE"><span class="token plain">Flink SQL</span><span class="token operator" style="color:rgb(212, 212, 212)">></span> [...]
+<p><strong>Reminder:</strong> ‼️As mentioned before make sure to stop the jobs that are no longer needed to free up resources.</p>
+<p>Now let's switch to <code>batch</code> mode and query the current snapshot of the <code>user_rec_wide</code> table.</p>
+<p>But before that, let's start the <a href="https://alibaba.github.io/fluss-docs/docs/maintenance/tiered-storage/lakehouse-storage/#start-the-datalake-tiering-service" target="_blank" rel="noopener noreferrer">Tiering Service</a> that allows offloading the tables as <code>Lakehouse</code> tables.</p>
+<p><strong>Step 7:</strong> Open a new terminal 💻 in the <code>Coordinator Server</code> and run the following command to start the <code>Tiering Service</code>:</p>
+<div class="language-shell codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#9CDCFE;--prism-background-color:#1E1E1E"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-shell codeBlock_bY9V thin-scrollbar" style="color:#9CDCFE;background-color:#1E1E1E"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#9CDCFE"><span class="token plain">./bin/lakehouse.sh </span><span class="token parameter variable" style="color:rgb(156, 22 [...]
+<p>The configured checkpoint is <code>flink.execution.checkpointing.interval=30s</code> so wait a bit until the first checkpoint is created
+and data gets offloading to the <code>Lakehouse</code> tables.</p>
+<p><strong>Step 8:</strong> Finally let's switch to <code>batch</code> mode and query the current snapshot of the <code>user_rec_wide</code> table.</p>
+<div class="language-shell codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#9CDCFE;--prism-background-color:#1E1E1E"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-shell codeBlock_bY9V thin-scrollbar" style="color:#9CDCFE;background-color:#1E1E1E"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#9CDCFE"><span class="token plain">SET </span><span class="token string" style="color:rgb(206, 145, 120)">'execution.runtime [...]
+<p>🎉 That's it! You have successfully created a unified wide table using partial updates in Fluss.</p>
+<h3 class="anchor anchorWithStickyNavbar_LWe7" id="conclusion">Conclusion<a href="https://fluss.apache.org/blog/partial-updates/#conclusion" class="hash-link" aria-label="Direct link to Conclusion" title="Direct link to Conclusion"></a></h3>
+<p>Partial updates in Fluss enable an alternative approach in how we design streaming data pipelines for enriching or joining data.</p>
+<p>When all your sources share a primary key - otherwise you can mix & match <a href="https://alibaba.github.io/fluss-docs/docs/engine-flink/lookups/#lookup" target="_blank" rel="noopener noreferrer">streaming lookup joins</a> - you can turn the problem on its head: update a unified table incrementally, rather than joining streams on the fly.</p>
+<p>The result is a more scalable, maintainable, and efficient pipeline.
+Engineers can spend less time wrestling with Flink’s state, checkpoints and join mechanics, and more time delivering fresh, integrated data to power real-time analytics and applications.
+With Fluss handling the merge logic, achieving a single, up-to-date view from multiple disparate streams becomes way more elegant. 😁</p>
+<p>And before you go 😊 don’t forget to give Fluss 🌊 some ❤️ via ⭐ on <a href="https://github.com/alibaba/fluss" target="_blank" rel="noopener noreferrer">GitHub</a></p>]]></content:encoded>
+ </item>
+ <item>
+ <title><![CDATA[The Story of Fluss Logo]]></title>
+ <link>https://fluss.apache.org/blog/unveil-fluss-logo/</link>
+ <guid>https://fluss.apache.org/blog/unveil-fluss-logo/</guid>
+ <pubDate>Wed, 28 May 2025 00:00:00 GMT</pubDate>
+ <description><![CDATA[<!--]]></description>
+ <content:encoded><![CDATA[<p><img decoding="async" loading="lazy" src="https://fluss.apache.org/assets/images/colored_logo-570a85568f48c50f3ce9cdcfc57c8670.png" width="1614" height="686" class="img_ev3q"></p>
+<h2 class="anchor anchorWithStickyNavbar_LWe7" id="introducing-the-little-otter">Introducing the Little Otter<a href="https://fluss.apache.org/blog/unveil-fluss-logo/#introducing-the-little-otter" class="hash-link" aria-label="Direct link to Introducing the Little Otter" title="Direct link to Introducing the Little Otter"></a></h2>
+<p>Today is <a href="https://www.otter.org/world-otter-day" target="_blank" rel="noopener noreferrer">World Otter Day</a>, and we are thrilled to introduce the little otter to the Fluss community! 🎉</p>
+<p>Since open-sourced half a year ago, many community members and friends have asked us:
+"When will Fluss get a logo?" After more than a month of careful design work and over 30 iterations, we’re excited to finally unveil the official Fluss logo — a surfing otter! 🦦🌊</p>
+<p>I don't want to interpret the symbolic meaning behind the Logo in a rigid way. Instead, I’d like to share the story behind its design — how we defined the direction and iterated step by step toward the final version. This process involved numerous subjective decisions made by the team. You might prefer one of the discarded versions, or disagree with some of the design choices. However, we want to share the journey with our community, and we hope it can also serve as a reference or ins [...]
+<h2 class="anchor anchorWithStickyNavbar_LWe7" id="logo-symbolism-what-do-we-want-to-convey">Logo symbolism: what do we want to convey?<a href="https://fluss.apache.org/blog/unveil-fluss-logo/#logo-symbolism-what-do-we-want-to-convey" class="hash-link" aria-label="Direct link to Logo symbolism: what do we want to convey?" title="Direct link to Logo symbolism: what do we want to convey?"></a></h2>
+<p><a href="https://github.com/alibaba/fluss" target="_blank" rel="noopener noreferrer">Fluss</a> is an open-source streaming storage system designed for analytical workloads, with the goal of serving as a real-time data layer for Lakehouse architectures. Therefore, <em><strong>fluidity</strong></em> is the first key message we want to convey.</p>
+<p>Secondly, Fluss’s vision is to <strong>"Bring better analytics to data streams, and bring better freshness to data Lakehouses"</strong>. This requires the ability to adapt to multiple data lake formats and support a variety of query engines and compute engines. So, <em><strong>adaptability</strong></em> is the second core idea we want to convey.</p>
+<p>Additionally, as an open-source project planning to be donated to the Apache Software Foundation, building an open, diverse, and collaborative community has always been one of our core goals. In line with this value, we wanted the brand to express <em><strong>friendliness</strong></em>, which ultimately led us to choose animal as the logo design direction.</p>
+<p>We have also considered using abstract graphics for logo design. However, we noticed that many open-source projects that start with abstract logos, eventually introduce animal mascots to convey the friendliness of the community. These mascots not only play an important role in community outreach but also often replace the main logo in many contexts, becoming more representative visual symbols — such as Go’s gopher, Rust’s crab, and Airbyte’s octopus. Animal images are easier to get cl [...]
+<p><img decoding="async" loading="lazy" src="https://fluss.apache.org/assets/images/image1-6acb85f09ad799d93582a37896aabf30.png" width="2768" height="1604" class="img_ev3q"></p>
+<p>Therefore, we made clear the direction in the early stage of Fluss Logo design: use an Animal image to convey our concept of <strong>fluidity</strong>, <strong>adaptability</strong>, and <strong>friendliness</strong>. The project name "Fluss" comes from the German word for "river" (Fluss), and we also hope that this animal has a close relationship with the river. Combined with these characteristics, the first animal that comes to our mind is the <strong>otter</strong>. The otter is an [...]
+<p><img decoding="async" loading="lazy" src="https://fluss.apache.org/assets/images/image2-b9a57e1c35eb09c32fa4fcd07406ceeb.png" width="2310" height="1242" class="img_ev3q"></p>
+<h2 class="anchor anchorWithStickyNavbar_LWe7" id="design-iterations-for-more-than-30-versions">Design iterations for more than 30 versions<a href="https://fluss.apache.org/blog/unveil-fluss-logo/#design-iterations-for-more-than-30-versions" class="hash-link" aria-label="Direct link to Design iterations for more than 30 versions" title="Direct link to Design iterations for more than 30 versions"></a></h2>
+<p>After clarifying the design direction and core values of Fluss Logo, we began to communicate with the design team in depth and launched multiple rounds of iteration. However, in the early versions of the design, we still couldn’t find the right feel — something was missing: the fluidity.</p>
+<p><img decoding="async" loading="lazy" src="https://fluss.apache.org/assets/images/image3-37c9a30c044c5afbc6e35fa21c1793bc.png" width="1930" height="1014" class="img_ev3q"></p>
+<p>Therefore, we used ChatGPT to find inspiration, and tried a variety of prompt words, and this picture with a surfing wave quickly caught our eyes: dynamic, energy, speed, and flow, which is what we want! Although this otter looks like a Jerry rat... our design team quickly got our idea.</p>
+<p><img decoding="async" loading="lazy" src="https://fluss.apache.org/assets/images/image4-c4082ae4730f49472a0414543ab5075a.png" width="298" height="294" class="img_ev3q"></p>
+<p>Based on the core elements of “otter” + “surfing”, we started a new round of design, and we iterated more than 20 versions based on this and finally evolved to the version you see today.</p>
+<p><img decoding="async" loading="lazy" src="https://fluss.apache.org/assets/images/image5-7b6a1c8656ea141b803b8787e89d75df.png" width="2626" height="1204" class="img_ev3q"></p>
+<p>Subsequently, we also made many variations of the logo to adapt to different environments and background colors.</p>
+<p><img decoding="async" loading="lazy" src="https://fluss.apache.org/assets/images/image6-ec1c384b777aef0f617d3fcb08a5e39e.png" width="1900" height="1048" class="img_ev3q"></p>
+<h2 class="anchor anchorWithStickyNavbar_LWe7" id="get-feedback-from-community-users">Get feedback from community users<a href="https://fluss.apache.org/blog/unveil-fluss-logo/#get-feedback-from-community-users" class="hash-link" aria-label="Direct link to Get feedback from community users" title="Direct link to Get feedback from community users"></a></h2>
+<p>Designing a logo is a highly subjective process. But for an open-source project, the goal isn't to please the founding team — it's to resonate with the community. That’s why we've always valued community feedback and used it to guide our iterations.</p>
+<p>Some of the community feedback I loved very much:</p>
+<ul>
+<li>"The Fluss otter seems to be a sibling to Flink's squirrel."</li>
+<li>"I see Paimon in it!"</li>
+<li>"It's soooo cute!"</li>
+</ul>
+<p>Give it some ❤️ via ⭐ on GitHub if you like it as well!
+<a href="https://github.com/alibaba/fluss" target="_blank" rel="noopener noreferrer">https://github.com/alibaba/fluss</a></p>
+<h2 class="anchor anchorWithStickyNavbar_LWe7" id="community-egg">Community Egg<a href="https://fluss.apache.org/blog/unveil-fluss-logo/#community-egg" class="hash-link" aria-label="Direct link to Community Egg" title="Direct link to Community Egg"></a></h2>
+<p>At the time of the Fluss logo release, we also submitted an <a href="https://lists.apache.org/thread/osg23opm9x95xm318160808r984k0wk9" target="_blank" rel="noopener noreferrer">incubation proposal</a> to the Apache Software Foundation, thanks to the strong support from our incubation mentors Yu Li, tison, Jingsong Lee, Becket Qin, and Jean-Baptiste. We're confident that Fluss will soon become one of the Apache projects.</p>
+<p>In parallel, we’ve designed and launched a series of Fluss community gifts, including stickers, t-shirts, and coffee cups. These items will be available at upcoming community events — stay tuned and pick your swags!</p>
+<p><img decoding="async" loading="lazy" src="https://fluss.apache.org/assets/images/image7-246c5eae97745ed3ae9872e84a86b134.png" width="1130" height="633" class="img_ev3q"></p>]]></content:encoded>
+ </item>
+ <item>
+ <title><![CDATA[Announcing Fluss 0.6]]></title>
+ <link>https://fluss.apache.org/blog/releases/0.6/</link>
+ <guid>https://fluss.apache.org/blog/releases/0.6/</guid>
+ <pubDate>Mon, 10 Mar 2025 00:00:00 GMT</pubDate>
+ <description><![CDATA[<!--]]></description>
+ <content:encoded><![CDATA[<p>The Fluss community is pleased to announce the official release of <strong>Fluss 0.6.0</strong>. This version has undergone over
+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="https://fluss.apache.org/assets/images/announce-9ab924e071ec69fe7af8765954f9e966.png" width="1224" height="440" class="img_ev3q"></p>
+<p>This release introduces several exciting features:</p>
+<ul>
+<li><strong>Column Compression</strong>: Reduces storage space by up to <strong>6x</strong> while preserving column pruning performance!</li>
+<li><strong>Merge Engine</strong>: Introduces flexible merge strategies for primary key data, addressing diverse real-time processing needs.</li>
+<li><strong>Prefix Lookup</strong>: Delta Join functionality is now ready on the Fluss side!</li>
+</ul>
+<p>These new features not only significantly enhance the functionality of Fluss but also represent a solid step
+forward in our journey toward building the next-generation analytical stream storage solution.</p>
+<h2 class="anchor anchorWithStickyNavbar_LWe7" id="column-compression">Column Compression<a href="https://fluss.apache.org/blog/releases/0.6/#column-compression" class="hash-link" aria-label="Direct link to Column Compression" title="Direct link to Column Compression"></a></h2>
+<p>Fluss uses the <a href="https://arrow.apache.org/" target="_blank" rel="noopener noreferrer">Apache Arrow</a> columnar format for it's underlying log file storage, fully leveraging Arrow's streaming
+columnar capabilities to achieve highly efficient streaming reads and column pruning. Column pruning in Fluss is performed on the server side,
+with end-to-end zero-copy optimization that allows the required column data to be sent directly to the network without
+loading it into memory from disk. This design not only significantly improves performance but also drastically reduces
+network I/O costs and resource overhead. In previous <a href="https://fluss.apache.org/blog/fluss-intro/#columnar-stream">benchmark tests</a>,
+when 90% of the columns were pruned, Fluss achieved a 10x increase in read throughput, demonstrating its exceptional
+performance in streaming data processing and transmission.</p>
+<p>While column pruning effectively reduces network I/O costs, disk storage costs remain high. To address this,
+we have introduced <strong>column compression</strong> in this version, supporting two highly efficient compression algorithms: <strong>ZSTD</strong> and <strong>LZ4</strong>.
+These algorithms significantly reduce data storage requirements, thereby lowering storage costs substantially.
+Since both compression and decompression are performed on the client side, the amount of data transmitted over the network is reduced,
+further decreasing network I/O costs. Notably, compression is applied independently to each column, ensuring that the original column pruning performance is preserved and that streaming read efficiency remains unaffected.</p>
+<p>To validate the actual effectiveness of this feature, we conducted benchmark tests using a typical business scenario from Alibaba Taobao.
+In the tests, we used datasets of the same scale and Flink jobs with identical resources, writing to Fluss with and without ZSTD compression,
+and compared the write throughput. Subsequently, we read data from the table and tested the read throughput.
+The results showed that column compression not only reduced storage space by approximately 6x but also improved read and write throughput.</p>
+<p><img decoding="async" loading="lazy" alt="Compression Benchmark" src="https://fluss.apache.org/assets/images/compression1-0b666a1467321b28376db725380eda3c.jpg" width="962" height="572" class="img_ev3q"></p>
+<p>However, enabling compression had no noticeable impact on Flink's read/write CPU and memory usage.</p>
+<p><img decoding="async" loading="lazy" alt="Compression Benchmark" src="https://fluss.apache.org/assets/images/compression2-c0feecf4a8fbff819c1ad37ce03ca6e9.jpg" width="1180" height="542" class="img_ev3q"></p>
+<p>The performance of column pruning on compressed data was also tested. The results show that as the number of pruned columns increases,
+a multiple-fold performance improvement is still achieved, maintaining the original column pruning efficiency.</p>
+<p><img decoding="async" loading="lazy" alt="Compression Benchmark" src="https://fluss.apache.org/assets/images/compression3-1f5de9eec6dd66394a793f26395a8f49.jpg" width="1196" height="624" class="img_ev3q"></p>
+<p>Given the significant cost savings and performance improvements achieved by column compression in general use cases,
+ZSTD compression is enabled by default for log tables in Fluss 0.6. Users can disable compression by
+setting the parameter <code>'table.log.arrow.compression.type'='NONE'</code> on the table.</p>
+<h2 class="anchor anchorWithStickyNavbar_LWe7" id="merge-engine">Merge Engine<a href="https://fluss.apache.org/blog/releases/0.6/#merge-engine" class="hash-link" aria-label="Direct link to Merge Engine" title="Direct link to Merge Engine"></a></h2>
+<p>In this version, Fluss introduces a new Merge Engine feature for primary key tables to flexibly support merging strategies for data with the same primary key.
+The default Merge Engine strategy for primary key tables is to retain the latest record for each primary key.
+Users can also choose alternative Merge Engines, including the currently supported <strong>FirstRow Merge Engine</strong> and <strong>Versioned Merge Engine</strong>.
+Support for the <strong>Aggregate Merge Engine</strong> is planned for future releases.</p>
+<h3 class="anchor anchorWithStickyNavbar_LWe7" id="firstrow-merge-engine">FirstRow Merge Engine<a href="https://fluss.apache.org/blog/releases/0.6/#firstrow-merge-engine" class="hash-link" aria-label="Direct link to FirstRow Merge Engine" title="Direct link to FirstRow Merge Engine"></a></h3>
+<p>By setting the table property <code>'table.merge-engine' = 'first_row'</code>, users can retain the first record for each primary key.
+When this configuration is enabled, the primary key table will generate an append-only changelog. This allows downstream
+Flink jobs subscribing to the table to receive an append-only stream, enabling the use of operators that do not support retraction messages,
+such as Window Aggregations and Interval Joins. This feature is commonly used as a replacement for log deduplication in streaming processing,
+effectively reducing costs and system complexity.</p>
+<div class="language-sql codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#9CDCFE;--prism-background-color:#1E1E1E"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-sql codeBlock_bY9V thin-scrollbar" style="color:#9CDCFE;background-color:#1E1E1E"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#9CDCFE"><span class="token comment" style="color:rgb(106, 153, 85)">-- create first_row primary key table</span><span class="to [...]
+<h3 class="anchor anchorWithStickyNavbar_LWe7" id="versioned-merge-engine">Versioned Merge Engine<a href="https://fluss.apache.org/blog/releases/0.6/#versioned-merge-engine" class="hash-link" aria-label="Direct link to Versioned Merge Engine" title="Direct link to Versioned Merge Engine"></a></h3>
+<p>The Versioned Merge Engine supports data updates based on version numbers (or event timestamps). It ensures that only the record
+with the highest version number (or event timestamp) for each primary key is retained. This mechanism is particularly useful for
+deduplicating or merging out-of-order data while guaranteeing eventual consistency with the upstream data source.
+In Flink streaming processing, this feature can be used as a replacement for <code>Rank</code> or <code>Deduplication</code> operations, simplifying workflows and reducing costs effectively.</p>
+<div class="language-sql codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#9CDCFE;--prism-background-color:#1E1E1E"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-sql codeBlock_bY9V thin-scrollbar" style="color:#9CDCFE;background-color:#1E1E1E"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#9CDCFE"><span class="token comment" style="color:rgb(106, 153, 85)">-- create a versioned primary key table, `ts` as the versio [...]
+<h2 class="anchor anchorWithStickyNavbar_LWe7" id="prefix-lookup-for-delta-join">Prefix Lookup for Delta Join<a href="https://fluss.apache.org/blog/releases/0.6/#prefix-lookup-for-delta-join" class="hash-link" aria-label="Direct link to Prefix Lookup for Delta Join" title="Direct link to Prefix Lookup for Delta Join"></a></h2>
+<p>In the scenario of building wide tables with Flink, optimizing Stream-Stream Join using Delta Join is one of the primary use cases for Fluss.
+We have also contributed this functionality to version 0.6. Delta Join can be simply understood as 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 join 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).
+Delta Join addresses challenges such as high cost, unstable job, checkpoint timeout, slow restart recovery, etc., in the traditional Stream-Stream Join.</p>
+<p><img decoding="async" loading="lazy" alt="Delta Join" src="https://fluss.apache.org/assets/images/delta-join-ad3cf73fc7f3f01e306ad02fd765d26d.jpg" width="2024" height="884" class="img_ev3q"></p>
+<p>Overall, Delta Join relies on three core functionalities:</p>
+<ul>
+<li><strong>CDC Stream Read for Source Table</strong>: The foundational capability of Fluss.</li>
+<li><strong>Lookup on Join Keys for Source Table</strong>: Introduced in Fluss 0.6 with Prefix Lookup support.</li>
+<li><strong>Delta Join Operator in Flink SQL</strong>: Proposed in <a href="https://cwiki.apache.org/confluence/display/FLINK/FLIP-486%3A+Introduce+A+New+DeltaJoin" target="_blank" rel="noopener noreferrer">FLIP-486</a>, planned for Flink 2.1.</li>
+</ul>
+<p>Once FLIP-486 is completed, users will be able to achieve Delta Join using the following SQL in conjunction with Fluss's Prefix Lookup functionality:</p>
+<div class="language-sql codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#9CDCFE;--prism-background-color:#1E1E1E"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-sql codeBlock_bY9V thin-scrollbar" style="color:#9CDCFE;background-color:#1E1E1E"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#9CDCFE"><span class="token keyword" style="color:rgb(86, 156, 214)">CREATE</span><span class="token plain"> </span><span class= [...]
+<p>Flink performs lookups on Fluss tables using the Join Key, which serves as the Bucket Key for the Fluss table.
+This allows it to leverage the prefix index of the primary key in the Fluss table, enabling highly efficient lookup queries.
+This feature in Fluss is referred to as Prefix Lookup. Currently, Prefix Lookup can also be used to perform one-to-many lookup queries.
+For more details, please refer to the <a href="https://fluss.apache.org/docs/engine-flink/lookups/#prefix-lookup">Prefix Lookup</a> documentation.</p>
+<h2 class="anchor anchorWithStickyNavbar_LWe7" id="stability--performance-improvements">Stability & Performance Improvements<a href="https://fluss.apache.org/blog/releases/0.6/#stability--performance-improvements" class="hash-link" aria-label="Direct link to Stability & Performance Improvements" title="Direct link to Stability & Performance Improvements"></a></h2>
+<p>In this version, we have focused on enhancing the stability and performance of the system, resolving over 50 issues and improvements,
+and conducting in-depth optimizations on core modules. For example:</p>
+<ul>
+<li>Server-side Optimization : By introducing a delayed response mechanism, CPU consumption in low-traffic scenarios has been significantly reduced, thereby improving resource utilization efficiency.</li>
+<li>Client-side Optimization : A unified memory management mechanism has been implemented to effectively prevent Out-of-Memory (OOM) issues in high-traffic scenarios while reducing the impact of garbage collection (GC) on system performance.</li>
+</ul>
+<p>These improvements have significantly enhanced Fluss's reliability and performance in high-concurrency, large-data-volume scenarios, enabling it to handle analytical stream storage workload more efficiently.</p>
+<h2 class="anchor anchorWithStickyNavbar_LWe7" id="lakehouse-storage">Lakehouse Storage<a href="https://fluss.apache.org/blog/releases/0.6/#lakehouse-storage" class="hash-link" aria-label="Direct link to Lakehouse Storage" title="Direct link to Lakehouse Storage"></a></h2>
+<p>In previous versions, if a table in Fluss needed to enable the Lakehouse storage capability, it had to be enabled when table is created.
+Otherwise, enabling this feature later would require deleting and recreating the table. This limitation arose because enabling Lakehouse storage changes the key encoding format and bucket sharding strategy, making existing tables incompatible with the new configuration.</p>
+<p>In this version, we resolve this by detecting the cluster's default data lake format and adopting its key encoding and bucketing strategy,
+allowing Lakehouse storage to be enabled dynamically after table creation. This eliminates the need for table recreation, improving usability.
+Additionally, Paimon dependency is upgraded to version 1.0.1 in this release.</p>
+<h2 class="anchor anchorWithStickyNavbar_LWe7" id="flink-integration">Flink Integration<a href="https://fluss.apache.org/blog/releases/0.6/#flink-integration" class="hash-link" aria-label="Direct link to Flink Integration" title="Direct link to Flink Integration"></a></h2>
+<p>This version introduces the following enhancements to the Flink connector:</p>
+<ol>
+<li><strong>Sink Support for Ignoring Retractions:</strong>
+Both Primary Key Tables and Log Tables now support the <code>'sink.ignore-delete'</code> parameter in their Sink implementations. This enables better compatibility with scenarios involving retraction messages, meeting the demands of more complex streaming data processing.</li>
+<li><strong>Enhanced Partition Table Operations:</strong>
+Partitioned tables now support <code>ALTER TABLE ADD/DROP PARTITION</code> and <code>SHOW PARTITIONS</code> operations, further improving the flexibility and usability of partition management.</li>
+<li><strong>Sink Interface Upgrade:</strong>
+The <code>SinkFunction</code> has been upgraded to the <code>SinkV2</code> interface, laying the groundwork for full compatibility with Flink 2.0 in the next version. This ensures the system's scalability and compatibility in future releases.</li>
+</ol>
+<h2 class="anchor anchorWithStickyNavbar_LWe7" id="upgrade-notes">Upgrade Notes<a href="https://fluss.apache.org/blog/releases/0.6/#upgrade-notes" class="hash-link" aria-label="Direct link to Upgrade Notes" title="Direct link to Upgrade Notes"></a></h2>
+<p>The Fluss community try to ensure compatibility during upgrades. However, upgrading from Fluss 0.5 to 0.6 is an incompatible upgrade.
+Starting with version 0.6, we will officially provide backward compatibility to ensure smoother and more reliable upgrades in future releases.
+Therefore, version 0.6 is the recommended version for adoption and ecosystem integration.</p>
+<h2 class="anchor anchorWithStickyNavbar_LWe7" id="future-plan">Future Plan<a href="https://fluss.apache.org/blog/releases/0.6/#future-plan" class="hash-link" aria-label="Direct link to Future Plan" title="Direct link to Future Plan"></a></h2>
+<p>In the next version, we will focus on the development of the following core features:</p>
+<ol>
+<li>
+<p><strong>New Lake-Stream Integrated Architecture:</strong>
+A completely new architecture designed for large-scale production environments, featuring plug-in support for mainstream lake formats such as Iceberg and Hudi. This addresses key pain points in Tiering Service performance, scalability, and operational efficiency, providing a more reliable Lakehouse integrated solution for enterprise use cases.</p>
+</li>
+<li>
+<p><strong>Authentication and Authorization:</strong>
+Introducing plugin-based authentication and fine-grained access control to meet the stringent data security requirements of enterprises.</p>
+</li>
+<li>
+<p><strong>Kafka Compatibility:</strong>
+Compatibility with the Kafka network protocol, enabling seamless integration with the Kafka ecosystem.</p>
+</li>
+</ol>
+<p>For more details about the next release roadmap, please visit the community <a href="https://github.com/alibaba/fluss/discussions/556" target="_blank" rel="noopener noreferrer">discussion page</a>. Your suggestions and contributions are highly welcomed!</p>
+<p>Fluss is under active development. Be sure to stay updated on the project, give it a try and if you like it, don’t forget to give it some ❤️ via ⭐ on <a href="https://github.com/alibaba/fluss" target="_blank" rel="noopener noreferrer">GitHub</a></p>
+<h2 class="anchor anchorWithStickyNavbar_LWe7" id="list-of-contributors">List of Contributors<a href="https://fluss.apache.org/blog/releases/0.6/#list-of-contributors" class="hash-link" aria-label="Direct link to List of Contributors" title="Direct link to List of Contributors"></a></h2>
+<p>The Fluss community would like to express gratitude to all the 45 contributors who made this release possible:</p>
+<p>Benchao Li, ForwardXu, Gang Yang, Georgios Andrianakis, Giannis Polyzos, Hongshun Wang, Jark Wu, Kerwin, Leonard Xu, LiJingwei, Liu Xiao, MehulBatra, Michael Koepf, Nicholas Jiang, Ron, RunningDB, Sagar Sumit, SeungMin, Shuo Cheng, Stan, SteNicholas, Tyrantlucifer, Vipamp, WangS-C, WenjunMin, Wenston Xin, Xiaojian Sun, Yang Guo, Yubin Li, Yuepeng Pan, Zmm, benjobs, gongzhongqiang, gyang94, jon-qj, luoyuxia, moses, psxjoy, wangwj, wudi, xiaozhou, yunhong, yuxia Luo, 码界探索, 道君</p>]]></co [...]
+ <category>releases</category>
+ </item>
+ <item>
+ <title><![CDATA[Towards A Unified Streaming & Lakehouse Architecture]]></title>
+ <link>https://fluss.apache.org/blog/unified-streaming-lakehouse/</link>
+ <guid>https://fluss.apache.org/blog/unified-streaming-lakehouse/</guid>
+ <pubDate>Tue, 28 Jan 2025 00:00:00 GMT</pubDate>
+ <description><![CDATA[<!--]]></description>
+ <content:encoded><![CDATA[<p>The unification of Lakehouse and streaming storage represents a major trend in the future development of modern data lakes and streaming storage systems. Designed specifically for real-time analytics, Fluss has embraced a unified Streaming and Lakehouse architecture from its inception, enabling seamless integration into existing Lakehouse architectures.</p>
+<p>Fluss is designed to address the demands of real-time analytics with the following key capabilities:</p>
+<ul>
+<li><strong>Real-Time Stream Reading and Writing:</strong> Supports millisecond-level end-to-end latency.</li>
+<li><strong>Columnar Stream:</strong> Optimizes storage and query efficiency.</li>
+<li><strong>Streaming Updates:</strong> Enables low-latency updates to data streams.</li>
+<li><strong>Changelog Generation:</strong> Supports changelog generation and consumption.</li>
+<li><strong>Real-Time Lookup Queries:</strong> Facilitates instant lookup queries on primary keys.</li>
+<li><strong>Streaming & Lakehouse Unification:</strong> Seamlessly integrates streaming and lakehouse storage for unified data processing.</li>
+</ul>
+<h3 class="anchor anchorWithStickyNavbar_LWe7" id="fluss-unified-streaming--lakehouse-architecture">Fluss Unified Streaming & Lakehouse Architecture<a href="https://fluss.apache.org/blog/unified-streaming-lakehouse/#fluss-unified-streaming--lakehouse-architecture" class="hash-link" aria-label="Direct link to Fluss Unified Streaming & Lakehouse Architecture" title="Direct link to Fluss Unified Streaming & Lakehouse Architecture"></a></h3>
+<p><img decoding="async" loading="lazy" alt="Unification Solutions" src="https://fluss.apache.org/assets/images/img1-163f1412a1ed7b661686302df5bf9edb.png" width="1866" height="635" class="img_ev3q">
+The Fluss architecture is designed to provide millisecond-level end-to-end latency, ensuring high-performance real-time data writing and reading. A core component of this architecture is the <strong>Tiering Service</strong>, which continuously offloads data in Fluss into a standard lakehouse format, such as <code>Apache Paimon</code> or <code>Apache Iceberg</code>. This tiering ensures that external query engines can directly analyze data in the Lakehouse format, enabling efficient batch [...]
+In this architecture:</p>
+<ul>
+<li><strong>Latest Data in Fluss:</strong> Fluss stores the most recent, high-fidelity data for real-time analytics.</li>
+<li><strong>Historical Data in Paimon:</strong> Older data is compacted and stored in Apache Paimon for large-scale historical analysis.</li>
+</ul>
+<p>By leveraging Apache Flink, the integration of Fluss and Paimon supports Union Reads, which combine real-time data in Fluss with historical data in Paimon. This enables analytical queries with second-level freshness, allowing businesses to benefit from up-to-date insights while maintaining access to extensive historical datasets.</p>
+<p>The Streaming/Lakehouse unification design of Fluss provides:</p>
+<ul>
+<li><strong>Unified Architecture:</strong> Simplifies the Lakehouse ecosystem by combining the strengths of streaming and Lakehouse storage.</li>
+<li><strong>Enhanced Real-Time Capabilities:</strong> Millisecond-level latency ensures data is always fresh for critical use cases.</li>
+<li><strong>Seamless Compatibility:</strong> Native support for standard lakehouse formats ensures interoperability with existing analytics engines.</li>
+<li><strong>Optimized Data Management:</strong> Combines real-time and historical data seamlessly for comprehensive analytics workflows.</li>
+</ul>
+<p>Fluss is <strong>a next-generation approach to streaming storage, purpose-built to complement Lakehouse architectures</strong> and drive the adoption of a streaming and Lakehouse unification across industries.</p>
+<h3 class="anchor anchorWithStickyNavbar_LWe7" id="unified-metadata">Unified metadata<a href="https://fluss.apache.org/blog/unified-streaming-lakehouse/#unified-metadata" class="hash-link" aria-label="Direct link to Unified metadata" title="Direct link to Unified metadata"></a></h3>
+<p><img decoding="async" loading="lazy" alt="Unification Solutions" src="https://fluss.apache.org/assets/images/img2-86b0eb7b0f26884f8ead16dc4a8db648.png" width="1842" height="732" class="img_ev3q"></p>
+<p>In traditional architectures, streaming storage systems like Kafka and Lakehouse storage solutions like Apache Paimon operated as distinct entities, each maintaining its own metadata. For computing engines such as Apache Flink, this separation presented two significant challenges:</p>
+<ol>
+<li><strong>Dual Catalogs:</strong> Users were required to create and manage two separate catalogs—one for streaming storage and another for lake storage.</li>
+<li><strong>Manual Switching:</strong> Accessing data involved manually switching between catalogs to determine whether to query stream storage or lake storage, resulting in operational complexity and inefficiencies.</li>
+</ol>
+<h3 class="anchor anchorWithStickyNavbar_LWe7" id="unified-access-in-fluss">Unified Access in Fluss<a href="https://fluss.apache.org/blog/unified-streaming-lakehouse/#unified-access-in-fluss" class="hash-link" aria-label="Direct link to Unified Access in Fluss" title="Direct link to Unified Access in Fluss"></a></h3>
+<p>In the Fluss, although Fluss and Paimon still maintain independent metadata, they expose a unified catalog and a single table abstraction to the computing engine, such as Apache Flink. This unified approach offers several key advantages:</p>
+<ul>
+<li><strong>Simplified Data Access:</strong> Users can seamlessly access both Lakehouse storage (Paimon) and streaming storage (Fluss) through a single catalog, eliminating the need to manage or switch between separate catalogs.</li>
+<li><strong>Integrated Querying:</strong> The unified table abstraction allows direct access to real-time data in Fluss and historical data in Paimon. For scenarios requiring both, users can leverage <code>Union Reads</code>, combining data from Fluss and Paimon to enable comprehensive analytics with second-level data freshness.</li>
+<li><strong>Operational Efficiency:</strong> By presenting a cohesive interface, the architecture reduces operational complexity, making it easier for users to work with real-time and historical data within a single workflow.</li>
+</ul>
+<p>This unified approach streamlines the interaction between computing engines and storage layers, enhancing both usability and productivity while supporting the high-performance demands of modern analytics workflows.</p>
+<h3 class="anchor anchorWithStickyNavbar_LWe7" id="alignment-of-data-distribution">Alignment of Data Distribution<a href="https://fluss.apache.org/blog/unified-streaming-lakehouse/#alignment-of-data-distribution" class="hash-link" aria-label="Direct link to Alignment of Data Distribution" title="Direct link to Alignment of Data Distribution"></a></h3>
+<p><img decoding="async" loading="lazy" alt="Unification Solutions" src="https://fluss.apache.org/assets/images/img3-d0ea956fb83807118c4d522bdd7b30f4.png" width="1777" height="856" class="img_ev3q"></p>
+<p>In the Fluss, the data distribution between Fluss and Lakehouse storage (e.g., Apache Paimon) is strictly aligned. Fluss supports partitioned tables and buckets, and its bucketing algorithm is fully consistent with Paimon’s. This ensures that a given piece of data is always allocated to the same bucket in both systems, creating a one-to-one correspondence between Fluss buckets and Paimon buckets.
+This strong consistency in data distribution provides two significant benefits:</p>
+<h4 class="anchor anchorWithStickyNavbar_LWe7" id="1-elimination-of-shuffle-overhead-during-tiering">1. Elimination of Shuffle Overhead During Tiering<a href="https://fluss.apache.org/blog/unified-streaming-lakehouse/#1-elimination-of-shuffle-overhead-during-tiering" class="hash-link" aria-label="Direct link to 1. Elimination of Shuffle Overhead During Tiering" title="Direct link to 1. Elimination of Shuffle Overhead During Tiering"></a></h4>
+<p>When tiering data from Fluss into Paimon format:</p>
+<ul>
+<li>A Fluss bucket (e.g., bucket1) can be tiered directly into the corresponding Paimon bucket (bucket1).</li>
+<li>There is no need to read data from a Fluss bucket, calculate which Paimon bucket each piece of data belongs to, and then write it to the appropriate Paimon bucket.</li>
+</ul>
+<p>By bypassing this intermediate redistribution step, the architecture avoids costly shuffle overhead, significantly improving compaction efficiency.</p>
+<h4 class="anchor anchorWithStickyNavbar_LWe7" id="2-prevention-of-data-inconsistencies">2. Prevention of Data Inconsistencies<a href="https://fluss.apache.org/blog/unified-streaming-lakehouse/#2-prevention-of-data-inconsistencies" class="hash-link" aria-label="Direct link to 2. Prevention of Data Inconsistencies" title="Direct link to 2. Prevention of Data Inconsistencies"></a></h4>
+<p>Data consistency is maintained through the use of an identical bucketing algorithm in both Fluss and Paimon. This algorithm calculates the bucket assignment for each piece of data as follows:</p>
+<blockquote>
+<p>bucket_id = hash(row) % bucket_num</p>
+</blockquote>
+<p>By employing the same hash function and algorithm, Fluss and Paimon ensure consistent bucket assignment. If differing algorithms were used, inconsistencies would arise. For example:</p>
+<ul>
+<li>For a primary key table, a data row a might be assigned to bucket1 in Fluss but to bucket2 in Paimon.</li>
+<li>During tiering, if rows were mistakenly placed in bucket1 in Paimon (per Fluss’s assignment), users would fail to locate the data in Paimon due to the mismatch.</li>
+</ul>
+<p>By maintaining strong alignment in data distribution, the architecture eliminates this risk, ensuring data consistency across Fluss and Paimon while simplifying compaction workflows. This alignment underscores the robustness and efficiency of the Fluss unification design.</p>
+<h3 class="anchor anchorWithStickyNavbar_LWe7" id="streaming-reading-more-efficient-data-tracing">Streaming Reading: More Efficient Data Tracing<a href="https://fluss.apache.org/blog/unified-streaming-lakehouse/#streaming-reading-more-efficient-data-tracing" class="hash-link" aria-label="Direct link to Streaming Reading: More Efficient Data Tracing" title="Direct link to Streaming Reading: More Efficient Data Tracing"></a></h3>
+<p>In the Fluss, historical data resides in Lakehouse storage, while real-time data is maintained in Fluss. During streaming reads, this architecture enables a seamless combination of historical and real-time data access:</p>
+<ul>
+<li><strong>Historical Data Access:</strong> Fluss retrieves historical data directly from the Lakehouse storage, leveraging its inherent advantages, such as:<!-- -->
+<ul>
+<li><strong>Efficient Filter Pushdown:</strong> Enables query engines to apply filtering conditions at the storage layer, reducing the amount of data read and improving performance.</li>
+<li><strong>Column Pruning:</strong> Allows retrieval of only the necessary columns, optimizing data transfer and query efficiency.</li>
+<li><strong>High Compression Ratios:</strong> Minimizes storage overhead while maintaining fast retrieval speeds.</li>
+</ul>
+</li>
+<li><strong>Real-Time Data Access:</strong> Fluss concurrently reads the latest real-time data from its own storage, ensuring up-to-the-millisecond freshness.</li>
+</ul>
+<p>By combining the strengths of Lakehouse storage for efficient historical data retrieval and Fluss for real-time streaming data, this architecture delivers a highly performant and scalable solution for streaming read scenarios. This integration ensures that users benefit from low-latency data freshness and optimized query performance across both historical and real-time datasets.</p>
+<h3 class="anchor anchorWithStickyNavbar_LWe7" id="batch-reading-data-freshness-in-seconds">Batch Reading: Data Freshness in Seconds<a href="https://fluss.apache.org/blog/unified-streaming-lakehouse/#batch-reading-data-freshness-in-seconds" class="hash-link" aria-label="Direct link to Batch Reading: Data Freshness in Seconds" title="Direct link to Batch Reading: Data Freshness in Seconds"></a></h3>
+<p><img decoding="async" loading="lazy" alt="Unification Solutions" src="https://fluss.apache.org/assets/images/img4-06aab50ae6bb5a5df5cc0e2658815c1f.png" width="1770" height="747" class="img_ev3q"></p>
+<p>Historical data is stored in the Lakehouse, and real-time data is stored in Fluss. In batch reading scenarios, computing engines (such as Flink) can perform union reading of data in Fluss and lake storage to achieve analysis of data freshness in seconds.</p>
+<h3 class="anchor anchorWithStickyNavbar_LWe7" id="apache-flink-and-fluss">Apache Flink and Fluss<a href="https://fluss.apache.org/blog/unified-streaming-lakehouse/#apache-flink-and-fluss" class="hash-link" aria-label="Direct link to Apache Flink and Fluss" title="Direct link to Apache Flink and Fluss"></a></h3>
+<p><img decoding="async" loading="lazy" alt="Unification Solutions" src="https://fluss.apache.org/assets/images/img5-36f56d95c22f50252c6a5caedbfed1d4.png" width="1761" height="730" class="img_ev3q">
+Fluss exposes a unified API to Flink users, allowing them to choose whether to use union reads or read-only reads on the Lakehouse, using the following SQL:</p>
+<div class="language-sql codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#9CDCFE;--prism-background-color:#1E1E1E"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-sql codeBlock_bY9V thin-scrollbar" style="color:#9CDCFE;background-color:#1E1E1E"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#9CDCFE"><span class="token keyword" style="color:rgb(86, 156, 214)">SELECT</span><span class="token plain"> </span><span class= [...]
+<p>This reads the complete data of the orders table and Flink will union read the data in Fluss and the Lakehouse.
+If the user only needs to read data on the data lake, you can add the <code>$lake</code> suffix after the table to be read. The SQL is as follows</p>
+<div class="language-sql codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#9CDCFE;--prism-background-color:#1E1E1E"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-sql codeBlock_bY9V thin-scrollbar" style="color:#9CDCFE;background-color:#1E1E1E"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#9CDCFE"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#9CDCFE" [...]
+<p>For scenarios where data on a data lake is read-only, Fluss inherits all the optimizations and capabilities of the lake format as a Flink source, such as runtime filters, system table queries, and time travel.</p>
+<h2 class="anchor anchorWithStickyNavbar_LWe7" id="benefits-of-the-unified-architecture">Benefits Of The Unified Architecture<a href="https://fluss.apache.org/blog/unified-streaming-lakehouse/#benefits-of-the-unified-architecture" class="hash-link" aria-label="Direct link to Benefits Of The Unified Architecture" title="Direct link to Benefits Of The Unified Architecture"></a></h2>
+<p>Next, using Apache Paimon as an example, we will illustrate the advantages of using Fluss to build a unified architecture. We will highlight how Fluss enhances the capabilities of Paimon, creating a unified solution that combines the strengths of both systems for efficient real-time and historical data processing.</p>
+<h3 class="anchor anchorWithStickyNavbar_LWe7" id="second-level-timeliness">Second-level Timeliness<a href="https://fluss.apache.org/blog/unified-streaming-lakehouse/#second-level-timeliness" class="hash-link" aria-label="Direct link to Second-level Timeliness" title="Direct link to Second-level Timeliness"></a></h3>
+<p>In Apache Paimon, data visibility is traditionally determined by the Flink checkpoint interval, which typically operates at one minute-level granularity. However, by integrating Fluss with Paimon to build unfiied architecture, this dependency is eliminated.</p>
+<p>With this unification, data becomes visible immediately upon entering Fluss, significantly improving data timeliness to second-level latency. This enhancement ensures that real-time insights can be derived more quickly, meeting the demands of time-sensitive applications while maintaining seamless access to both historical and real-time data.</p>
+<h3 class="anchor anchorWithStickyNavbar_LWe7" id="consistent-data-freshness-across-all-layers">Consistent Data Freshness Across All Layers<a href="https://fluss.apache.org/blog/unified-streaming-lakehouse/#consistent-data-freshness-across-all-layers" class="hash-link" aria-label="Direct link to Consistent Data Freshness Across All Layers" title="Direct link to Consistent Data Freshness Across All Layers"></a></h3>
+<p><img decoding="async" loading="lazy" alt="Unification Solutions" src="https://fluss.apache.org/assets/images/img6-5fdec641b3032d1c0f236cf990d914da.png" width="1570" height="782" class="img_ev3q">
+In the process of building a data warehouse, it is common to organize and manage data by layering, such as Bronze, Silver and Gold following the medallion architecture. As data flows through these layers, maintaining data freshness becomes a critical consideration.</p>
+<p>When Paimon is used as the sole storage solution for each layer, data visibility depends on the Flink checkpoint interval. This introduces cumulative delays:</p>
+<ul>
+<li>The changelog for a given layer becomes visible only after the completion of a Flink checkpoint.</li>
+<li>As this changelog propagates to subsequent layers, the data freshness delay increases with each checkpoint interval.</li>
+</ul>
+<p>For example, with a Flink checkpoint interval of 1 minute:</p>
+<ul>
+<li>The Bronze layer experiences 1-minute delay.</li>
+<li>The Silver layer adds another 1-minute delay, totaling 2 minutes.</li>
+<li>The Gold layer adds yet another 1-minute delay, resulting in a cumulative 3-minute delay.</li>
+</ul>
+<p>With Fluss and Paimon though we get:</p>
+<ul>
+<li><strong>Immediate Data Visibility:</strong> Data in Fluss becomes visible immediately upon ingestion, without waiting for a Flink checkpoint to complete. The changelog is instantly transferred to the next layer.</li>
+<li><strong>Consistent Data Freshness:</strong> The data freshness across all layers is consistent and measured in seconds, eliminating cumulative delays.</li>
+</ul>
+<p>Additionally, if the Fluss Tiering Service is configured with a tiering cycle of 1 minute, the data delay for Paimon storage at each layer is limited to 1 minute, regardless of the number of layers. This ensures:</p>
+<ul>
+<li><strong>Real-Time Data Processing:</strong> Layers can propagate and process data with minimal delay.</li>
+<li><strong>Optimized Streaming & Lakehouse Unification:</strong> The architecture balances the strengths of real-time and batch-oriented storage.</li>
+</ul>
+<p>This integration significantly improves the performance and usability of layered data warehouses, enabling faster insights and better responsiveness to real-time demands.</p>
+<h3 class="anchor anchorWithStickyNavbar_LWe7" id="more-efficient-and-higher-throughput-changelog-generation">More efficient and higher throughput changelog generation<a href="https://fluss.apache.org/blog/unified-streaming-lakehouse/#more-efficient-and-higher-throughput-changelog-generation" class="hash-link" aria-label="Direct link to More efficient and higher throughput changelog generation" title="Direct link to More efficient and higher throughput changelog generation"></a></h3>
+<p>In Apache Paimon, there are currently two commonly used methods for generating changelogs (excluding the Input Producer, which requires more stringent data source requirements and is not considered here):</p>
+<h4 class="anchor anchorWithStickyNavbar_LWe7" id="lookup-changelog-producer">Lookup Changelog Producer<a href="https://fluss.apache.org/blog/unified-streaming-lakehouse/#lookup-changelog-producer" class="hash-link" aria-label="Direct link to Lookup Changelog Producer" title="Direct link to Lookup Changelog Producer"></a></h4>
+<ul>
+<li><strong>Advantages:</strong> Offers high timeliness for generating changelogs.</li>
+<li><strong>Challenges:</strong> Consumes significant computational resources, leading to higher operational costs.</li>
+</ul>
+<h4 class="anchor anchorWithStickyNavbar_LWe7" id="full-compaction-producer">Full Compaction Producer:<a href="https://fluss.apache.org/blog/unified-streaming-lakehouse/#full-compaction-producer" class="hash-link" aria-label="Direct link to Full Compaction Producer:" title="Direct link to Full Compaction Producer:"></a></h4>
+<ul>
+<li><strong>Advantages:</strong> Does not require additional resource consumption, as changelogs are generated during the Full Compaction process.</li>
+<li><strong>Challenges:</strong> Suffers from poor timeliness, as changelog generation is delayed until a Full Compaction is triggered, which typically occurs after several checkpoints.</li>
+</ul>
+<h4 class="anchor anchorWithStickyNavbar_LWe7" id="fluss-and-paimon-optimizing-changelog-generation">Fluss and Paimon: Optimizing Changelog Generation<a href="https://fluss.apache.org/blog/unified-streaming-lakehouse/#fluss-and-paimon-optimizing-changelog-generation" class="hash-link" aria-label="Direct link to Fluss and Paimon: Optimizing Changelog Generation" title="Direct link to Fluss and Paimon: Optimizing Changelog Generation"></a></h4>
+<p>The Fluss and Paimon architecture strikes a balance between timeliness and performance in changelog generation:</p>
+<ul>
+<li><strong>Changelog Timeliness:</strong> Fluss generates changelogs in seconds, ensuring near real-time visibility of data changes.</li>
+<li><strong>Efficient Conversion:</strong> The Fluss Tiering Service efficiently writes Fluss changelogs directly into the Paimon changelog format. This conversion process is highly optimized, avoiding resource-intensive operations such as lookups. Instead, it relies on direct read-and-write operations, significantly reducing overhead.</li>
+</ul>
+<h4 class="anchor anchorWithStickyNavbar_LWe7" id="key-benefits-of-fluss-and-paimon-changelog-generation">Key Benefits of Fluss and Paimon Changelog Generation<a href="https://fluss.apache.org/blog/unified-streaming-lakehouse/#key-benefits-of-fluss-and-paimon-changelog-generation" class="hash-link" aria-label="Direct link to Key Benefits of Fluss and Paimon Changelog Generation" title="Direct link to Key Benefits of Fluss and Paimon Changelog Generation"></a></h4>
+<ol>
+<li><strong>Improved Timeliness:</strong> Near real-time changelog generation ensures data freshness and faster insights.</li>
+<li><strong>Resource Efficiency:</strong> By eliminating the need for computationally expensive operations, the architecture reduces resource consumption while maintaining high performance.</li>
+<li><strong>Seamless Integration:</strong> The direct compatibility between Fluss changelogs and Paimon changelog formats simplifies the process, enhancing system efficiency and reducing operational complexity.</li>
+</ol>
+<p>This architecture provides an elegant solution for use cases that demand both low-latency data updates and optimized resource utilization, making it a robust choice for modern data processing needs.</p>
+<h3 class="anchor anchorWithStickyNavbar_LWe7" id="enabling-multi-writer-support-for-paimon-partial-updates">Enabling Multi-Writer Support for Paimon Partial Updates<a href="https://fluss.apache.org/blog/unified-streaming-lakehouse/#enabling-multi-writer-support-for-paimon-partial-updates" class="hash-link" aria-label="Direct link to Enabling Multi-Writer Support for Paimon Partial Updates" title="Direct link to Enabling Multi-Writer Support for Paimon Partial Updates"></a></h3>
+<p>Partial updates are a critical feature in Apache Paimon, particularly for managing large, wide tables. However, in the current Paimon architecture, performing partial updates on wide tables presents significant challenges:</p>
+<ul>
+<li><strong>Single Writer Limitation:</strong> To ensure consistency, all partial updates to a table must be consolidated into a single SQL job. This requires using a UNION statement to combine all partial update operations into a single pipeline, ensuring only one writer is responsible for updating the table.</li>
+<li><strong>Operational Complexity:</strong> Consolidating all updates into one job makes it difficult to manage and tune individual update operations, leading to challenges in scalability and flexibility.</li>
+</ul>
+<p>With Fluss and Paimon integration these limitations are eliminated</p>
+<p><img decoding="async" loading="lazy" alt="Unification Solutions" src="https://fluss.apache.org/assets/images/img7-8b8e86a6e036ca0f37b6d53f8fc5ae77.png" width="1833" height="783" class="img_ev3q"></p>
+<ul>
+<li><strong>Intermediate Synchronization via Fluss:</strong> All updates pass through Fluss, which serves as an intermediary layer to synchronize changes with Paimon.</li>
+<li><strong>Support for Concurrent Updates:</strong> Fluss enables concurrent updates from multiple SQL jobs, removing the need to consolidate updates into a single job.</li>
+<li><strong>Fine-Grained Job Management:</strong> With the ability to execute multiple independent SQL jobs for updating any number of columns in a wide table, users can perform job-level tuning and management, improving operational efficiency and flexibility.</li>
+</ul>
+<p>This enables organizations to unlock several key advantages:</p>
+<ul>
+<li><strong>High Real-Time Performance:</strong> Lakehouse storage achieves second-level data freshness, meeting the demands of real-time data applications.</li>
+<li><strong>Unified Streaming and Lakehouse Processing:</strong> Data is written once into the architecture and can seamlessly support both batch and streaming use cases, reducing duplication of effort.</li>
+<li><strong>Lower Operational Costs:</strong> Simplified maintenance and reduced complexity of partial updates, lower storage costs by minimizing data duplication and reduced computational costs by eliminating redundant processing pipelines.</li>
+</ul>
+<p>The Fluss and Paimon architecture offers a robust solution for managing partial updates in wide tables while delivering significant improvements in performance, scalability, and operational efficiency.</p>
+<p>All the above highlight the power of a unified streaming and Lakehouse architecture in modern data systems, ensuring real-time capabilities with streamlined workflows.</p>
+<h2 class="anchor anchorWithStickyNavbar_LWe7" id="future-plans">Future plans<a href="https://fluss.apache.org/blog/unified-streaming-lakehouse/#future-plans" class="hash-link" aria-label="Direct link to Future plans" title="Direct link to Future plans"></a></h2>
+<p>The Fluss community is actively working to enhance the streaming and Lakehouse unification capabilities, focusing on the following key areas.</p>
+<h3 class="anchor anchorWithStickyNavbar_LWe7" id="expanding-union-read-ecosystem">Expanding Union Read Ecosystem<a href="https://fluss.apache.org/blog/unified-streaming-lakehouse/#expanding-union-read-ecosystem" class="hash-link" aria-label="Direct link to Expanding Union Read Ecosystem" title="Direct link to Expanding Union Read Ecosystem"></a></h3>
+<p>Currently, Union Read functionality is integrated with Apache Flink, enabling seamless querying of real-time and historical data. Moving forward, the community plans to extend this capability to support additional query engines, such as Apache Spark and StarRocks, further broadening its ecosystem compatibility and adoption.</p>
+<h3 class="anchor anchorWithStickyNavbar_LWe7" id="diversifying-lake-storage-formats">Diversifying Lake Storage Formats<a href="https://fluss.apache.org/blog/unified-streaming-lakehouse/#diversifying-lake-storage-formats" class="hash-link" aria-label="Direct link to Diversifying Lake Storage Formats" title="Direct link to Diversifying Lake Storage Formats"></a></h3>
+<p>At present, Fluss supports Apache Paimon as its primary lake storage. To meet diverse user requirements, the community aims to add support for more lake formats, including <strong>Apache Iceberg</strong> and <strong>Apache Hudi</strong>, thereby providing flexibility and interoperability with a wider range of Lakehouse ecosystems.</p>
+<h3 class="anchor anchorWithStickyNavbar_LWe7" id="optimizing-arrow-to-parquet-conversion">Optimizing Arrow-to-Parquet Conversion<a href="https://fluss.apache.org/blog/unified-streaming-lakehouse/#optimizing-arrow-to-parquet-conversion" class="hash-link" aria-label="Direct link to Optimizing Arrow-to-Parquet Conversion" title="Direct link to Optimizing Arrow-to-Parquet Conversion"></a></h3>
+<p>Fluss leverages Apache Arrow as its storage format, while many Lakehouse formats, such as Paimon, Iceberg, and Hudi, utilize parquet for storage. The Apache Arrow community has developed a mature and efficient solution for converting Arrow data to Parquet. In the future, Fluss will integrate these advancements to enable high-performance Arrow-to-Parquet conversions, significantly reducing the computational overhead of the tiering service and enhancing overall efficiency.</p>]]></conte [...]
+ </item>
+ <item>
+ <title><![CDATA[Introducing Fluss: Streaming Storage for Real-Time Analytics]]></title>
+ <link>https://fluss.apache.org/blog/fluss-intro/</link>
+ <guid>https://fluss.apache.org/blog/fluss-intro/</guid>
+ <pubDate>Thu, 12 Dec 2024 00:00:00 GMT</pubDate>
+ <description><![CDATA[<!--]]></description>
+ <content:encoded><![CDATA[<p>We have discussed the challenges of using Kafka for real-time analytics in our previous <a 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 anchorWithStickyNavbar_LWe7" 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"></a></h2>
+<h3 class="anchor anchorWithStickyNavbar_LWe7" 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"></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">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 anchorWithStickyNavbar_LWe7" 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"></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 anchorWithStickyNavbar_LWe7" 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"></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 anchorWithStickyNavbar_LWe7" 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"></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 anchorWithStickyNavbar_LWe7" 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"></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 anchorWithStickyNavbar_LWe7" 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"></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><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><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><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">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 anchorWithStickyNavbar_LWe7" 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"></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><strong>Apache Kafka Protocol Compatibility:</strong> This is aimed at helping existing streaming data migrate to Fluss more effectively.</li>
+<li><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><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 href="https://fluss.apache.org/roadmap/">Fluss Roadmap</a> for a comprehensive future planning.</p>]]></content:encoded>
+ </item>
+ <item>
+ <title><![CDATA[Why Fluss? Top 4 Challenges of Using Kafka for Real-Time Analytics]]></title>
+ <link>https://fluss.apache.org/blog/why-fluss/</link>
+ <guid>https://fluss.apache.org/blog/why-fluss/</guid>
+ <pubDate>Wed, 11 Dec 2024 00:00:00 GMT</pubDate>
+ <description><![CDATA[<!--]]></description>
+ <content:encoded><![CDATA[<p>The industry is undergoing a clear and significant shift as big data computing transitions from offline to real-time processing.
+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>
+<p><img decoding="async" loading="lazy" alt="FF Announcement" src="https://fluss.apache.org/assets/images/img1-a29d423ce0b5f952b79ad2babb903cf5.jpg" width="3656" height="1240" class="img_ev3q">
+The evolution of big data technology is becoming increasingly impactful, reshaping the computing architecture landscape.
+The traditional Hive-based data warehouse has given way to modern architectures, starting with Lakehouse models and progressing
+to the Paimon streaming Lakehouse, which has gained significant traction in markets like China and more recently started expanding to EU/US markets.
+The core driver behind these architectural innovations is the need to improve data processing timeliness. The data freshness is improved from traditional
+T+1 (next-day readiness) to T+1 hours, and now T+1 minutes. However, Lakehouse architectures, being file-system-based,
+inherently face minute-level latency as their practical upper limit.</p>
+<p>Yet, many critical use cases, such as search and recommendation systems, advertisement attribution, and anomaly detection, demand second-level latency.
+While big data technologies have advanced significantly, there remains a notable gap: a user-friendly, second-level storage solution tailored for big data analytics.</p>
+<p>In most real-time data scenarios, Apache Kafka has emerged as the go-to second-level storage solution. Its integration with Apache Flink represents the dominant architecture for building real-time data warehouses. However, while widely adopted, this combination presents significant challenges for achieving true real-time analytics at scale. The limitations of using Kafka for big data analytics highlight the need for a more robust solution to meet the demands of modern real-time use ca [...]
+<h2 class="anchor anchorWithStickyNavbar_LWe7" id="kafka-falls-short-in-real-time-analytics">Kafka Falls Short in Real-Time Analytics<a href="https://fluss.apache.org/blog/why-fluss/#kafka-falls-short-in-real-time-analytics" class="hash-link" aria-label="Direct link to Kafka Falls Short in Real-Time Analytics" title="Direct link to Kafka Falls Short in Real-Time Analytics"></a></h2>
+<h3 class="anchor anchorWithStickyNavbar_LWe7" id="no-support-for-updates">No Support for Updates<a href="https://fluss.apache.org/blog/why-fluss/#no-support-for-updates" class="hash-link" aria-label="Direct link to No Support for Updates" title="Direct link to No Support for Updates"></a></h3>
+<p>The first significant challenge with Apache Kafka is its lack of support for updates, a critical feature for data warehouses. In data warehousing, updates are often essential to correct or amend data. However, Kafka's inability to handle updates results in duplicate records for the same primary key. When consumed by a computing engine, this duplication necessitates costly deduplication processes to ensure accurate results.</p>
+<p><img decoding="async" loading="lazy" alt="FF Announcement" src="https://fluss.apache.org/assets/images/img2-d2d1a314768a1be3da0308e20851d3f3.jpg" width="3656" height="1172" class="img_ev3q"></p>
+<p>In Apache Flink, for instance, handling this issue requires materializing all upstream data in state, which is resource-intensive. Every time data is consumed from Kafka, the deduplication process incurs a substantial overhead, significantly increasing computational and storage costs. This limitation not only impacts performance but also hampers the reusability of Kafka-stored data for downstream business processes.</p>
+<h3 class="anchor anchorWithStickyNavbar_LWe7" id="lack-of-querying-capabilities">Lack of Querying Capabilities<a href="https://fluss.apache.org/blog/why-fluss/#lack-of-querying-capabilities" class="hash-link" aria-label="Direct link to Lack of Querying Capabilities" title="Direct link to Lack of Querying Capabilities"></a></h3>
+<p>The second major limitation of Apache Kafka is hard to debug, primarily due to its lack of native querying capabilities. In data warehousing, querying is a fundamental feature that facilitates troubleshooting and ad-hoc analysis to understand data trends. Unfortunately, Kafka operates much like a black box, making it challenging to perform these critical tasks without additional tools or layers.</p>
+<p><img decoding="async" loading="lazy" alt="FF Announcement" src="https://fluss.apache.org/assets/images/img3-32732f50a5420dad7d1dd6c5b3d17d6f.jpg" width="3696" height="1214" class="img_ev3q"></p>
+<p>To address this limitation, the industry has adopted two primary approaches, each with its own trade-offs:</p>
+<ul>
+<li><strong>Synchronizing Kafka Data to an OLAP System:</strong> This allows for querying data using the OLAP system’s capabilities. However, this approach introduces additional components into the architecture, increasing both complexity and cost. Moreover, it risks data inconsistencies due to synchronization delays.</li>
+<li><strong>Querying Kafka Directly Using Trino:</strong> While Trino can query Kafka, it relies solely on full scans, which are inefficient for large-scale operations. For instance, a simple query on just 1GB of Kafka data can take up to one minute, rendering it impractical for large datasets or real-time requirements.</li>
+</ul>
+<p>These limitations make Kafka unsuitable for efficient and scalable data exploration in modern data warehousing workflows.</p>
+<h3 class="anchor anchorWithStickyNavbar_LWe7" id="difficulty-with-data-backfilling">Difficulty with Data Backfilling<a href="https://fluss.apache.org/blog/why-fluss/#difficulty-with-data-backfilling" class="hash-link" aria-label="Direct link to Difficulty with Data Backfilling" title="Direct link to Difficulty with Data Backfilling"></a></h3>
+<p><img decoding="async" loading="lazy" alt="FF Announcement" src="https://fluss.apache.org/assets/images/img4-5a57c638bb5dd478a86a9fcd1683734f.jpg" width="3526" height="1210" class="img_ev3q">
+The third significant issue with Apache Kafka is processing historical data, also known as data backfilling, a common requirement in data warehousing.
+For instance, in logistics, it usually needs to process and analyze historical data from several months ago. However, Kafka only retain data for a few days due to the high cost of storage.
+Even though Kafka community has introduced <a href="https://cwiki.apache.org/confluence/display/KAFKA/KIP-405%3A+Kafka+Tiered+Storage" target="_blank" rel="noopener noreferrer">Tiered Storage</a> to address the long-term data issue, it still has limitations.
+Reading historical data still require all the data to pass through Kafka brokers, which can lead to brokers unstable and <a href="https://www.warpstream.com/blog/tiered-storage-wont-fix-kafka#increased-complexity-and-operational-burden" target="_blank" rel="noopener noreferrer">disrupt live traffics</a>.</p>
+<p>These limitations highlight Kafka’s inefficiency as a solution for data backfilling in large-scale and long-term analytical use cases, further underscoring the need for more robust alternatives in real-time data warehousing.</p>
+<h3 class="anchor anchorWithStickyNavbar_LWe7" id="excessive-network-costs">Excessive Network Costs<a href="https://fluss.apache.org/blog/why-fluss/#excessive-network-costs" class="hash-link" aria-label="Direct link to Excessive Network Costs" title="Direct link to Excessive Network Costs"></a></h3>
+<p>The final major challenge with Apache Kafka lies in its high network costs, which account for an estimated 88% of Kafka's overall operational expenses. In data warehousing, the "one write, multiple read" pattern is common, with each consumer often requiring only a subset of the data. However, Kafka's design mandates that consumers read the entire dataset, regardless of how much is actually needed.</p>
+<p><img decoding="async" loading="lazy" alt="FF Announcement" src="https://fluss.apache.org/assets/images/img5-e185731d5e249a6c80b962b77b5a16ad.jpg" width="3636" height="1206" class="img_ev3q"></p>
+<p>For instance, among the tens of thousands of Flink SQL jobs at Alibaba, only 49% of the upstream columns are utilized per job on average. Despite this, consumers must read all the columns and pay 100% networking cost, which is highly inefficient and wasteful.</p>
+<p>In summary, using Kafka for real-time analytics presents several critical issues: <strong>(1) lack of support for updates</strong>, <strong>(2) absence of querying capabilities</strong>, <strong>(3) difficulty with data backfilling</strong>, and <strong>(4) excessive network costs</strong>. These limitations make the combination of Flink and Kafka less than ideal for real-time data warehousing.
+But why Kafka lacks these abilities? Is it possible to add the abilities to Kafka?</p>
+<h2 class="anchor anchorWithStickyNavbar_LWe7" id="kafka-is-not-designed-for-analytics">Kafka is not designed for Analytics<a href="https://fluss.apache.org/blog/why-fluss/#kafka-is-not-designed-for-analytics" class="hash-link" aria-label="Direct link to Kafka is not designed for Analytics" title="Direct link to Kafka is not designed for Analytics"></a></h2>
+<p><img decoding="async" loading="lazy" alt="FF Announcement" src="https://fluss.apache.org/assets/images/img6-4741286b7e5d1410d5a8d7036e3cad8d.jpg" width="3620" height="1148" class="img_ev3q">
+The root cause of these challenges lies in the fundamental design philosophy of Kafka: <strong>Kafka is designed for streaming events, NOT for streaming analytics</strong>. Each system has its own focus and strengths, and Kafka's design is optimized for message queue scenarios rather than analytical workloads.</p>
+<p>In Kafka, data is typically stored in a row-oriented format, such as CSV, JSON, or Avro.
+While this is highly efficient for use cases involving message streaming, it becomes a bottleneck for analytical scenarios.
+Data analysis requires handling large volumes of data, and therefore heavily relies on data skipping capabilities from storage, such as column pruning and predicate pushdown.
+For this reason, columnar storage is far better suited for analytical workloads, whereas Kafka's row-based storage is not designed to meet these demands effectively.</p>
+<h2 class="anchor anchorWithStickyNavbar_LWe7" id="introducing-fluss">Introducing Fluss<a href="https://fluss.apache.org/blog/why-fluss/#introducing-fluss" class="hash-link" aria-label="Direct link to Introducing Fluss" title="Direct link to Introducing Fluss"></a></h2>
+<p><img decoding="async" loading="lazy" alt="FF Announcement" src="https://fluss.apache.org/assets/images/img7-06886bca9797751895c82d707cb04b2d.jpg" width="3644" height="1210" class="img_ev3q">
+When visualizing the data ecosystem as a four-quadrant matrix, an intriguing pattern emerges.
+The left side of the matrix represents operational systems, while the right side represents analytical systems.
+The top half is dedicated to stream storage, and the bottom half to table storage.
+In operational systems, both databases and stream storage predominantly use row-based formats, as row storage is more efficient for transactional workloads. Conversely, in analytical systems like Apache Iceberg and Snowflake, columnar storage is preferred due to its superior performance in analytical scenarios.</p>
+<p>Interestingly, the upper-right quadrant of the matrix remains empty, indicating a significant gap in the market: a streaming storage for analytical scenarios. Unsurprisingly, such a storage would likely adopt a columnar format to effectively address the needs of real-time analytics.</p>
+<p>To fill the gap and resolve problems in Flink and streaming analytics, we embarked on a journey two years ago to create a streaming storage. We named the project "<strong>FL</strong>ink <strong>U</strong>nified <strong>S</strong>treaming <strong>S</strong>torage", and from its initials, we derived the name <strong>Fluss</strong>.
+<img decoding="async" loading="lazy" alt="FF Announcement" src="https://fluss.apache.org/assets/images/img8-87cfb5887e9a49febaacd805de5216fe.jpg" width="3700" height="946" class="img_ev3q">
+Interestingly, Flink is derived from the German word for "<strong>agile</strong>", and Fluss, which translates to "<strong>river</strong>" in German, resonates deeply with the project’s vision.
+It symbolizes the streaming data is continuously flowing, distributing and converging into data lakes, just like a river.
+The launch of Fluss coincides with Flink's 10th anniversary, making it a fitting tribute to the project’s heritage and its enduring contribution to the streaming data landscape.</p>
+<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"></p>
+<p>Learn more details about Fluss in the next <a href="https://fluss.apache.org/blog/fluss-intro/">blog post</a>, where we will delve deeper into Fluss's architecture, design principles, key features, and explore how it addresses the challenges of using Kafka for real-time analytics.</p>]]></content:encoded>
+ </item>
+ <item>
+ <title><![CDATA[Fluss is Now Open Source]]></title>
+ <link>https://fluss.apache.org/blog/fluss-open-source/</link>
+ <guid>https://fluss.apache.org/blog/fluss-open-source/</guid>
+ <pubDate>Fri, 29 Nov 2024 00:00:00 GMT</pubDate>
+ <description><![CDATA[<!--]]></description>
+ <content:encoded><![CDATA[<p>Earlier this year at Flink Forward 2024 Berlin we <a href="https://www.ververica.com/blog/introducing-fluss" target="_blank" rel="noopener noreferrer">announced Fluss</a> and today we are thrilled to announce open-sourcing the project.
+Fluss is a <strong>streaming storage system</strong> designed to power real-time analytics. It aspires to change how organizations approach real-time data by acting as the <strong>real-time data layer</strong> for the Lakehouse.
+Its cutting-edge design enables businesses to achieve <strong>sub-second latency</strong>, <strong>high throughput</strong>, and <strong>cost efficiency</strong> for data analytics, making it the ideal solution for modern data-driven applications.</p>
+<p>We have historically invested a lot of effort into advancing the data streaming ecosystem, being major contributors to <a href="https://flink.apache.org/" target="_blank" rel="noopener noreferrer">Apache Flink®</a>, <a href="https://www.ververica.com/blog/ververica-donates-flink-cdc-empowering-real-time-data-integration-for-the-community" target="_blank" rel="noopener noreferrer">Apache Flink CDC</a>, and <a href="https://paimon.apache.org/" target="_blank" rel="noopener noreferrer">A [...]
+As part of our commitment, Fluss is now open source under the Apache 2.0 license and is available on <a href="https://github.com/alibaba/fluss" target="_blank" rel="noopener noreferrer">GitHub</a>, inviting users to create the next generation of real-time architectures.</p>
+<p><img decoding="async" loading="lazy" alt="FF Announcement" src="https://fluss.apache.org/assets/images/ff_os-2589690ef465b4d2c76c7861438ad18b.png" width="3840" height="1286" class="img_ev3q"></p>
+<h3 class="anchor anchorWithStickyNavbar_LWe7" id="real-time-streaming-storage-for-the-lakehouse-era">Real-Time Streaming Storage for the Lakehouse Era<a href="https://fluss.apache.org/blog/fluss-open-source/#real-time-streaming-storage-for-the-lakehouse-era" class="hash-link" aria-label="Direct link to Real-Time Streaming Storage for the Lakehouse Era" title="Direct link to Real-Time Streaming Storage for the Lakehouse Era"></a></h3>
+<p>The need for real-time insights has grown exponentially - especially with the recent explosion of AI. Still, the tools and architectures we’ve relied on for years weren’t designed with streaming-first analytical workflows in mind. Traditional architectures often involve complex integrations between message queues like Kafka, processing engines like Flink, and storage systems that are more batch-oriented than real-time. This approach not only increases latency but also adds operational [...]
+<p>At its core, Fluss combines the best of <strong>streaming</strong> and <strong>analytical storage</strong>. Its <strong>columnar stream</strong> design is optimized for real-time analytical queries, enabling lightning-fast data access and updates. With support for <strong>real-time data ingestion</strong> and integrations with <strong>real-time lakehouse solutions</strong> such as Paimon, Fluss ensures that data is always fresh and ready for analysis, making it ideal for applications [...]
+<p>A critical aspect of Fluss is also its deep integration with Apache FlinkⓇ the de facto gold standard for stream processing. This integration combines a <strong>stream processor</strong> and a <strong>real-time storage layer</strong>, eliminating the need for separate message queues like Kafka in analytics-focused architectures. Fluss simplifies pipelines, reduces costs, and improves performance for <strong>high-throughput</strong>, <strong>low-latency analytics</strong>.</p>
+<h3 class="anchor anchorWithStickyNavbar_LWe7" id="building-the-future-of-analytics-with-fluss">Building the Future of Analytics with Fluss<a href="https://fluss.apache.org/blog/fluss-open-source/#building-the-future-of-analytics-with-fluss" class="hash-link" aria-label="Direct link to Building the Future of Analytics with Fluss" title="Direct link to Building the Future of Analytics with Fluss"></a></h3>
+<p>Fluss is designed to support a wide range of use cases, from powering dashboards and monitoring systems to enabling <strong>streaming ETL</strong> and <strong>real-time intelligence pipelines</strong> for the modern AI era. Its ability to provide real-time updates makes it a natural fit for <strong>streaming data warehouses</strong>, where fresh data is essential for decision-making.</p>
+<p>By serving as the real-time data layer on the Lakehouse, Fluss supports both <strong>streaming-first</strong> architectures and <strong>unified batch and stream processing</strong>. This flexibility should be appealing for organizations looking to modernize their analytics stack while keeping costs low and performance high.</p>
+<h3 class="anchor anchorWithStickyNavbar_LWe7" id="whats-next-for-fluss">What’s Next for Fluss?<a href="https://fluss.apache.org/blog/fluss-open-source/#whats-next-for-fluss" class="hash-link" aria-label="Direct link to What’s Next for Fluss?" title="Direct link to What’s Next for Fluss?"></a></h3>
+<p>Open-sourcing Fluss is just the beginning and it will be donated to the Apache Software Foundation (ASF). We’re committed to working closely with the community to expand its capabilities and adoption. You can find more information about the project’s roadmap <a href="https://alibaba.github.io/fluss-docs/roadmap/" target="_blank" rel="noopener noreferrer">here</a>.</p>
+<p><img decoding="async" loading="lazy" alt="Banner" src="https://fluss.apache.org/assets/images/banner-5523bd3a3f5145b15e36c6bfb46796be.png" width="1998" height="1001" class="img_ev3q"></p>
+<h3 class="anchor anchorWithStickyNavbar_LWe7" id="join-the-journey">Join the Journey<a href="https://fluss.apache.org/blog/fluss-open-source/#join-the-journey" class="hash-link" aria-label="Direct link to Join the Journey" title="Direct link to Join the Journey"></a></h3>
+<p>We invite you to join us and help grow our community around the project. Explore Fluss, contribute to its development, and build the next generation of data pipelines.</p>
+<p>Make sure to keep an eye on the project, give it a try and if you like it, don’t forget to give it some ❤️ via ⭐ on <a href="https://github.com/alibaba/fluss" target="_blank" rel="noopener noreferrer">GitHub</a></p>
+<h3 class="anchor anchorWithStickyNavbar_LWe7" id="getting-started">Getting Started<a href="https://fluss.apache.org/blog/fluss-open-source/#getting-started" class="hash-link" aria-label="Direct link to Getting Started" title="Direct link to Getting Started"></a></h3>
+<ul>
+<li>Visit the <a href="https://github.com/alibaba/fluss" target="_blank" rel="noopener noreferrer">GitHub repository</a>.</li>
+<li>Check out the <a href="https://alibaba.github.io/fluss-docs/docs/quickstart/flink/" target="_blank" rel="noopener noreferrer">quickstart guide</a>.</li>
+</ul>
+<h3 class="anchor anchorWithStickyNavbar_LWe7" id="additional-resources">Additional Resources<a href="https://fluss.apache.org/blog/fluss-open-source/#additional-resources" class="hash-link" aria-label="Direct link to Additional Resources" title="Direct link to Additional Resources"></a></h3>
+<ul>
+<li>Announcement Blog Post: <a href="https://www.ververica.com/blog/introducing-fluss" target="_blank" rel="noopener noreferrer">Introducing Fluss: Unified Streaming Storage For Next-Generation Data Analytics</a></li>
+<li>Flink Forward Keynote Announcement: <a href="https://www.ververica.academy/courses/3d163483-5040-4d60-b5b3-755c3277edf7/activities/1af290fd-05bc-4fab-90be-6ed4628399be" target="_blank" rel="noopener noreferrer">The Future - Introducing Fluss</a></li>
+<li>Flink Forward Fluss Presentation: <a href="https://www.ververica.academy/courses/3d163483-5040-4d60-b5b3-755c3277edf7/activities/a366d118-6c53-47ef-91bb-289fc2462b07" target="_blank" rel="noopener noreferrer">Is Kafka the Best Storage for Streaming Analytics?</a></li>
+</ul>]]></content:encoded>
+ </item>
+ </channel>
+</rss>
\ No newline at end of file
diff --git a/blog/rss.xsl b/blog/rss.xsl
new file mode 100644
index 0000000..e9695b2
--- /dev/null
+++ b/blog/rss.xsl
@@ -0,0 +1,86 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<xsl:stylesheet
+ version="3.0"
+ xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
+ xmlns:atom="http://www.w3.org/2005/Atom">
+ <xsl:output method="html" version="1.0" encoding="UTF-8" indent="yes" />
+
+ <xsl:template match="/">
+ <html xmlns="http://www.w3.org/1999/xhtml" lang="en">
+ <head>
+ <title>RSS Feed | <xsl:value-of select="rss/channel/title" /></title>
+ <link rel="stylesheet" href="rss.css" />
+ </head>
+ <body>
+ <main>
+ <div class="description">
+ <div class="info">
+ <strong>This is an RSS feed</strong>. Subscribe by copying the URL
+ from the address bar into your newsreader. Visit
+ <a href="https://aboutfeeds.com/">About Feeds</a> to learn more
+ and get started. It’s free.
+ </div>
+ <h1>
+ <div class="rss-icon">
+ <svg
+ version="1.1"
+ id="Capa_1"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:xlink="http://www.w3.org/1999/xlink"
+ viewBox="0 0 455.731 455.731"
+ xml:space="preserve">
+ <g>
+ <rect
+ x="0"
+ y="0"
+ style="fill: #f78422"
+ width="455.731"
+ height="455.731"
+ />
+ <g>
+ <path
+ style="fill: #ffffff"
+ d="M296.208,159.16C234.445,97.397,152.266,63.382,64.81,63.382v64.348
+ c70.268,0,136.288,27.321,185.898,76.931c49.609,49.61,76.931,115.63,76.931,185.898h64.348
+ C391.986,303.103,357.971,220.923,296.208,159.16z"
+ />
+ <path
+ style="fill: #ffffff"
+ d="M64.143,172.273v64.348c84.881,0,153.938,69.056,153.938,153.939h64.348
+ C282.429,270.196,184.507,172.273,64.143,172.273z"
+ />
+ <circle
+ style="fill: #ffffff"
+ cx="109.833"
+ cy="346.26"
+ r="46.088"
+ />
+ </g>
+ </g>
+ </svg>
+ </div>
+ <xsl:value-of select="rss/channel/title" />
+ </h1>
+ <p class="blog-description">
+ <xsl:value-of select="rss/channel/description" />
+ </p>
+ </div>
+ <h2>Recent Posts</h2>
+ <div class="blog-posts">
+ <xsl:for-each select="rss/channel/item">
+ <div class="blog-post">
+ <h3><a href="{link}"><xsl:value-of select="title" /></a></h3>
+ <div class="blog-post-date">
+ Published on <xsl:value-of select="substring(pubDate,0,17)" />
+ </div>
+ <div class="blog-post-description">
+ <xsl:value-of select="description" />
+ </div>
+ </div>
+ </xsl:for-each>
+ </div>
+ </main>
+ </body>
+ </html>
+ </xsl:template>
+</xsl:stylesheet>
diff --git a/blog/tags/index.html b/blog/tags/index.html
new file mode 100644
index 0000000..dda2362
--- /dev/null
+++ b/blog/tags/index.html
@@ -0,0 +1,27 @@
+<!doctype html>
+<html lang="en" dir="ltr" class="blog-wrapper blog-tags-list-page plugin-blog plugin-id-default" data-has-hydrated="false">
+<head>
+<meta charset="UTF-8">
+<meta name="generator" content="Docusaurus v3.8.1">
+<title data-rh="true">Tags | Fluss</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/docusaurus-social-card.jpg"><meta data-rh="true" name="twitter:image" content="https://fluss.apache.org/img/docusaurus-social-card.jpg"><meta data-rh="true" property="og:url" content="https://fluss.apache.org/blog/tags [...]
+<link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Fluss Atom Feed">
+
+
+
+
+<link rel="search" type="application/opensearchdescription+xml" title="Fluss" href="/opensearch.xml">
+
+<link rel="icon" href="/img/logo.svg">
+<link rel="manifest" href="/manifest.json">
+<meta name="theme-color" content="#0071e3"><link rel="stylesheet" href="/assets/css/styles.3ca55d09.css">
+<script src="/assets/js/runtime~main.264c6f6f.js" defer="defer"></script>
+<script src="/assets/js/main.a06cb6b9.js" defer="defer"></script>
+</head>
+<body class="navigation-with-keyboard">
+<svg xmlns="http://www.w3.org/2000/svg" style="display: none;"><defs>
+<symbol id="theme-svg-external-link" viewBox="0 0 24 24"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"/></symbol>
+</defs></svg>
+<script>!function(){var t="light";var e=function(){try{return new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}}()||function(){try{return window.localStorage.getItem("theme")}catch(t){}}();document.documentElement.setAttribute("data-theme",e||t),document.documentElement.setAttribute("data-theme-choice",e||t)}(),function(){try{const c=new URLSearchParams(window.location.search).entries();for(var[t,e]of c)if(t.startsWith("docusaurus-data-")){var a=t.replace("do [...]
+ Apache®, Apache Flink®, Flink®, Apache Kafka®, Kafka®, Spark® and associated open source project names and logos are trademarks of the Apache Software Foundation.</div></div></div></footer></div>
+</body>
+</html>
\ No newline at end of file
diff --git a/blog/tags/releases/index.html b/blog/tags/releases/index.html
new file mode 100644
index 0000000..6c2589c
--- /dev/null
+++ b/blog/tags/releases/index.html
@@ -0,0 +1,32 @@
+<!doctype html>
+<html lang="en" dir="ltr" class="blog-wrapper blog-tags-post-list-page plugin-blog plugin-id-default" data-has-hydrated="false">
+<head>
+<meta charset="UTF-8">
+<meta name="generator" content="Docusaurus v3.8.1">
+<title data-rh="true">2 posts tagged with "releases" | Fluss</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/docusaurus-social-card.jpg"><meta data-rh="true" name="twitter:image" content="https://fluss.apache.org/img/docusaurus-social-card.jpg"><meta data-rh="true" property="og:url" content [...]
+<link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Fluss Atom Feed">
+
+
+
+
+<link rel="search" type="application/opensearchdescription+xml" title="Fluss" href="/opensearch.xml">
+
+<link rel="icon" href="/img/logo.svg">
+<link rel="manifest" href="/manifest.json">
+<meta name="theme-color" content="#0071e3"><link rel="stylesheet" href="/assets/css/styles.3ca55d09.css">
+<script src="/assets/js/runtime~main.264c6f6f.js" defer="defer"></script>
+<script src="/assets/js/main.a06cb6b9.js" defer="defer"></script>
+</head>
+<body class="navigation-with-keyboard">
+<svg xmlns="http://www.w3.org/2000/svg" style="display: none;"><defs>
+<symbol id="theme-svg-external-link" viewBox="0 0 24 24"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"/></symbol>
+</defs></svg>
+<script>!function(){var t="light";var e=function(){try{return new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}}()||function(){try{return window.localStorage.getItem("theme")}catch(t){}}();document.documentElement.setAttribute("data-theme",e||t),document.documentElement.setAttribute("data-theme-choice",e||t)}(),function(){try{const c=new URLSearchParams(window.location.search).entries();for(var[t,e]of c)if(t.startsWith("docusaurus-data-")){var a=t.replace("do [...]
+<p>🌊 We are excited to announce the official release of <strong>Fluss 0.7</strong>!</p>
+<p>This version has undergone extensive improvements in <strong>stability</strong>, <strong>architecture</strong>, <strong>performance optimization</strong>, and <strong>security</strong>, further enhancing its readiness for <strong>production environments</strong>. Over the past three months, we have completed more than <strong>250 commits</strong>, making this release a significant milestone toward becoming a mature, production-grade streaming storage platform.</p></div><footer class=" [...]
+three months of intensive development, bringing together the expertise and efforts of 45 contributors worldwide,
+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></div><footer class="row docusaurus-mt-lg"><div class="col col--9"><b>Tags:</b><ul class="tags_jXut padding--none margin-left--sm"><li class="tag_QGVx"><a rel="tag" title="Content related release announcement." class="tag_zVej tagRegular_sFm0" href="/blog/tags/releases/">releases</a></li></ul></div><div class= [...]
+ Apache®, Apache Flink®, Flink®, Apache Kafka®, Kafka®, Spark® and associated open source project names and logos are trademarks of the Apache Software Foundation.</div></div></div></footer></div>
+</body>
+</html>
\ No newline at end of file
diff --git a/blog/unified-streaming-lakehouse/index.html b/blog/unified-streaming-lakehouse/index.html
new file mode 100644
index 0000000..4094bbc
--- /dev/null
+++ b/blog/unified-streaming-lakehouse/index.html
@@ -0,0 +1,198 @@
+<!doctype html>
+<html lang="en" dir="ltr" class="blog-wrapper blog-post-page plugin-blog plugin-id-default" data-has-hydrated="false">
+<head>
+<meta charset="UTF-8">
+<meta name="generator" content="Docusaurus v3.8.1">
+<title data-rh="true">Towards A Unified Streaming & Lakehouse Architecture | Fluss</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/docusaurus-social-card.jpg"><meta data-rh="true" name="twitter:image" content="https://fluss.apache.org/img/docusaurus-social-card.jpg"><meta data-rh="true" property= [...]
+<link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Fluss Atom Feed">
+
+
+
+
+<link rel="search" type="application/opensearchdescription+xml" title="Fluss" href="/opensearch.xml">
+
+<link rel="icon" href="/img/logo.svg">
+<link rel="manifest" href="/manifest.json">
+<meta name="theme-color" content="#0071e3"><link rel="stylesheet" href="/assets/css/styles.3ca55d09.css">
+<script src="/assets/js/runtime~main.264c6f6f.js" defer="defer"></script>
+<script src="/assets/js/main.a06cb6b9.js" defer="defer"></script>
+</head>
+<body class="navigation-with-keyboard">
+<svg xmlns="http://www.w3.org/2000/svg" style="display: none;"><defs>
+<symbol id="theme-svg-external-link" viewBox="0 0 24 24"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"/></symbol>
+</defs></svg>
+<script>!function(){var t="light";var e=function(){try{return new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}}()||function(){try{return window.localStorage.getItem("theme")}catch(t){}}();document.documentElement.setAttribute("data-theme",e||t),document.documentElement.setAttribute("data-theme-choice",e||t)}(),function(){try{const c=new URLSearchParams(window.location.search).entries();for(var[t,e]of c)if(t.startsWith("docusaurus-data-")){var a=t.replace("do [...]
+<p>Fluss is designed to address the demands of real-time analytics with the following key capabilities:</p>
+<ul>
+<li><strong>Real-Time Stream Reading and Writing:</strong> Supports millisecond-level end-to-end latency.</li>
+<li><strong>Columnar Stream:</strong> Optimizes storage and query efficiency.</li>
+<li><strong>Streaming Updates:</strong> Enables low-latency updates to data streams.</li>
+<li><strong>Changelog Generation:</strong> Supports changelog generation and consumption.</li>
+<li><strong>Real-Time Lookup Queries:</strong> Facilitates instant lookup queries on primary keys.</li>
+<li><strong>Streaming & Lakehouse Unification:</strong> Seamlessly integrates streaming and lakehouse storage for unified data processing.</li>
+</ul>
+<h3 class="anchor anchorWithStickyNavbar_LWe7" id="fluss-unified-streaming--lakehouse-architecture">Fluss Unified Streaming & Lakehouse Architecture<a href="#fluss-unified-streaming--lakehouse-architecture" class="hash-link" aria-label="Direct link to Fluss Unified Streaming & Lakehouse Architecture" title="Direct link to Fluss Unified Streaming & Lakehouse Architecture"></a></h3>
+<p><img decoding="async" loading="lazy" alt="Unification Solutions" src="/assets/images/img1-163f1412a1ed7b661686302df5bf9edb.png" width="1866" height="635" class="img_ev3q">
+The Fluss architecture is designed to provide millisecond-level end-to-end latency, ensuring high-performance real-time data writing and reading. A core component of this architecture is the <strong>Tiering Service</strong>, which continuously offloads data in Fluss into a standard lakehouse format, such as <code>Apache Paimon</code> or <code>Apache Iceberg</code>. This tiering ensures that external query engines can directly analyze data in the Lakehouse format, enabling efficient batch [...]
+In this architecture:</p>
+<ul>
+<li><strong>Latest Data in Fluss:</strong> Fluss stores the most recent, high-fidelity data for real-time analytics.</li>
+<li><strong>Historical Data in Paimon:</strong> Older data is compacted and stored in Apache Paimon for large-scale historical analysis.</li>
+</ul>
+<p>By leveraging Apache Flink, the integration of Fluss and Paimon supports Union Reads, which combine real-time data in Fluss with historical data in Paimon. This enables analytical queries with second-level freshness, allowing businesses to benefit from up-to-date insights while maintaining access to extensive historical datasets.</p>
+<p>The Streaming/Lakehouse unification design of Fluss provides:</p>
+<ul>
+<li><strong>Unified Architecture:</strong> Simplifies the Lakehouse ecosystem by combining the strengths of streaming and Lakehouse storage.</li>
+<li><strong>Enhanced Real-Time Capabilities:</strong> Millisecond-level latency ensures data is always fresh for critical use cases.</li>
+<li><strong>Seamless Compatibility:</strong> Native support for standard lakehouse formats ensures interoperability with existing analytics engines.</li>
+<li><strong>Optimized Data Management:</strong> Combines real-time and historical data seamlessly for comprehensive analytics workflows.</li>
+</ul>
+<p>Fluss is <strong>a next-generation approach to streaming storage, purpose-built to complement Lakehouse architectures</strong> and drive the adoption of a streaming and Lakehouse unification across industries.</p>
+<h3 class="anchor anchorWithStickyNavbar_LWe7" id="unified-metadata">Unified metadata<a href="#unified-metadata" class="hash-link" aria-label="Direct link to Unified metadata" title="Direct link to Unified metadata"></a></h3>
+<p><img decoding="async" loading="lazy" alt="Unification Solutions" src="/assets/images/img2-86b0eb7b0f26884f8ead16dc4a8db648.png" width="1842" height="732" class="img_ev3q"></p>
+<p>In traditional architectures, streaming storage systems like Kafka and Lakehouse storage solutions like Apache Paimon operated as distinct entities, each maintaining its own metadata. For computing engines such as Apache Flink, this separation presented two significant challenges:</p>
+<ol>
+<li><strong>Dual Catalogs:</strong> Users were required to create and manage two separate catalogs—one for streaming storage and another for lake storage.</li>
+<li><strong>Manual Switching:</strong> Accessing data involved manually switching between catalogs to determine whether to query stream storage or lake storage, resulting in operational complexity and inefficiencies.</li>
+</ol>
+<h3 class="anchor anchorWithStickyNavbar_LWe7" id="unified-access-in-fluss">Unified Access in Fluss<a href="#unified-access-in-fluss" class="hash-link" aria-label="Direct link to Unified Access in Fluss" title="Direct link to Unified Access in Fluss"></a></h3>
+<p>In the Fluss, although Fluss and Paimon still maintain independent metadata, they expose a unified catalog and a single table abstraction to the computing engine, such as Apache Flink. This unified approach offers several key advantages:</p>
+<ul>
+<li><strong>Simplified Data Access:</strong> Users can seamlessly access both Lakehouse storage (Paimon) and streaming storage (Fluss) through a single catalog, eliminating the need to manage or switch between separate catalogs.</li>
+<li><strong>Integrated Querying:</strong> The unified table abstraction allows direct access to real-time data in Fluss and historical data in Paimon. For scenarios requiring both, users can leverage <code>Union Reads</code>, combining data from Fluss and Paimon to enable comprehensive analytics with second-level data freshness.</li>
+<li><strong>Operational Efficiency:</strong> By presenting a cohesive interface, the architecture reduces operational complexity, making it easier for users to work with real-time and historical data within a single workflow.</li>
+</ul>
+<p>This unified approach streamlines the interaction between computing engines and storage layers, enhancing both usability and productivity while supporting the high-performance demands of modern analytics workflows.</p>
+<h3 class="anchor anchorWithStickyNavbar_LWe7" id="alignment-of-data-distribution">Alignment of Data Distribution<a href="#alignment-of-data-distribution" class="hash-link" aria-label="Direct link to Alignment of Data Distribution" title="Direct link to Alignment of Data Distribution"></a></h3>
+<p><img decoding="async" loading="lazy" alt="Unification Solutions" src="/assets/images/img3-d0ea956fb83807118c4d522bdd7b30f4.png" width="1777" height="856" class="img_ev3q"></p>
+<p>In the Fluss, the data distribution between Fluss and Lakehouse storage (e.g., Apache Paimon) is strictly aligned. Fluss supports partitioned tables and buckets, and its bucketing algorithm is fully consistent with Paimon’s. This ensures that a given piece of data is always allocated to the same bucket in both systems, creating a one-to-one correspondence between Fluss buckets and Paimon buckets.
+This strong consistency in data distribution provides two significant benefits:</p>
+<h4 class="anchor anchorWithStickyNavbar_LWe7" id="1-elimination-of-shuffle-overhead-during-tiering">1. Elimination of Shuffle Overhead During Tiering<a href="#1-elimination-of-shuffle-overhead-during-tiering" class="hash-link" aria-label="Direct link to 1. Elimination of Shuffle Overhead During Tiering" title="Direct link to 1. Elimination of Shuffle Overhead During Tiering"></a></h4>
+<p>When tiering data from Fluss into Paimon format:</p>
+<ul>
+<li>A Fluss bucket (e.g., bucket1) can be tiered directly into the corresponding Paimon bucket (bucket1).</li>
+<li>There is no need to read data from a Fluss bucket, calculate which Paimon bucket each piece of data belongs to, and then write it to the appropriate Paimon bucket.</li>
+</ul>
+<p>By bypassing this intermediate redistribution step, the architecture avoids costly shuffle overhead, significantly improving compaction efficiency.</p>
+<h4 class="anchor anchorWithStickyNavbar_LWe7" id="2-prevention-of-data-inconsistencies">2. Prevention of Data Inconsistencies<a href="#2-prevention-of-data-inconsistencies" class="hash-link" aria-label="Direct link to 2. Prevention of Data Inconsistencies" title="Direct link to 2. Prevention of Data Inconsistencies"></a></h4>
+<p>Data consistency is maintained through the use of an identical bucketing algorithm in both Fluss and Paimon. This algorithm calculates the bucket assignment for each piece of data as follows:</p>
+<blockquote>
+<p>bucket_id = hash(row) % bucket_num</p>
+</blockquote>
+<p>By employing the same hash function and algorithm, Fluss and Paimon ensure consistent bucket assignment. If differing algorithms were used, inconsistencies would arise. For example:</p>
+<ul>
+<li>For a primary key table, a data row a might be assigned to bucket1 in Fluss but to bucket2 in Paimon.</li>
+<li>During tiering, if rows were mistakenly placed in bucket1 in Paimon (per Fluss’s assignment), users would fail to locate the data in Paimon due to the mismatch.</li>
+</ul>
+<p>By maintaining strong alignment in data distribution, the architecture eliminates this risk, ensuring data consistency across Fluss and Paimon while simplifying compaction workflows. This alignment underscores the robustness and efficiency of the Fluss unification design.</p>
+<h3 class="anchor anchorWithStickyNavbar_LWe7" id="streaming-reading-more-efficient-data-tracing">Streaming Reading: More Efficient Data Tracing<a href="#streaming-reading-more-efficient-data-tracing" class="hash-link" aria-label="Direct link to Streaming Reading: More Efficient Data Tracing" title="Direct link to Streaming Reading: More Efficient Data Tracing"></a></h3>
+<p>In the Fluss, historical data resides in Lakehouse storage, while real-time data is maintained in Fluss. During streaming reads, this architecture enables a seamless combination of historical and real-time data access:</p>
+<ul>
+<li><strong>Historical Data Access:</strong> Fluss retrieves historical data directly from the Lakehouse storage, leveraging its inherent advantages, such as:<!-- -->
+<ul>
+<li><strong>Efficient Filter Pushdown:</strong> Enables query engines to apply filtering conditions at the storage layer, reducing the amount of data read and improving performance.</li>
+<li><strong>Column Pruning:</strong> Allows retrieval of only the necessary columns, optimizing data transfer and query efficiency.</li>
+<li><strong>High Compression Ratios:</strong> Minimizes storage overhead while maintaining fast retrieval speeds.</li>
+</ul>
+</li>
+<li><strong>Real-Time Data Access:</strong> Fluss concurrently reads the latest real-time data from its own storage, ensuring up-to-the-millisecond freshness.</li>
+</ul>
+<p>By combining the strengths of Lakehouse storage for efficient historical data retrieval and Fluss for real-time streaming data, this architecture delivers a highly performant and scalable solution for streaming read scenarios. This integration ensures that users benefit from low-latency data freshness and optimized query performance across both historical and real-time datasets.</p>
+<h3 class="anchor anchorWithStickyNavbar_LWe7" id="batch-reading-data-freshness-in-seconds">Batch Reading: Data Freshness in Seconds<a href="#batch-reading-data-freshness-in-seconds" class="hash-link" aria-label="Direct link to Batch Reading: Data Freshness in Seconds" title="Direct link to Batch Reading: Data Freshness in Seconds"></a></h3>
+<p><img decoding="async" loading="lazy" alt="Unification Solutions" src="/assets/images/img4-06aab50ae6bb5a5df5cc0e2658815c1f.png" width="1770" height="747" class="img_ev3q"></p>
+<p>Historical data is stored in the Lakehouse, and real-time data is stored in Fluss. In batch reading scenarios, computing engines (such as Flink) can perform union reading of data in Fluss and lake storage to achieve analysis of data freshness in seconds.</p>
+<h3 class="anchor anchorWithStickyNavbar_LWe7" id="apache-flink-and-fluss">Apache Flink and Fluss<a href="#apache-flink-and-fluss" class="hash-link" aria-label="Direct link to Apache Flink and Fluss" title="Direct link to Apache Flink and Fluss"></a></h3>
+<p><img decoding="async" loading="lazy" alt="Unification Solutions" src="/assets/images/img5-36f56d95c22f50252c6a5caedbfed1d4.png" width="1761" height="730" class="img_ev3q">
+Fluss exposes a unified API to Flink users, allowing them to choose whether to use union reads or read-only reads on the Lakehouse, using the following SQL:</p>
+<div class="language-sql codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#9CDCFE;--prism-background-color:#1E1E1E"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-sql codeBlock_bY9V thin-scrollbar" style="color:#9CDCFE;background-color:#1E1E1E"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#9CDCFE"><span class="token keyword" style="color:rgb(86, 156, 214)">SELECT</span><span class="token plain"> </span><span class= [...]
+<p>This reads the complete data of the orders table and Flink will union read the data in Fluss and the Lakehouse.
+If the user only needs to read data on the data lake, you can add the <code>$lake</code> suffix after the table to be read. The SQL is as follows</p>
+<div class="language-sql codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#9CDCFE;--prism-background-color:#1E1E1E"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-sql codeBlock_bY9V thin-scrollbar" style="color:#9CDCFE;background-color:#1E1E1E"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#9CDCFE"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#9CDCFE" [...]
+<p>For scenarios where data on a data lake is read-only, Fluss inherits all the optimizations and capabilities of the lake format as a Flink source, such as runtime filters, system table queries, and time travel.</p>
+<h2 class="anchor anchorWithStickyNavbar_LWe7" id="benefits-of-the-unified-architecture">Benefits Of The Unified Architecture<a href="#benefits-of-the-unified-architecture" class="hash-link" aria-label="Direct link to Benefits Of The Unified Architecture" title="Direct link to Benefits Of The Unified Architecture"></a></h2>
+<p>Next, using Apache Paimon as an example, we will illustrate the advantages of using Fluss to build a unified architecture. We will highlight how Fluss enhances the capabilities of Paimon, creating a unified solution that combines the strengths of both systems for efficient real-time and historical data processing.</p>
+<h3 class="anchor anchorWithStickyNavbar_LWe7" id="second-level-timeliness">Second-level Timeliness<a href="#second-level-timeliness" class="hash-link" aria-label="Direct link to Second-level Timeliness" title="Direct link to Second-level Timeliness"></a></h3>
+<p>In Apache Paimon, data visibility is traditionally determined by the Flink checkpoint interval, which typically operates at one minute-level granularity. However, by integrating Fluss with Paimon to build unfiied architecture, this dependency is eliminated.</p>
+<p>With this unification, data becomes visible immediately upon entering Fluss, significantly improving data timeliness to second-level latency. This enhancement ensures that real-time insights can be derived more quickly, meeting the demands of time-sensitive applications while maintaining seamless access to both historical and real-time data.</p>
+<h3 class="anchor anchorWithStickyNavbar_LWe7" id="consistent-data-freshness-across-all-layers">Consistent Data Freshness Across All Layers<a href="#consistent-data-freshness-across-all-layers" class="hash-link" aria-label="Direct link to Consistent Data Freshness Across All Layers" title="Direct link to Consistent Data Freshness Across All Layers"></a></h3>
+<p><img decoding="async" loading="lazy" alt="Unification Solutions" src="/assets/images/img6-5fdec641b3032d1c0f236cf990d914da.png" width="1570" height="782" class="img_ev3q">
+In the process of building a data warehouse, it is common to organize and manage data by layering, such as Bronze, Silver and Gold following the medallion architecture. As data flows through these layers, maintaining data freshness becomes a critical consideration.</p>
+<p>When Paimon is used as the sole storage solution for each layer, data visibility depends on the Flink checkpoint interval. This introduces cumulative delays:</p>
+<ul>
+<li>The changelog for a given layer becomes visible only after the completion of a Flink checkpoint.</li>
+<li>As this changelog propagates to subsequent layers, the data freshness delay increases with each checkpoint interval.</li>
+</ul>
+<p>For example, with a Flink checkpoint interval of 1 minute:</p>
+<ul>
+<li>The Bronze layer experiences 1-minute delay.</li>
+<li>The Silver layer adds another 1-minute delay, totaling 2 minutes.</li>
+<li>The Gold layer adds yet another 1-minute delay, resulting in a cumulative 3-minute delay.</li>
+</ul>
+<p>With Fluss and Paimon though we get:</p>
+<ul>
+<li><strong>Immediate Data Visibility:</strong> Data in Fluss becomes visible immediately upon ingestion, without waiting for a Flink checkpoint to complete. The changelog is instantly transferred to the next layer.</li>
+<li><strong>Consistent Data Freshness:</strong> The data freshness across all layers is consistent and measured in seconds, eliminating cumulative delays.</li>
+</ul>
+<p>Additionally, if the Fluss Tiering Service is configured with a tiering cycle of 1 minute, the data delay for Paimon storage at each layer is limited to 1 minute, regardless of the number of layers. This ensures:</p>
+<ul>
+<li><strong>Real-Time Data Processing:</strong> Layers can propagate and process data with minimal delay.</li>
+<li><strong>Optimized Streaming & Lakehouse Unification:</strong> The architecture balances the strengths of real-time and batch-oriented storage.</li>
+</ul>
+<p>This integration significantly improves the performance and usability of layered data warehouses, enabling faster insights and better responsiveness to real-time demands.</p>
+<h3 class="anchor anchorWithStickyNavbar_LWe7" id="more-efficient-and-higher-throughput-changelog-generation">More efficient and higher throughput changelog generation<a href="#more-efficient-and-higher-throughput-changelog-generation" class="hash-link" aria-label="Direct link to More efficient and higher throughput changelog generation" title="Direct link to More efficient and higher throughput changelog generation"></a></h3>
+<p>In Apache Paimon, there are currently two commonly used methods for generating changelogs (excluding the Input Producer, which requires more stringent data source requirements and is not considered here):</p>
+<h4 class="anchor anchorWithStickyNavbar_LWe7" id="lookup-changelog-producer">Lookup Changelog Producer<a href="#lookup-changelog-producer" class="hash-link" aria-label="Direct link to Lookup Changelog Producer" title="Direct link to Lookup Changelog Producer"></a></h4>
+<ul>
+<li><strong>Advantages:</strong> Offers high timeliness for generating changelogs.</li>
+<li><strong>Challenges:</strong> Consumes significant computational resources, leading to higher operational costs.</li>
+</ul>
+<h4 class="anchor anchorWithStickyNavbar_LWe7" id="full-compaction-producer">Full Compaction Producer:<a href="#full-compaction-producer" class="hash-link" aria-label="Direct link to Full Compaction Producer:" title="Direct link to Full Compaction Producer:"></a></h4>
+<ul>
+<li><strong>Advantages:</strong> Does not require additional resource consumption, as changelogs are generated during the Full Compaction process.</li>
+<li><strong>Challenges:</strong> Suffers from poor timeliness, as changelog generation is delayed until a Full Compaction is triggered, which typically occurs after several checkpoints.</li>
+</ul>
+<h4 class="anchor anchorWithStickyNavbar_LWe7" id="fluss-and-paimon-optimizing-changelog-generation">Fluss and Paimon: Optimizing Changelog Generation<a href="#fluss-and-paimon-optimizing-changelog-generation" class="hash-link" aria-label="Direct link to Fluss and Paimon: Optimizing Changelog Generation" title="Direct link to Fluss and Paimon: Optimizing Changelog Generation"></a></h4>
+<p>The Fluss and Paimon architecture strikes a balance between timeliness and performance in changelog generation:</p>
+<ul>
+<li><strong>Changelog Timeliness:</strong> Fluss generates changelogs in seconds, ensuring near real-time visibility of data changes.</li>
+<li><strong>Efficient Conversion:</strong> The Fluss Tiering Service efficiently writes Fluss changelogs directly into the Paimon changelog format. This conversion process is highly optimized, avoiding resource-intensive operations such as lookups. Instead, it relies on direct read-and-write operations, significantly reducing overhead.</li>
+</ul>
+<h4 class="anchor anchorWithStickyNavbar_LWe7" id="key-benefits-of-fluss-and-paimon-changelog-generation">Key Benefits of Fluss and Paimon Changelog Generation<a href="#key-benefits-of-fluss-and-paimon-changelog-generation" class="hash-link" aria-label="Direct link to Key Benefits of Fluss and Paimon Changelog Generation" title="Direct link to Key Benefits of Fluss and Paimon Changelog Generation"></a></h4>
+<ol>
+<li><strong>Improved Timeliness:</strong> Near real-time changelog generation ensures data freshness and faster insights.</li>
+<li><strong>Resource Efficiency:</strong> By eliminating the need for computationally expensive operations, the architecture reduces resource consumption while maintaining high performance.</li>
+<li><strong>Seamless Integration:</strong> The direct compatibility between Fluss changelogs and Paimon changelog formats simplifies the process, enhancing system efficiency and reducing operational complexity.</li>
+</ol>
+<p>This architecture provides an elegant solution for use cases that demand both low-latency data updates and optimized resource utilization, making it a robust choice for modern data processing needs.</p>
+<h3 class="anchor anchorWithStickyNavbar_LWe7" id="enabling-multi-writer-support-for-paimon-partial-updates">Enabling Multi-Writer Support for Paimon Partial Updates<a href="#enabling-multi-writer-support-for-paimon-partial-updates" class="hash-link" aria-label="Direct link to Enabling Multi-Writer Support for Paimon Partial Updates" title="Direct link to Enabling Multi-Writer Support for Paimon Partial Updates"></a></h3>
+<p>Partial updates are a critical feature in Apache Paimon, particularly for managing large, wide tables. However, in the current Paimon architecture, performing partial updates on wide tables presents significant challenges:</p>
+<ul>
+<li><strong>Single Writer Limitation:</strong> To ensure consistency, all partial updates to a table must be consolidated into a single SQL job. This requires using a UNION statement to combine all partial update operations into a single pipeline, ensuring only one writer is responsible for updating the table.</li>
+<li><strong>Operational Complexity:</strong> Consolidating all updates into one job makes it difficult to manage and tune individual update operations, leading to challenges in scalability and flexibility.</li>
+</ul>
+<p>With Fluss and Paimon integration these limitations are eliminated</p>
+<p><img decoding="async" loading="lazy" alt="Unification Solutions" src="/assets/images/img7-8b8e86a6e036ca0f37b6d53f8fc5ae77.png" width="1833" height="783" class="img_ev3q"></p>
+<ul>
+<li><strong>Intermediate Synchronization via Fluss:</strong> All updates pass through Fluss, which serves as an intermediary layer to synchronize changes with Paimon.</li>
+<li><strong>Support for Concurrent Updates:</strong> Fluss enables concurrent updates from multiple SQL jobs, removing the need to consolidate updates into a single job.</li>
+<li><strong>Fine-Grained Job Management:</strong> With the ability to execute multiple independent SQL jobs for updating any number of columns in a wide table, users can perform job-level tuning and management, improving operational efficiency and flexibility.</li>
+</ul>
+<p>This enables organizations to unlock several key advantages:</p>
+<ul>
+<li><strong>High Real-Time Performance:</strong> Lakehouse storage achieves second-level data freshness, meeting the demands of real-time data applications.</li>
+<li><strong>Unified Streaming and Lakehouse Processing:</strong> Data is written once into the architecture and can seamlessly support both batch and streaming use cases, reducing duplication of effort.</li>
+<li><strong>Lower Operational Costs:</strong> Simplified maintenance and reduced complexity of partial updates, lower storage costs by minimizing data duplication and reduced computational costs by eliminating redundant processing pipelines.</li>
+</ul>
+<p>The Fluss and Paimon architecture offers a robust solution for managing partial updates in wide tables while delivering significant improvements in performance, scalability, and operational efficiency.</p>
+<p>All the above highlight the power of a unified streaming and Lakehouse architecture in modern data systems, ensuring real-time capabilities with streamlined workflows.</p>
+<h2 class="anchor anchorWithStickyNavbar_LWe7" id="future-plans">Future plans<a href="#future-plans" class="hash-link" aria-label="Direct link to Future plans" title="Direct link to Future plans"></a></h2>
+<p>The Fluss community is actively working to enhance the streaming and Lakehouse unification capabilities, focusing on the following key areas.</p>
+<h3 class="anchor anchorWithStickyNavbar_LWe7" id="expanding-union-read-ecosystem">Expanding Union Read Ecosystem<a href="#expanding-union-read-ecosystem" class="hash-link" aria-label="Direct link to Expanding Union Read Ecosystem" title="Direct link to Expanding Union Read Ecosystem"></a></h3>
+<p>Currently, Union Read functionality is integrated with Apache Flink, enabling seamless querying of real-time and historical data. Moving forward, the community plans to extend this capability to support additional query engines, such as Apache Spark and StarRocks, further broadening its ecosystem compatibility and adoption.</p>
+<h3 class="anchor anchorWithStickyNavbar_LWe7" id="diversifying-lake-storage-formats">Diversifying Lake Storage Formats<a href="#diversifying-lake-storage-formats" class="hash-link" aria-label="Direct link to Diversifying Lake Storage Formats" title="Direct link to Diversifying Lake Storage Formats"></a></h3>
+<p>At present, Fluss supports Apache Paimon as its primary lake storage. To meet diverse user requirements, the community aims to add support for more lake formats, including <strong>Apache Iceberg</strong> and <strong>Apache Hudi</strong>, thereby providing flexibility and interoperability with a wider range of Lakehouse ecosystems.</p>
+<h3 class="anchor anchorWithStickyNavbar_LWe7" id="optimizing-arrow-to-parquet-conversion">Optimizing Arrow-to-Parquet Conversion<a href="#optimizing-arrow-to-parquet-conversion" class="hash-link" aria-label="Direct link to Optimizing Arrow-to-Parquet Conversion" title="Direct link to Optimizing Arrow-to-Parquet Conversion"></a></h3>
+<p>Fluss leverages Apache Arrow as its storage format, while many Lakehouse formats, such as Paimon, Iceberg, and Hudi, utilize parquet for storage. The Apache Arrow community has developed a mature and efficient solution for converting Arrow data to Parquet. In the future, Fluss will integrate these advancements to enable high-performance Arrow-to-Parquet conversions, significantly reducing the computational overhead of the tiering service and enhancing overall efficiency.</p></div></ar [...]
+ Apache®, Apache Flink®, Flink®, Apache Kafka®, Kafka®, Spark® and associated open source project names and logos are trademarks of the Apache Software Foundation.</div></div></div></footer></div>
+</body>
+</html>
\ No newline at end of file
diff --git a/blog/unveil-fluss-logo/index.html b/blog/unveil-fluss-logo/index.html
new file mode 100644
index 0000000..39f211c
--- /dev/null
+++ b/blog/unveil-fluss-logo/index.html
@@ -0,0 +1,63 @@
+<!doctype html>
+<html lang="en" dir="ltr" class="blog-wrapper blog-post-page plugin-blog plugin-id-default" data-has-hydrated="false">
+<head>
+<meta charset="UTF-8">
+<meta name="generator" content="Docusaurus v3.8.1">
+<title data-rh="true">The Story of Fluss Logo | Fluss</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/docusaurus-social-card.jpg"><meta data-rh="true" name="twitter:image" content="https://fluss.apache.org/img/docusaurus-social-card.jpg"><meta data-rh="true" property="og:url" content="https://fluss.a [...]
+<link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Fluss Atom Feed">
+
+
+
+
+<link rel="search" type="application/opensearchdescription+xml" title="Fluss" href="/opensearch.xml">
+
+<link rel="icon" href="/img/logo.svg">
+<link rel="manifest" href="/manifest.json">
+<meta name="theme-color" content="#0071e3"><link rel="stylesheet" href="/assets/css/styles.3ca55d09.css">
+<script src="/assets/js/runtime~main.264c6f6f.js" defer="defer"></script>
+<script src="/assets/js/main.a06cb6b9.js" defer="defer"></script>
+</head>
+<body class="navigation-with-keyboard">
+<svg xmlns="http://www.w3.org/2000/svg" style="display: none;"><defs>
+<symbol id="theme-svg-external-link" viewBox="0 0 24 24"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"/></symbol>
+</defs></svg>
+<script>!function(){var t="light";var e=function(){try{return new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}}()||function(){try{return window.localStorage.getItem("theme")}catch(t){}}();document.documentElement.setAttribute("data-theme",e||t),document.documentElement.setAttribute("data-theme-choice",e||t)}(),function(){try{const c=new URLSearchParams(window.location.search).entries();for(var[t,e]of c)if(t.startsWith("docusaurus-data-")){var a=t.replace("do [...]
+<h2 class="anchor anchorWithStickyNavbar_LWe7" id="introducing-the-little-otter">Introducing the Little Otter<a href="#introducing-the-little-otter" class="hash-link" aria-label="Direct link to Introducing the Little Otter" title="Direct link to Introducing the Little Otter"></a></h2>
+<p>Today is <a href="https://www.otter.org/world-otter-day" target="_blank" rel="noopener noreferrer">World Otter Day</a>, and we are thrilled to introduce the little otter to the Fluss community! 🎉</p>
+<p>Since open-sourced half a year ago, many community members and friends have asked us:
+"When will Fluss get a logo?" After more than a month of careful design work and over 30 iterations, we’re excited to finally unveil the official Fluss logo — a surfing otter! 🦦🌊</p>
+<p>I don't want to interpret the symbolic meaning behind the Logo in a rigid way. Instead, I’d like to share the story behind its design — how we defined the direction and iterated step by step toward the final version. This process involved numerous subjective decisions made by the team. You might prefer one of the discarded versions, or disagree with some of the design choices. However, we want to share the journey with our community, and we hope it can also serve as a reference o [...]
+<h2 class="anchor anchorWithStickyNavbar_LWe7" id="logo-symbolism-what-do-we-want-to-convey">Logo symbolism: what do we want to convey?<a href="#logo-symbolism-what-do-we-want-to-convey" class="hash-link" aria-label="Direct link to Logo symbolism: what do we want to convey?" title="Direct link to Logo symbolism: what do we want to convey?"></a></h2>
+<p><a href="https://github.com/alibaba/fluss" target="_blank" rel="noopener noreferrer">Fluss</a> is an open-source streaming storage system designed for analytical workloads, with the goal of serving as a real-time data layer for Lakehouse architectures. Therefore, <em><strong>fluidity</strong></em> is the first key message we want to convey.</p>
+<p>Secondly, Fluss’s vision is to <strong>"Bring better analytics to data streams, and bring better freshness to data Lakehouses"</strong>. This requires the ability to adapt to multiple data lake formats and support a variety of query engines and compute engines. So, <em><strong>adaptability</strong></em> is the second core idea we want to convey.</p>
+<p>Additionally, as an open-source project planning to be donated to the Apache Software Foundation, building an open, diverse, and collaborative community has always been one of our core goals. In line with this value, we wanted the brand to express <em><strong>friendliness</strong></em>, which ultimately led us to choose animal as the logo design direction.</p>
+<p>We have also considered using abstract graphics for logo design. However, we noticed that many open-source projects that start with abstract logos, eventually introduce animal mascots to convey the friendliness of the community. These mascots not only play an important role in community outreach but also often replace the main logo in many contexts, becoming more representative visual symbols — such as Go’s gopher, Rust’s crab, and Airbyte’s octopus. Animal images are easier to get cl [...]
+<p><img decoding="async" loading="lazy" src="/assets/images/image1-6acb85f09ad799d93582a37896aabf30.png" width="2768" height="1604" class="img_ev3q"></p>
+<p>Therefore, we made clear the direction in the early stage of Fluss Logo design: use an Animal image to convey our concept of <strong>fluidity</strong>, <strong>adaptability</strong>, and <strong>friendliness</strong>. The project name "Fluss" comes from the German word for "river" (Fluss), and we also hope that this animal has a close relationship with the river. Combined with these characteristics, the first animal that comes to our mind is the <strong>otter</stro [...]
+<p><img decoding="async" loading="lazy" src="/assets/images/image2-b9a57e1c35eb09c32fa4fcd07406ceeb.png" width="2310" height="1242" class="img_ev3q"></p>
+<h2 class="anchor anchorWithStickyNavbar_LWe7" id="design-iterations-for-more-than-30-versions">Design iterations for more than 30 versions<a href="#design-iterations-for-more-than-30-versions" class="hash-link" aria-label="Direct link to Design iterations for more than 30 versions" title="Direct link to Design iterations for more than 30 versions"></a></h2>
+<p>After clarifying the design direction and core values of Fluss Logo, we began to communicate with the design team in depth and launched multiple rounds of iteration. However, in the early versions of the design, we still couldn’t find the right feel — something was missing: the fluidity.</p>
+<p><img decoding="async" loading="lazy" src="/assets/images/image3-37c9a30c044c5afbc6e35fa21c1793bc.png" width="1930" height="1014" class="img_ev3q"></p>
+<p>Therefore, we used ChatGPT to find inspiration, and tried a variety of prompt words, and this picture with a surfing wave quickly caught our eyes: dynamic, energy, speed, and flow, which is what we want! Although this otter looks like a Jerry rat... our design team quickly got our idea.</p>
+<p><img decoding="async" loading="lazy" src="/assets/images/image4-c4082ae4730f49472a0414543ab5075a.png" width="298" height="294" class="img_ev3q"></p>
+<p>Based on the core elements of “otter” + “surfing”, we started a new round of design, and we iterated more than 20 versions based on this and finally evolved to the version you see today.</p>
+<p><img decoding="async" loading="lazy" src="/assets/images/image5-7b6a1c8656ea141b803b8787e89d75df.png" width="2626" height="1204" class="img_ev3q"></p>
+<p>Subsequently, we also made many variations of the logo to adapt to different environments and background colors.</p>
+<p><img decoding="async" loading="lazy" src="/assets/images/image6-ec1c384b777aef0f617d3fcb08a5e39e.png" width="1900" height="1048" class="img_ev3q"></p>
+<h2 class="anchor anchorWithStickyNavbar_LWe7" id="get-feedback-from-community-users">Get feedback from community users<a href="#get-feedback-from-community-users" class="hash-link" aria-label="Direct link to Get feedback from community users" title="Direct link to Get feedback from community users"></a></h2>
+<p>Designing a logo is a highly subjective process. But for an open-source project, the goal isn't to please the founding team — it's to resonate with the community. That’s why we've always valued community feedback and used it to guide our iterations.</p>
+<p>Some of the community feedback I loved very much:</p>
+<ul>
+<li>"The Fluss otter seems to be a sibling to Flink's squirrel."</li>
+<li>"I see Paimon in it!"</li>
+<li>"It's soooo cute!"</li>
+</ul>
+<p>Give it some ❤️ via ⭐ on GitHub if you like it as well!
+<a href="https://github.com/alibaba/fluss" target="_blank" rel="noopener noreferrer">https://github.com/alibaba/fluss</a></p>
+<h2 class="anchor anchorWithStickyNavbar_LWe7" id="community-egg">Community Egg<a href="#community-egg" class="hash-link" aria-label="Direct link to Community Egg" title="Direct link to Community Egg"></a></h2>
+<p>At the time of the Fluss logo release, we also submitted an <a href="https://lists.apache.org/thread/osg23opm9x95xm318160808r984k0wk9" target="_blank" rel="noopener noreferrer">incubation proposal</a> to the Apache Software Foundation, thanks to the strong support from our incubation mentors Yu Li, tison, Jingsong Lee, Becket Qin, and Jean-Baptiste. We're confident that Fluss will soon become one of the Apache projects.</p>
+<p>In parallel, we’ve designed and launched a series of Fluss community gifts, including stickers, t-shirts, and coffee cups. These items will be available at upcoming community events — stay tuned and pick your swags!</p>
+<p><img decoding="async" loading="lazy" src="/assets/images/image7-246c5eae97745ed3ae9872e84a86b134.png" width="1130" height="633" class="img_ev3q"></p></div></article><nav class="pagination-nav docusaurus-mt-lg" aria-label="Blog post page navigation"><a class="pagination-nav__link pagination-nav__link--prev" href="/blog/partial-updates/"><div class="pagination-nav__sublabel">Newer post</div><div class="pagination-nav__label">Understanding Partial Updates</div></a><a class="pagination-na [...]
+ Apache®, Apache Flink®, Flink®, Apache Kafka®, Kafka®, Spark® and associated open source project names and logos are trademarks of the Apache Software Foundation.</div></div></div></footer></div>
+</body>
+</html>
\ No newline at end of file
diff --git a/blog/why-fluss/index.html b/blog/why-fluss/index.html
new file mode 100644
index 0000000..d64f388
--- /dev/null
+++ b/blog/why-fluss/index.html
@@ -0,0 +1,88 @@
+<!doctype html>
+<html lang="en" dir="ltr" class="blog-wrapper blog-post-page plugin-blog plugin-id-default" data-has-hydrated="false">
+<head>
+<meta charset="UTF-8">
+<meta name="generator" content="Docusaurus v3.8.1">
+<title data-rh="true">Why Fluss? Top 4 Challenges of Using Kafka for Real-Time Analytics | Fluss</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/docusaurus-social-card.jpg"><meta data-rh="true" name="twitter:image" content="https://fluss.apache.org/img/docusaurus-social-card.jpg"><meta data-rh="true" [...]
+<link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Fluss Atom Feed">
+
+
+
+
+<link rel="search" type="application/opensearchdescription+xml" title="Fluss" href="/opensearch.xml">
+
+<link rel="icon" href="/img/logo.svg">
+<link rel="manifest" href="/manifest.json">
+<meta name="theme-color" content="#0071e3"><link rel="stylesheet" href="/assets/css/styles.3ca55d09.css">
+<script src="/assets/js/runtime~main.264c6f6f.js" defer="defer"></script>
+<script src="/assets/js/main.a06cb6b9.js" defer="defer"></script>
+</head>
+<body class="navigation-with-keyboard">
+<svg xmlns="http://www.w3.org/2000/svg" style="display: none;"><defs>
+<symbol id="theme-svg-external-link" viewBox="0 0 24 24"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"/></symbol>
+</defs></svg>
+<script>!function(){var t="light";var e=function(){try{return new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}}()||function(){try{return window.localStorage.getItem("theme")}catch(t){}}();document.documentElement.setAttribute("data-theme",e||t),document.documentElement.setAttribute("data-theme-choice",e||t)}(),function(){try{const c=new URLSearchParams(window.location.search).entries();for(var[t,e]of c)if(t.startsWith("docusaurus-data-")){var a=t.replace("do [...]
+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>
+<p><img decoding="async" loading="lazy" alt="FF Announcement" src="/assets/images/img1-a29d423ce0b5f952b79ad2babb903cf5.jpg" width="3656" height="1240" class="img_ev3q">
+The evolution of big data technology is becoming increasingly impactful, reshaping the computing architecture landscape.
+The traditional Hive-based data warehouse has given way to modern architectures, starting with Lakehouse models and progressing
+to the Paimon streaming Lakehouse, which has gained significant traction in markets like China and more recently started expanding to EU/US markets.
+The core driver behind these architectural innovations is the need to improve data processing timeliness. The data freshness is improved from traditional
+T+1 (next-day readiness) to T+1 hours, and now T+1 minutes. However, Lakehouse architectures, being file-system-based,
+inherently face minute-level latency as their practical upper limit.</p>
+<p>Yet, many critical use cases, such as search and recommendation systems, advertisement attribution, and anomaly detection, demand second-level latency.
+While big data technologies have advanced significantly, there remains a notable gap: a user-friendly, second-level storage solution tailored for big data analytics.</p>
+<p>In most real-time data scenarios, Apache Kafka has emerged as the go-to second-level storage solution. Its integration with Apache Flink represents the dominant architecture for building real-time data warehouses. However, while widely adopted, this combination presents significant challenges for achieving true real-time analytics at scale. The limitations of using Kafka for big data analytics highlight the need for a more robust solution to meet the demands of modern real-time use ca [...]
+<h2 class="anchor anchorWithStickyNavbar_LWe7" id="kafka-falls-short-in-real-time-analytics">Kafka Falls Short in Real-Time Analytics<a href="#kafka-falls-short-in-real-time-analytics" class="hash-link" aria-label="Direct link to Kafka Falls Short in Real-Time Analytics" title="Direct link to Kafka Falls Short in Real-Time Analytics"></a></h2>
+<h3 class="anchor anchorWithStickyNavbar_LWe7" id="no-support-for-updates">No Support for Updates<a href="#no-support-for-updates" class="hash-link" aria-label="Direct link to No Support for Updates" title="Direct link to No Support for Updates"></a></h3>
+<p>The first significant challenge with Apache Kafka is its lack of support for updates, a critical feature for data warehouses. In data warehousing, updates are often essential to correct or amend data. However, Kafka's inability to handle updates results in duplicate records for the same primary key. When consumed by a computing engine, this duplication necessitates costly deduplication processes to ensure accurate results.</p>
+<p><img decoding="async" loading="lazy" alt="FF Announcement" src="/assets/images/img2-d2d1a314768a1be3da0308e20851d3f3.jpg" width="3656" height="1172" class="img_ev3q"></p>
+<p>In Apache Flink, for instance, handling this issue requires materializing all upstream data in state, which is resource-intensive. Every time data is consumed from Kafka, the deduplication process incurs a substantial overhead, significantly increasing computational and storage costs. This limitation not only impacts performance but also hampers the reusability of Kafka-stored data for downstream business processes.</p>
+<h3 class="anchor anchorWithStickyNavbar_LWe7" id="lack-of-querying-capabilities">Lack of Querying Capabilities<a href="#lack-of-querying-capabilities" class="hash-link" aria-label="Direct link to Lack of Querying Capabilities" title="Direct link to Lack of Querying Capabilities"></a></h3>
+<p>The second major limitation of Apache Kafka is hard to debug, primarily due to its lack of native querying capabilities. In data warehousing, querying is a fundamental feature that facilitates troubleshooting and ad-hoc analysis to understand data trends. Unfortunately, Kafka operates much like a black box, making it challenging to perform these critical tasks without additional tools or layers.</p>
+<p><img decoding="async" loading="lazy" alt="FF Announcement" src="/assets/images/img3-32732f50a5420dad7d1dd6c5b3d17d6f.jpg" width="3696" height="1214" class="img_ev3q"></p>
+<p>To address this limitation, the industry has adopted two primary approaches, each with its own trade-offs:</p>
+<ul>
+<li><strong>Synchronizing Kafka Data to an OLAP System:</strong> This allows for querying data using the OLAP system’s capabilities. However, this approach introduces additional components into the architecture, increasing both complexity and cost. Moreover, it risks data inconsistencies due to synchronization delays.</li>
+<li><strong>Querying Kafka Directly Using Trino:</strong> While Trino can query Kafka, it relies solely on full scans, which are inefficient for large-scale operations. For instance, a simple query on just 1GB of Kafka data can take up to one minute, rendering it impractical for large datasets or real-time requirements.</li>
+</ul>
+<p>These limitations make Kafka unsuitable for efficient and scalable data exploration in modern data warehousing workflows.</p>
+<h3 class="anchor anchorWithStickyNavbar_LWe7" id="difficulty-with-data-backfilling">Difficulty with Data Backfilling<a href="#difficulty-with-data-backfilling" class="hash-link" aria-label="Direct link to Difficulty with Data Backfilling" title="Direct link to Difficulty with Data Backfilling"></a></h3>
+<p><img decoding="async" loading="lazy" alt="FF Announcement" src="/assets/images/img4-5a57c638bb5dd478a86a9fcd1683734f.jpg" width="3526" height="1210" class="img_ev3q">
+The third significant issue with Apache Kafka is processing historical data, also known as data backfilling, a common requirement in data warehousing.
+For instance, in logistics, it usually needs to process and analyze historical data from several months ago. However, Kafka only retain data for a few days due to the high cost of storage.
+Even though Kafka community has introduced <a href="https://cwiki.apache.org/confluence/display/KAFKA/KIP-405%3A+Kafka+Tiered+Storage" target="_blank" rel="noopener noreferrer">Tiered Storage</a> to address the long-term data issue, it still has limitations.
+Reading historical data still require all the data to pass through Kafka brokers, which can lead to brokers unstable and <a href="https://www.warpstream.com/blog/tiered-storage-wont-fix-kafka#increased-complexity-and-operational-burden" target="_blank" rel="noopener noreferrer">disrupt live traffics</a>.</p>
+<p>These limitations highlight Kafka’s inefficiency as a solution for data backfilling in large-scale and long-term analytical use cases, further underscoring the need for more robust alternatives in real-time data warehousing.</p>
+<h3 class="anchor anchorWithStickyNavbar_LWe7" id="excessive-network-costs">Excessive Network Costs<a href="#excessive-network-costs" class="hash-link" aria-label="Direct link to Excessive Network Costs" title="Direct link to Excessive Network Costs"></a></h3>
+<p>The final major challenge with Apache Kafka lies in its high network costs, which account for an estimated 88% of Kafka's overall operational expenses. In data warehousing, the "one write, multiple read" pattern is common, with each consumer often requiring only a subset of the data. However, Kafka's design mandates that consumers read the entire dataset, regardless of how much is actually needed.</p>
+<p><img decoding="async" loading="lazy" alt="FF Announcement" src="/assets/images/img5-e185731d5e249a6c80b962b77b5a16ad.jpg" width="3636" height="1206" class="img_ev3q"></p>
+<p>For instance, among the tens of thousands of Flink SQL jobs at Alibaba, only 49% of the upstream columns are utilized per job on average. Despite this, consumers must read all the columns and pay 100% networking cost, which is highly inefficient and wasteful.</p>
+<p>In summary, using Kafka for real-time analytics presents several critical issues: <strong>(1) lack of support for updates</strong>, <strong>(2) absence of querying capabilities</strong>, <strong>(3) difficulty with data backfilling</strong>, and <strong>(4) excessive network costs</strong>. These limitations make the combination of Flink and Kafka less than ideal for real-time data warehousing.
+But why Kafka lacks these abilities? Is it possible to add the abilities to Kafka?</p>
+<h2 class="anchor anchorWithStickyNavbar_LWe7" id="kafka-is-not-designed-for-analytics">Kafka is not designed for Analytics<a href="#kafka-is-not-designed-for-analytics" class="hash-link" aria-label="Direct link to Kafka is not designed for Analytics" title="Direct link to Kafka is not designed for Analytics"></a></h2>
+<p><img decoding="async" loading="lazy" alt="FF Announcement" src="/assets/images/img6-4741286b7e5d1410d5a8d7036e3cad8d.jpg" width="3620" height="1148" class="img_ev3q">
+The root cause of these challenges lies in the fundamental design philosophy of Kafka: <strong>Kafka is designed for streaming events, NOT for streaming analytics</strong>. Each system has its own focus and strengths, and Kafka's design is optimized for message queue scenarios rather than analytical workloads.</p>
+<p>In Kafka, data is typically stored in a row-oriented format, such as CSV, JSON, or Avro.
+While this is highly efficient for use cases involving message streaming, it becomes a bottleneck for analytical scenarios.
+Data analysis requires handling large volumes of data, and therefore heavily relies on data skipping capabilities from storage, such as column pruning and predicate pushdown.
+For this reason, columnar storage is far better suited for analytical workloads, whereas Kafka's row-based storage is not designed to meet these demands effectively.</p>
+<h2 class="anchor anchorWithStickyNavbar_LWe7" id="introducing-fluss">Introducing Fluss<a href="#introducing-fluss" class="hash-link" aria-label="Direct link to Introducing Fluss" title="Direct link to Introducing Fluss"></a></h2>
+<p><img decoding="async" loading="lazy" alt="FF Announcement" src="/assets/images/img7-06886bca9797751895c82d707cb04b2d.jpg" width="3644" height="1210" class="img_ev3q">
+When visualizing the data ecosystem as a four-quadrant matrix, an intriguing pattern emerges.
+The left side of the matrix represents operational systems, while the right side represents analytical systems.
+The top half is dedicated to stream storage, and the bottom half to table storage.
+In operational systems, both databases and stream storage predominantly use row-based formats, as row storage is more efficient for transactional workloads. Conversely, in analytical systems like Apache Iceberg and Snowflake, columnar storage is preferred due to its superior performance in analytical scenarios.</p>
+<p>Interestingly, the upper-right quadrant of the matrix remains empty, indicating a significant gap in the market: a streaming storage for analytical scenarios. Unsurprisingly, such a storage would likely adopt a columnar format to effectively address the needs of real-time analytics.</p>
+<p>To fill the gap and resolve problems in Flink and streaming analytics, we embarked on a journey two years ago to create a streaming storage. We named the project "<strong>FL</strong>ink <strong>U</strong>nified <strong>S</strong>treaming <strong>S</strong>torage", and from its initials, we derived the name <strong>Fluss</strong>.
+<img decoding="async" loading="lazy" alt="FF Announcement" src="/assets/images/img8-87cfb5887e9a49febaacd805de5216fe.jpg" width="3700" height="946" class="img_ev3q">
+Interestingly, Flink is derived from the German word for "<strong>agile</strong>", and Fluss, which translates to "<strong>river</strong>" in German, resonates deeply with the project’s vision.
+It symbolizes the streaming data is continuously flowing, distributing and converging into data lakes, just like a river.
+The launch of Fluss coincides with Flink's 10th anniversary, making it a fitting tribute to the project’s heritage and its enduring contribution to the streaming data landscape.</p>
+<p><img decoding="async" loading="lazy" alt="FF Announcement" src="/assets/images/img9-fb689d41f612ef840508c4c20399822c.jpg" width="3686" height="1242" class="img_ev3q"></p>
+<p>Learn more details about Fluss in the next <a href="/blog/fluss-intro/">blog post</a>, where we will delve deeper into Fluss's architecture, design principles, key features, and explore how it addresses the challenges of using Kafka for real-time analytics.</p></div></article><nav class="pagination-nav docusaurus-mt-lg" aria-label="Blog post page navigation"><a class="pagination-nav__link pagination-nav__link--prev" href="/blog/fluss-intro/"><div class="pagination-nav__sublabel"> [...]
+ Apache®, Apache Flink®, Flink®, Apache Kafka®, Kafka®, Spark® and associated open source project names and logos are trademarks of the Apache Software Foundation.</div></div></div></footer></div>
+</body>
+</html>
\ No newline at end of file
diff --git a/community/dev/building/index.html b/community/dev/building/index.html
new file mode 100644
index 0000000..140a014
--- /dev/null
+++ b/community/dev/building/index.html
@@ -0,0 +1,56 @@
+<!doctype html>
+<html lang="en" dir="ltr" class="docs-wrapper plugin-docs plugin-id-community docs-version-current docs-doc-page docs-doc-id-dev/building" data-has-hydrated="false">
+<head>
+<meta charset="UTF-8">
+<meta name="generator" content="Docusaurus v3.8.1">
+<title data-rh="true">Building Fluss | Fluss</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/docusaurus-social-card.jpg"><meta data-rh="true" name="twitter:image" content="https://fluss.apache.org/img/docusaurus-social-card.jpg"><meta data-rh="true" property="og:url" content="https://fluss.apache.org [...]
+<link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Fluss Atom Feed">
+
+
+
+
+<link rel="search" type="application/opensearchdescription+xml" title="Fluss" href="/opensearch.xml">
+
+<link rel="icon" href="/img/logo.svg">
+<link rel="manifest" href="/manifest.json">
+<meta name="theme-color" content="#0071e3"><link rel="stylesheet" href="/assets/css/styles.3ca55d09.css">
+<script src="/assets/js/runtime~main.264c6f6f.js" defer="defer"></script>
+<script src="/assets/js/main.a06cb6b9.js" defer="defer"></script>
+</head>
+<body class="navigation-with-keyboard">
+<svg xmlns="http://www.w3.org/2000/svg" style="display: none;"><defs>
+<symbol id="theme-svg-external-link" viewBox="0 0 24 24"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"/></symbol>
+</defs></svg>
+<script>!function(){var t="light";var e=function(){try{return new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}}()||function(){try{return window.localStorage.getItem("theme")}catch(t){}}();document.documentElement.setAttribute("data-theme",e||t),document.documentElement.setAttribute("data-theme-choice",e||t)}(),function(){try{const c=new URLSearchParams(window.location.search).entries();for(var[t,e]of c)if(t.startsWith("docusaurus-data-")){var a=t.replace("do [...]
+<p>This page covers how to build Fluss from sources.</p>
+<p>In order to build Fluss you need to get the source code by <a href="https://github.com/alibaba/fluss" target="_blank" rel="noopener noreferrer">cloning the git repository</a>.</p>
+<p>In addition, you need <strong>Maven 3.8.6</strong> and a <strong>JDK</strong> (Java Development Kit). Fluss requires <strong>Java 8 or Java 11</strong> to build.</p>
+<div class="theme-admonition theme-admonition-tip admonition_xJq3 alert alert--success"><div class="admonitionHeading_Gvgb"><span class="admonitionIcon_Rf37"><svg viewBox="0 0 12 16"><path fill-rule="evenodd" d="M6.5 0C3.48 0 1 2.19 1 5c0 .92.55 2.25 1 3 1.34 2.25 1.78 2.78 2 4v1h5v-1c.22-1.22.66-1.75 2-4 .45-.75 1-2.08 1-3 0-2.81-2.48-5-5.5-5zm3.64 7.48c-.25.44-.47.8-.67 1.11-.86 1.41-1.25 2.06-1.45 3.23-.02.05-.02.11-.02.17H5c0-.06 0-.13-.02-.17-.2-1.17-.59-1.83-1.45-3.23-.2-.31-.42-.6 [...]
+<li>It is recommended to use JDK 1.8.3 if you're using Java 8 and encounter an error like <code>java.lang.NoSuchMethodError: 'java.nio.MappedByteBuffer java.nio.MappedByteBuffer.duplicate()'</code>.</li>
+<li>Setting the environment variable via <code>export JAVA_TOOL_OPTIONS="-XX:+UnlockExperimentalVMOptions"</code> is useful if you encounter an error <code>VM option 'UseG1GC' is experimental and must be enabled via -XX:+UnlockExperimentalVMOptions</code>.</li>
+</ul></div></div>
+<p>To clone from git, enter:</p>
+<div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#9CDCFE;--prism-background-color:#1E1E1E"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style="color:#9CDCFE;background-color:#1E1E1E"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#9CDCFE"><span class="token function" style="color:rgb(220, 220, 170)">git</span><span class="token plain"> clone git@github.c [...]
+<p>If you want to build a specific release or release candidate, have a look at the existing tags using</p>
+<div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#9CDCFE;--prism-background-color:#1E1E1E"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style="color:#9CDCFE;background-color:#1E1E1E"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#9CDCFE"><span class="token function" style="color:rgb(220, 220, 170)">git</span><span class="token plain"> tag </span><span c [...]
+<p>and checkout the corresponding branch using</p>
+<div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#9CDCFE;--prism-background-color:#1E1E1E"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style="color:#9CDCFE;background-color:#1E1E1E"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#9CDCFE"><span class="token function" style="color:rgb(220, 220, 170)">git</span><span class="token plain"> checkout </span><s [...]
+<p>The simplest way of building Fluss is by running:</p>
+<div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#9CDCFE;--prism-background-color:#1E1E1E"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style="color:#9CDCFE;background-color:#1E1E1E"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#9CDCFE"><span class="token plain">mvn clean </span><span class="token function" style="color:rgb(220, 220, 170)">install</spa [...]
+<p>This instructs <a href="http://maven.apache.org" target="_blank" rel="noopener noreferrer">Maven</a> (<code>mvn</code>) to first remove all existing builds (<code>clean</code>) and then create a new Fluss binary (<code>install</code>).</p>
+<div class="theme-admonition theme-admonition-tip admonition_xJq3 alert alert--success"><div class="admonitionHeading_Gvgb"><span class="admonitionIcon_Rf37"><svg viewBox="0 0 12 16"><path fill-rule="evenodd" d="M6.5 0C3.48 0 1 2.19 1 5c0 .92.55 2.25 1 3 1.34 2.25 1.78 2.78 2 4v1h5v-1c.22-1.22.66-1.75 2-4 .45-.75 1-2.08 1-3 0-2.81-2.48-5-5.5-5zm3.64 7.48c-.25.44-.47.8-.67 1.11-.86 1.41-1.25 2.06-1.45 3.23-.02.05-.02.11-.02.17H5c0-.06 0-.13-.02-.17-.2-1.17-.59-1.83-1.45-3.23-.2-.31-.42-.6 [...]
+<p>To speed up the build you can:</p>
+<ul>
+<li>skip tests by using <code> -DskipTests</code></li>
+<li>use Maven's parallel build feature, e.g., <code>mvn package -T 1C</code> will attempt to build 1 module for each CPU core in parallel.</li>
+</ul>
+<p>The build script will be:</p>
+<div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#9CDCFE;--prism-background-color:#1E1E1E"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style="color:#9CDCFE;background-color:#1E1E1E"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#9CDCFE"><span class="token plain">mvn clean </span><span class="token function" style="color:rgb(220, 220, 170)">install</spa [...]
+<p><strong>NOTE</strong>:</p>
+<ul>
+<li>For local testing, it's recommend to use directory <code>${project}/build-target</code> in project.</li>
+<li>For deploying distributed cluster, it's recommend to use binary file named <code>fluss-xxx-bin.tgz</code>, the file is in directory <code>${project}/fluss-dist/target</code>.</li>
+</ul></div><footer class="theme-doc-footer docusaurus-mt-lg"><div class="row margin-top--sm theme-doc-footer-edit-meta-row"><div class="col"><a href="https://github.com/apache/fluss/edit/main/website/community/dev/building.md" target="_blank" rel="noopener noreferrer" class="theme-edit-this-page"><svg fill="currentColor" height="20" width="20" viewBox="0 0 40 40" class="iconEdit_Z9Sw" aria-hidden="true"><g><path d="m34.5 11.7l-3 3.1-6.3-6.3 3.1-3q0.5-0.5 1.2-0.5t1.1 0.5l3.9 3.9q0.5 0.4 0 [...]
+ Apache®, Apache Flink®, Flink®, Apache Kafka®, Kafka®, Spark® and associated open source project names and logos are trademarks of the Apache Software Foundation.</div></div></div></footer></div>
+</body>
+</html>
\ No newline at end of file
diff --git a/community/dev/ide-setup/index.html b/community/dev/ide-setup/index.html
new file mode 100644
index 0000000..5c9b5d7
--- /dev/null
+++ b/community/dev/ide-setup/index.html
@@ -0,0 +1,169 @@
+<!doctype html>
+<html lang="en" dir="ltr" class="docs-wrapper plugin-docs plugin-id-community docs-version-current docs-doc-page docs-doc-id-dev/ide-setup" data-has-hydrated="false">
+<head>
+<meta charset="UTF-8">
+<meta name="generator" content="Docusaurus v3.8.1">
+<title data-rh="true">IDE Setup | Fluss</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/docusaurus-social-card.jpg"><meta data-rh="true" name="twitter:image" content="https://fluss.apache.org/img/docusaurus-social-card.jpg"><meta data-rh="true" property="og:url" content="https://fluss.apache.org/comm [...]
+<link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Fluss Atom Feed">
+
+
+
+
+<link rel="search" type="application/opensearchdescription+xml" title="Fluss" href="/opensearch.xml">
+
+<link rel="icon" href="/img/logo.svg">
+<link rel="manifest" href="/manifest.json">
+<meta name="theme-color" content="#0071e3"><link rel="stylesheet" href="/assets/css/styles.3ca55d09.css">
+<script src="/assets/js/runtime~main.264c6f6f.js" defer="defer"></script>
+<script src="/assets/js/main.a06cb6b9.js" defer="defer"></script>
+</head>
+<body class="navigation-with-keyboard">
+<svg xmlns="http://www.w3.org/2000/svg" style="display: none;"><defs>
+<symbol id="theme-svg-external-link" viewBox="0 0 24 24"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"/></symbol>
+</defs></svg>
+<script>!function(){var t="light";var e=function(){try{return new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}}()||function(){try{return window.localStorage.getItem("theme")}catch(t){}}();document.documentElement.setAttribute("data-theme",e||t),document.documentElement.setAttribute("data-theme-choice",e||t)}(),function(){try{const c=new URLSearchParams(window.location.search).entries();for(var[t,e]of c)if(t.startsWith("docusaurus-data-")){var a=t.replace("do [...]
+<p>The sections below describe how to import the Fluss project into an IDE
+for the development of Fluss itself.</p>
+<div class="theme-admonition theme-admonition-note admonition_xJq3 alert alert--secondary"><div class="admonitionHeading_Gvgb"><span class="admonitionIcon_Rf37"><svg viewBox="0 0 14 16"><path fill-rule="evenodd" d="M6.3 5.69a.942.942 0 0 1-.28-.7c0-.28.09-.52.28-.7.19-.18.42-.28.7-.28.28 0 .52.09.7.28.18.19.28.42.28.7 0 .28-.09.52-.28.7a1 1 0 0 1-.7.3c-.28 0-.52-.11-.7-.3zM8 7.99c-.02-.25-.11-.48-.31-.69-.2-.19-.42-.3-.69-.31H6c-.27.02-.48.13-.69.31-.2.2-.3.44-.31.69h1v3c.02.27.11.5.31.6 [...]
+command line first (<code>mvn clean package -DskipTests</code>) as it might be your IDE
+that has a bug or is not properly set up.</p></div></div>
+<div class="theme-admonition theme-admonition-tip admonition_xJq3 alert alert--success"><div class="admonitionHeading_Gvgb"><span class="admonitionIcon_Rf37"><svg viewBox="0 0 12 16"><path fill-rule="evenodd" d="M6.5 0C3.48 0 1 2.19 1 5c0 .92.55 2.25 1 3 1.34 2.25 1.78 2.78 2 4v1h5v-1c.22-1.22.66-1.75 2-4 .45-.75 1-2.08 1-3 0-2.81-2.48-5-5.5-5zm3.64 7.48c-.25.44-.47.8-.67 1.11-.86 1.41-1.25 2.06-1.45 3.23-.02.05-.02.11-.02.17H5c0-.06 0-.13-.02-.17-.2-1.17-.59-1.83-1.45-3.23-.2-.31-.42-.6 [...]
+<h2 class="anchor anchorWithStickyNavbar_LWe7" id="preparation-fork-and-clone-the-fluss-repository">Preparation: Fork and Clone the Fluss Repository<a href="#preparation-fork-and-clone-the-fluss-repository" class="hash-link" aria-label="Direct link to Preparation: Fork and Clone the Fluss Repository" title="Direct link to Preparation: Fork and Clone the Fluss Repository"></a></h2>
+<p>Fluss uses <a href="http://git-scm.com/" target="_blank" rel="noopener noreferrer">git</a> for version control.
+The Git repository is mirrored to <a href="https://github.com/alibaba/fluss/" target="_blank" rel="noopener noreferrer">GitHub</a>.</p>
+<p>The common way to merge code changes on GitHub is to fork the repository (creating a copy of the repository to your personal GitHub account so you can modify the source code) and issue a pull request.</p>
+<ol>
+<li>To fork the Fluss repository, log in with your GitHub account. If you do not have one yet, <a href="https://github.com/signup" target="_blank" rel="noopener noreferrer">sign up for free</a>. Then, click the <code>[Fork]</code> button on the upper right of the <a href="https://github.com/alibaba/fluss/" target="_blank" rel="noopener noreferrer">Fluss repository</a>.</li>
+<li>Clone the <em>forked</em> version of the repository over HTTPs or SSH. SSH is recommended but needs to be <a href="https://docs.github.com/en/authentication/connecting-to-github-with-ssh" target="_blank" rel="noopener noreferrer">explicitly configured</a>.</li>
+</ol>
+<div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#9CDCFE;--prism-background-color:#1E1E1E"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style="color:#9CDCFE;background-color:#1E1E1E"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#9CDCFE"><span class="token comment" style="color:rgb(106, 153, 85)"># Clone using HTTPs</span><span class="token plain"></spa [...]
+<div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#9CDCFE;--prism-background-color:#1E1E1E"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style="color:#9CDCFE;background-color:#1E1E1E"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#9CDCFE"><span class="token comment" style="color:rgb(106, 153, 85)"># Clone using SSH</span><span class="token plain"></span> [...]
+<h2 class="anchor anchorWithStickyNavbar_LWe7" id="intellij-idea">IntelliJ IDEA<a href="#intellij-idea" class="hash-link" aria-label="Direct link to IntelliJ IDEA" title="Direct link to IntelliJ IDEA"></a></h2>
+<p>The following guide has been written for <a href="https://www.jetbrains.com/idea/download/" target="_blank" rel="noopener noreferrer">IntelliJ IDEA</a>
+2024.3. Some details might differ in other versions. Please make sure to follow all steps</p>
+<h3 class="anchor anchorWithStickyNavbar_LWe7" id="importing-fluss">Importing Fluss<a href="#importing-fluss" class="hash-link" aria-label="Direct link to Importing Fluss" title="Direct link to Importing Fluss"></a></h3>
+<ol>
+<li>Choose "New" → "Project from Existing Sources".</li>
+<li>Select the root folder of the cloned Fluss repository.</li>
+<li>Choose "Import project from external model" and select "Maven".</li>
+<li>Leave the default options and successively click "Next" until you reach the SDK section.</li>
+<li>If there is no SDK listed, create one using the "+" sign on the top left.
+Select "JDK", choose the JDK home directory and click "OK".
+Select the most suitable JDK version. NOTE: A good rule of thumb is to select
+the JDK version matching the active Maven profile.</li>
+<li>Continue by clicking "Next" until the import is finished.</li>
+<li>Open the "Maven" tab (or right-click on the imported project and find "Maven") and run
+"Generate Sources and Update Folders". Alternatively, you can run
+<code>mvn clean package -DskipTests</code>.</li>
+<li>Build the Project ("Build" → "Build Project").</li>
+</ol>
+<h3 class="anchor anchorWithStickyNavbar_LWe7" id="copyright-profile">Copyright Profile<a href="#copyright-profile" class="hash-link" aria-label="Direct link to Copyright Profile" title="Direct link to Copyright Profile"></a></h3>
+<p>Every file needs to include the Alibaba license as a header. This can be automated in IntelliJ by
+adding a Copyright profile:</p>
+<ol>
+<li>Go to "Settings" → "Editor" → "Copyright" → "Copyright Profiles".</li>
+<li>Add a new profile and name it "Alibaba".</li>
+<li>Add the following text as the license text:</li>
+</ol>
+<div class="language-text codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#9CDCFE;--prism-background-color:#1E1E1E"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar" style="color:#9CDCFE;background-color:#1E1E1E"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#9CDCFE"><span class="token plain">Licensed to the Apache Software Foundation (ASF) under one</span><br></span><span class="to [...]
+<ol start="4">
+<li>Go to "Editor" → "Copyright" and choose the "Alibaba" profile as the default profile for this
+project.</li>
+<li>Click "Apply".</li>
+</ol>
+<h3 class="anchor anchorWithStickyNavbar_LWe7" id="required-plugins">Required Plugins<a href="#required-plugins" class="hash-link" aria-label="Direct link to Required Plugins" title="Direct link to Required Plugins"></a></h3>
+<p>Go to "Settings" → "Plugins" and select the "Marketplace" tab. Search for the following plugins,
+install them, and restart the IDE if prompted:</p>
+<ul>
+<li><a href="https://plugins.jetbrains.com/plugin/22113-save-actions-x" target="_blank" rel="noopener noreferrer">Save Actions X</a></li>
+<li><a href="https://plugins.jetbrains.com/plugin/1065-checkstyle-idea" target="_blank" rel="noopener noreferrer">Checkstyle-IDEA</a></li>
+</ul>
+<p>You will also need to install the <a href="https://github.com/google/google-java-format" target="_blank" rel="noopener noreferrer">google-java-format</a>
+plugin. However, a specific version of this plugin is required. Download
+<a href="https://plugins.jetbrains.com/plugin/8527-google-java-format/versions/stable/115957" target="_blank" rel="noopener noreferrer">google-java-format v1.7.0.6</a>
+and install it as follows. <strong>Make sure to never update this plugin</strong>.</p>
+<ol>
+<li>Go to "Settings" → "Plugins".</li>
+<li>Click the gear icon and select "Install Plugin from Disk".</li>
+<li>Navigate to the downloaded ZIP file and select it.</li>
+</ol>
+<h4 class="anchor anchorWithStickyNavbar_LWe7" id="code-formatting">Code Formatting<a href="#code-formatting" class="hash-link" aria-label="Direct link to Code Formatting" title="Direct link to Code Formatting"></a></h4>
+<p>Fluss uses <a href="https://github.com/diffplug/spotless/tree/main/plugin-maven" target="_blank" rel="noopener noreferrer">Spotless</a> together with
+<a href="https://github.com/google/google-java-format" target="_blank" rel="noopener noreferrer">google-java-format</a> to format the Java code.</p>
+<p>It is recommended to automatically format your code by applying the following settings:</p>
+<ol>
+<li>Go to "Settings" → "Other Settings" → "google-java-format Settings".</li>
+<li>Tick the checkbox to enable the plugin.</li>
+<li>Change the code style to "Android Open Source Project (AOSP) style".</li>
+<li>Go to "Settings" → "Tools" → "Actions on Save".</li>
+<li>Under "Formatting Actions", select "Optimize imports" and "Reformat code".</li>
+<li>From the "All file types list" next to "Reformat code", select Java and Scala.</li>
+</ol>
+<p>For earlier IntelliJ IDEA versions:</p>
+<ol start="4">
+<li>Go to "Settings" → "Other Settings" → "Save Actions".</li>
+<li>Under "General", enable your preferred settings for when to format the code, e.g. "Activate save actions on save".</li>
+<li>Under "Formatting Actions", select "Optimize imports" and "Reformat file".</li>
+<li>Under "File Path Inclusions", add an entry for <code>.*\.java</code> to avoid formatting other file types.</li>
+</ol>
+<p>You can also format the whole project via Maven by using <code>mvn spotless:apply</code>.</p>
+<h4 class="anchor anchorWithStickyNavbar_LWe7" id="checkstyle-for-java">Checkstyle For Java<a href="#checkstyle-for-java" class="hash-link" aria-label="Direct link to Checkstyle For Java" title="Direct link to Checkstyle For Java"></a></h4>
+<p><a href="https://checkstyle.sourceforge.io/" target="_blank" rel="noopener noreferrer">Checkstyle</a> is used to enforce static coding guidelines.</p>
+<ol>
+<li>Go to "Settings" → "Tools" → "Checkstyle".</li>
+<li>Set "Scan Scope" to "Only Java sources (including tests)".</li>
+<li>For "Checkstyle Version" select "9.3".</li>
+<li>Under "Configuration File" click the "+" icon to add a new configuration.</li>
+<li>Set "Description" to "Fluss".</li>
+<li>Select "Use a local Checkstyle file" and point it to <code>tools/maven/checkstyle.xml</code> located within
+your cloned repository.</li>
+<li>Select "Store relative to project location" and click "Next".</li>
+<li>Configure the property <code>checkstyle.suppressions.file</code> with the value <code>suppressions.xml</code> and click
+"Next".</li>
+<li>Click "Finish".</li>
+<li>Select "Fluss" as the only active configuration file and click "Apply".</li>
+</ol>
+<p>You can now import the Checkstyle configuration for the Java code formatter.</p>
+<ol>
+<li>Go to "Settings" → "Editor" → "Code Style" → "Java".</li>
+<li>Click the gear icon next to "Scheme" and select "Import Scheme" → "Checkstyle Configuration".</li>
+<li>Navigate to and select <code>tools/maven/checkstyle.xml</code> located within your cloned repository.</li>
+</ol>
+<p>To verify the setup, click "View" → "Tool Windows" → "Checkstyle" and find the "Check Module"
+button in the opened tool window. It should report no violations.</p>
+<h3 class="anchor anchorWithStickyNavbar_LWe7" id="configure-git-commit-username-and-email">Configure Git Commit Username and Email<a href="#configure-git-commit-username-and-email" class="hash-link" aria-label="Direct link to Configure Git Commit Username and Email" title="Direct link to Configure Git Commit Username and Email"></a></h3>
+<p>Verify that the Git commit username is set to your preferred name using</p>
+<div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#9CDCFE;--prism-background-color:#1E1E1E"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style="color:#9CDCFE;background-color:#1E1E1E"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#9CDCFE"><span class="token function" style="color:rgb(220, 220, 170)">git</span><span class="token plain"> config user.name</ [...]
+<p>The set username will be shown in the contributor list in Fluss release notes.</p>
+<p>To change the username use</p>
+<div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#9CDCFE;--prism-background-color:#1E1E1E"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style="color:#9CDCFE;background-color:#1E1E1E"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#9CDCFE"><span class="token function" style="color:rgb(220, 220, 170)">git</span><span class="token plain"> config user.name < [...]
+<p>You are free to choose any username you want.
+In particular, the username does <em>not</em> have to correspond to your GitHub username.
+A common choice is simply your full name.</p>
+<p>Also verify that the Git commit email address is set to your preferred email address using</p>
+<div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#9CDCFE;--prism-background-color:#1E1E1E"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style="color:#9CDCFE;background-color:#1E1E1E"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#9CDCFE"><span class="token function" style="color:rgb(220, 220, 170)">git</span><span class="token plain"> config user.email< [...]
+<p>Make sure that the set email address is an email address that is linked to your GitHub account.
+If the email address is not linked to your GitHub account, commits in the contribution graph will not be associated with your account.</p>
+<p>To change the email address use</p>
+<div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#9CDCFE;--prism-background-color:#1E1E1E"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style="color:#9CDCFE;background-color:#1E1E1E"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#9CDCFE"><span class="token function" style="color:rgb(220, 220, 170)">git</span><span class="token plain"> config user.email [...]
+<p>If you do not want to expose your email address in Git commits, you can activate <a href="https://docs.github.com/en/account-and-profile/setting-up-and-managing-your-personal-account-on-github/managing-email-preferences/blocking-command-line-pushes-that-expose-your-personal-email-address" target="_blank" rel="noopener noreferrer">GitHub's email privacy setting</a> and set the Git commit email address to the anonymized <code>noreply @users.noreply.github.com</code> email address.</p>
+<div class="theme-admonition theme-admonition-important admonition_xJq3 alert alert--info"><div class="admonitionHeading_Gvgb"><span class="admonitionIcon_Rf37"><svg viewBox="0 0 14 16"><path fill-rule="evenodd" d="M7 2.3c3.14 0 5.7 2.56 5.7 5.7s-2.56 5.7-5.7 5.7A5.71 5.71 0 0 1 1.3 8c0-3.14 2.56-5.7 5.7-5.7zM7 1C3.14 1 0 4.14 0 8s3.14 7 7 7 7-3.14 7-7-3.14-7-7-7zm1 3H6v5h2V4zm0 6H6v2h2v-2z"></path></svg></span>important</div><div class="admonitionContent_BuS1"><ul>
+<li>When committing from different devices, make sure the username is consistently set on all devices.</li>
+<li>The <code>git config</code> commands above only set the username and email address for the current Git repository. If you want to apply the same settings to all Git repositories on a device, execute the commands with the <code>--global</code> option.</li>
+</ul></div></div>
+<h3 class="anchor anchorWithStickyNavbar_LWe7" id="common-problems">Common Problems<a href="#common-problems" class="hash-link" aria-label="Direct link to Common Problems" title="Direct link to Common Problems"></a></h3>
+<p>This section lists issues that developers have run into in the past when working with IntelliJ.</p>
+<h4 class="anchor anchorWithStickyNavbar_LWe7" id="compilation-fails-with-invalid-flag---add-exportsjavabasesunnetutilall-unnamed">Compilation fails with <code>invalid flag: --add-exports=java.base/sun.net.util=ALL-UNNAMED</code><a href="#compilation-fails-with-invalid-flag---add-exportsjavabasesunnetutilall-unnamed" class="hash-link" aria-label="Direct link to compilation-fails-with-invalid-flag---add-exportsjavabasesunnetutilall-unnamed" title="Direct link to compilation-fails-with-inv [...]
+<p>This happens if the "java11" Maven profile is active, but an older JDK version is used. Go to
+"View" → "Tool Windows" → "Maven" and uncheck the "java11" profile. Afterwards, reimport the
+project.</p>
+<h4 class="anchor anchorWithStickyNavbar_LWe7" id="compilation-fails-with-package-sunmisc-does-not-exist">Compilation fails with <code>package sun.misc does not exist</code><a href="#compilation-fails-with-package-sunmisc-does-not-exist" class="hash-link" aria-label="Direct link to compilation-fails-with-package-sunmisc-does-not-exist" title="Direct link to compilation-fails-with-package-sunmisc-does-not-exist"></a></h4>
+<p>This happens if you are using JDK 11 and compile to Java 8 with the <code>--release</code> option. This option is currently incompatible with our build setup.
+Go to "Settings" → "Build, Execution, Deployment" → "Compiler" → "Java Compiler" and uncheck the "Use '--release' option for cross-compilation (Java 9 and later)".</p>
+<h4 class="anchor anchorWithStickyNavbar_LWe7" id="examples-fail-with-a-noclassdeffounderror-for-fluss-classes">Examples fail with a <code>NoClassDefFoundError</code> for Fluss classes.<a href="#examples-fail-with-a-noclassdeffounderror-for-fluss-classes" class="hash-link" aria-label="Direct link to examples-fail-with-a-noclassdeffounderror-for-fluss-classes" title="Direct link to examples-fail-with-a-noclassdeffounderror-for-fluss-classes"></a></h4>
+<p>This happens if Fluss dependencies are set to "provided", resulting in them not being available
+on the classpath. You can either check "Include dependencies with 'Provided' scope" in your
+run configuration, or create a test that calls the <code>main()</code> method of the example.</p></div><footer class="theme-doc-footer docusaurus-mt-lg"><div class="row margin-top--sm theme-doc-footer-edit-meta-row"><div class="col"><a href="https://github.com/apache/fluss/edit/main/website/community/dev/ide-setup.md" target="_blank" rel="noopener noreferrer" class="theme-edit-this-page"><svg fill="currentColor" height="20" width="20" viewBox="0 0 40 40" class="iconEdit_Z9Sw" aria-hidden [...]
+ Apache®, Apache Flink®, Flink®, Apache Kafka®, Kafka®, Spark® and associated open source project names and logos are trademarks of the Apache Software Foundation.</div></div></div></footer></div>
+</body>
+</html>
\ No newline at end of file
diff --git a/community/fluss-logos/index.html b/community/fluss-logos/index.html
new file mode 100644
index 0000000..1a0ae11
--- /dev/null
+++ b/community/fluss-logos/index.html
@@ -0,0 +1,56 @@
+<!doctype html>
+<html lang="en" dir="ltr" class="docs-wrapper plugin-docs plugin-id-community docs-version-current docs-doc-page docs-doc-id-fluss-logos" data-has-hydrated="false">
+<head>
+<meta charset="UTF-8">
+<meta name="generator" content="Docusaurus v3.8.1">
+<title data-rh="true">Fluss Logos | Fluss</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/docusaurus-social-card.jpg"><meta data-rh="true" name="twitter:image" content="https://fluss.apache.org/img/docusaurus-social-card.jpg"><meta data-rh="true" property="og:url" content="https://fluss.apache.org/co [...]
+<link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Fluss Atom Feed">
+
+
+
+
+<link rel="search" type="application/opensearchdescription+xml" title="Fluss" href="/opensearch.xml">
+
+<link rel="icon" href="/img/logo.svg">
+<link rel="manifest" href="/manifest.json">
+<meta name="theme-color" content="#0071e3"><link rel="stylesheet" href="/assets/css/styles.3ca55d09.css">
+<script src="/assets/js/runtime~main.264c6f6f.js" defer="defer"></script>
+<script src="/assets/js/main.a06cb6b9.js" defer="defer"></script>
+</head>
+<body class="navigation-with-keyboard">
+<svg xmlns="http://www.w3.org/2000/svg" style="display: none;"><defs>
+<symbol id="theme-svg-external-link" viewBox="0 0 24 24"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"/></symbol>
+</defs></svg>
+<script>!function(){var t="light";var e=function(){try{return new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}}()||function(){try{return window.localStorage.getItem("theme")}catch(t){}}();document.documentElement.setAttribute("data-theme",e||t),document.documentElement.setAttribute("data-theme-choice",e||t)}(),function(){try{const c=new URLSearchParams(window.location.search).entries();for(var[t,e]of c)if(t.startsWith("docusaurus-data-")){var a=t.replace("do [...]
+<p>We provide the Fluss logo in different formats and variants.</p>
+<p><img decoding="async" loading="lazy" alt="Fluss Logo Overview" src="/assets/images/logo_overview-3a76e21a805e31d6bbf8e32563a22eb2.jpg" width="3840" height="2160" class="img_ev3q"></p>
+<p>You can download the logos in SVG and PNG formats from the following links:</p>
+<ul>
+<li>Colored logo<!-- -->
+<ul>
+<li>with black text: <a href="/img/logo/svg/colored_logo.svg" target="_blank" rel="noopener noreferrer">colored_logo.svg</a>, <a href="/img/logo/png/colored_logo.png" target="_blank" rel="noopener noreferrer">color_logo.png</a></li>
+<li>without text: <a href="/img/logo/svg/colored_logo_notext.svg" target="_blank" rel="noopener noreferrer">colored_logo_notext.svg</a>, <a href="/img/logo/png/colored_logo_notext.png" target="_blank" rel="noopener noreferrer">colored_logo_notext.png</a></li>
+</ul>
+</li>
+<li>White color logo<!-- -->
+<ul>
+<li>with black text: <a href="/img/logo/svg/white_color_logo.svg" target="_blank" rel="noopener noreferrer">white_color_logo.svg</a>, <a href="/img/logo/png/white_color_logo.png" target="_blank" rel="noopener noreferrer">white_color_logo.png</a></li>
+<li>without text: <a href="/img/logo/svg/white_color_logo_notext.svg" target="_blank" rel="noopener noreferrer">white_color_logo_notext.svg</a>, <a href="/img/logo/png/white_color_logo_notext.png" target="_blank" rel="noopener noreferrer">white_color_logo_notext.png</a></li>
+</ul>
+</li>
+<li>Black outline logo<!-- -->
+<ul>
+<li>with black text: <a href="/img/logo/svg/black_outline.svg" target="_blank" rel="noopener noreferrer">black_outline.svg</a>, <a href="/img/logo/png/black_outline.png" target="_blank" rel="noopener noreferrer">black_outline.png</a></li>
+<li>without text: <a href="/img/logo/svg/black_outline_notext.svg" target="_blank" rel="noopener noreferrer">black_outline_notext.svg</a>, <a href="/img/logo/png/black_outline_notext.png" target="_blank" rel="noopener noreferrer">black_outline_notext.png</a></li>
+</ul>
+</li>
+<li>White filled logo<!-- -->
+<ul>
+<li>with black text: <a href="/img/logo/svg/white_filled.svg" target="_blank" rel="noopener noreferrer">white_filled.svg</a>, <a href="/img/logo/png/white_filled.png" target="_blank" rel="noopener noreferrer">white_filled.png</a></li>
+<li>without text: <a href="/img/logo/svg/white_filled_notext.svg" target="_blank" rel="noopener noreferrer">white_filled_notext.svg</a>, <a href="/img/logo/png/white_filled_notext.png" target="_blank" rel="noopener noreferrer">white_filled_notext.png</a></li>
+</ul>
+</li>
+</ul></div><footer class="theme-doc-footer docusaurus-mt-lg"><div class="row margin-top--sm theme-doc-footer-edit-meta-row"><div class="col"><a href="https://github.com/apache/fluss/edit/main/website/community/fluss-logos.md" target="_blank" rel="noopener noreferrer" class="theme-edit-this-page"><svg fill="currentColor" height="20" width="20" viewBox="0 0 40 40" class="iconEdit_Z9Sw" aria-hidden="true"><g><path d="m34.5 11.7l-3 3.1-6.3-6.3 3.1-3q0.5-0.5 1.2-0.5t1.1 0.5l3.9 3.9q0.5 0.4 0. [...]
+ Apache®, Apache Flink®, Flink®, Apache Kafka®, Kafka®, Spark® and associated open source project names and logos are trademarks of the Apache Software Foundation.</div></div></div></footer></div>
+</body>
+</html>
\ No newline at end of file
diff --git a/community/how-to-contribute/contribute-code/index.html b/community/how-to-contribute/contribute-code/index.html
new file mode 100644
index 0000000..0521914
--- /dev/null
+++ b/community/how-to-contribute/contribute-code/index.html
@@ -0,0 +1,75 @@
+<!doctype html>
+<html lang="en" dir="ltr" class="docs-wrapper plugin-docs plugin-id-community docs-version-current docs-doc-page docs-doc-id-how-to-contribute/contribute-code" data-has-hydrated="false">
+<head>
+<meta charset="UTF-8">
+<meta name="generator" content="Docusaurus v3.8.1">
+<title data-rh="true">Contribute Code | Fluss</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/docusaurus-social-card.jpg"><meta data-rh="true" name="twitter:image" content="https://fluss.apache.org/img/docusaurus-social-card.jpg"><meta data-rh="true" property="og:url" content="https://fluss.apache.or [...]
+<link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Fluss Atom Feed">
+
+
+
+
+<link rel="search" type="application/opensearchdescription+xml" title="Fluss" href="/opensearch.xml">
+
+<link rel="icon" href="/img/logo.svg">
+<link rel="manifest" href="/manifest.json">
+<meta name="theme-color" content="#0071e3"><link rel="stylesheet" href="/assets/css/styles.3ca55d09.css">
+<script src="/assets/js/runtime~main.264c6f6f.js" defer="defer"></script>
+<script src="/assets/js/main.a06cb6b9.js" defer="defer"></script>
+</head>
+<body class="navigation-with-keyboard">
+<svg xmlns="http://www.w3.org/2000/svg" style="display: none;"><defs>
+<symbol id="theme-svg-external-link" viewBox="0 0 24 24"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"/></symbol>
+</defs></svg>
+<script>!function(){var t="light";var e=function(){try{return new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}}()||function(){try{return window.localStorage.getItem("theme")}catch(t){}}();document.documentElement.setAttribute("data-theme",e||t),document.documentElement.setAttribute("data-theme-choice",e||t)}(),function(){try{const c=new URLSearchParams(window.location.search).entries();for(var[t,e]of c)if(t.startsWith("docusaurus-data-")){var a=t.replace("do [...]
+<p>Fluss is maintained, improved, and extended by code contributions of volunteers. We welcome contributions to Fluss, but due to preserve the high quality of the code base, we follow a contribution process that is explained in this document.</p>
+<div class="theme-admonition theme-admonition-warning admonition_xJq3 alert alert--warning"><div class="admonitionHeading_Gvgb"><span class="admonitionIcon_Rf37"><svg viewBox="0 0 16 16"><path fill-rule="evenodd" d="M8.893 1.5c-.183-.31-.52-.5-.887-.5s-.703.19-.886.5L.138 13.499a.98.98 0 0 0 0 1.001c.193.31.53.501.886.501h13.964c.367 0 .704-.19.877-.5a1.03 1.03 0 0 0 .01-1.002L8.893 1.5zm.133 11.497H6.987v-2.003h2.039v2.003zm0-3.004H6.987V5.987h2.039v4.006z"></path></svg></span>warning</ [...]
+<h2 class="anchor anchorWithStickyNavbar_LWe7" id="looking-for-what-to-contribute">Looking for what to contribute<a href="#looking-for-what-to-contribute" class="hash-link" aria-label="Direct link to Looking for what to contribute" title="Direct link to Looking for what to contribute"></a></h2>
+<ul>
+<li>If you have a good idea for the contribution, you can proceed to <a href="#code-contribution-process">the code contribution process</a>.</li>
+<li>If you are looking for what you could contribute, you can browse <a href="https://github.com/alibaba/fluss/issues" target="_blank" rel="noopener noreferrer">open issues</a>, which are not assigned, and then follow <a href="#code-contribution-process">the code contribution process</a>.</li>
+<li>If you are very new to the Fluss project and ready to tackle some open issues, we've collected some <a href="https://github.com/alibaba/fluss/contribute" target="_blank" rel="noopener noreferrer">good first issues</a> for you.</li>
+</ul>
+<h2 class="anchor anchorWithStickyNavbar_LWe7" id="code-contribution-process">Code Contribution Process<a href="#code-contribution-process" class="hash-link" aria-label="Direct link to Code Contribution Process" title="Direct link to Code Contribution Process"></a></h2>
+<h3 class="anchor anchorWithStickyNavbar_LWe7" id="discuss">Discuss<a href="#discuss" class="hash-link" aria-label="Direct link to Discuss" title="Direct link to Discuss"></a></h3>
+<p>Create an issue and reach consensus.</p>
+<p><strong>To request an issue, please note that it is not just a "please assign it to me", you need to explain your understanding of the issue, and your design, and if possible, you need to provide your POC code.</strong></p>
+<h3 class="anchor anchorWithStickyNavbar_LWe7" id="implement">Implement<a href="#implement" class="hash-link" aria-label="Direct link to Implement" title="Direct link to Implement"></a></h3>
+<p>Implement the change according to the Code Style and Quality(refer to the <a href="https://flink.apache.org/how-to-contribute/code-style-and-quality-preamble/" target="_blank" rel="noopener noreferrer">Flink doc</a> Guide and the approach agreed upon in the issue.</p>
+<ol>
+<li>Only start working on the implementation if there is consensus on the approach (e.g. you are assigned to the ticket)</li>
+<li>If you are newer, can refer to <a href="/community/dev/ide-setup/">ide setup</a> to setup a Fluss dev environment.</li>
+</ol>
+<h3 class="anchor anchorWithStickyNavbar_LWe7" id="review">Review<a href="#review" class="hash-link" aria-label="Direct link to Review" title="Direct link to Review"></a></h3>
+<p>Create the pull request and work with the reviewer.</p>
+<ol>
+<li>Make sure no unrelated or unnecessary reformatting changes are included.</li>
+<li>Please ensure that the test passing.</li>
+<li>Please don't resolve conversation.</li>
+</ol>
+<h3 class="anchor anchorWithStickyNavbar_LWe7" id="merge">Merge<a href="#merge" class="hash-link" aria-label="Direct link to Merge" title="Direct link to Merge"></a></h3>
+<p>A committer of Fluss checks if the contribution fulfills the requirements and merges the code to the codebase.</p>
+<h2 class="anchor anchorWithStickyNavbar_LWe7" id="pull-request-guide">Pull Request Guide<a href="#pull-request-guide" class="hash-link" aria-label="Direct link to Pull Request Guide" title="Direct link to Pull Request Guide"></a></h2>
+<p>Considerations before opening a pull request:</p>
+<ul>
+<li>
+<p>Make sure that the pull request corresponds to a <a href="https://github.com/alibaba/fluss/issues" target="_blank" rel="noopener noreferrer">GitHub issue</a>. Exceptions are made for typos in JavaDoc or documentation files, which need no issue.</p>
+</li>
+<li>
+<p>Name the pull request in the format "[component] Title of the pull request", where <em>[component]</em> should be replaced by the name of the component being changed. Typically, this corresponds to the component label assigned to the issue (e.g., [kv], [log], [client], [flink]). Skip <em>[component]</em> if you are unsure about which is the best component. <strong>Hotfixes</strong> should be named for example <code>[hotfix][docs] Expand JavaDoc for PuncuatedWatermarkGenerato [...]
+</li>
+<li>
+<p>Fill out the pull request template to describe the changes contributed by the pull request. Please describe it such that the reviewer understands the problem and solution from the description, not only from the code. That will give reviewers the context they need to do the review.</p>
+</li>
+<li>
+<p>Make sure that the change passes the automated tests, i.e., <code>mvn clean verify</code> passes.</p>
+</li>
+<li>
+<p>Each pull request should address only one issue, not mix up code from multiple issues.</p>
+</li>
+</ul>
+<p>There is a separate guide on <a href="/community/how-to-contribute/review-pull-requests/">how to review a pull request</a>, including our pull request review process. As a code author, you should prepare your pull request to meet all requirements.</p>
+<p>You need to make sure that all GitHub Actions CI checks must pass for a pull request. If there are any failures, it is essential to investigate the exception stack by in the CI logs. Additionally, GitHub Actions automatically collects and uploads Maven logs (logs printed by log4j in the code) to GitHub Artifacts (see the "Artifacts" section in this <a href="https://github.com/alibaba/fluss/actions/runs/13761957739" target="_blank" rel="noopener noreferrer">build</a>). These [...]
+ Apache®, Apache Flink®, Flink®, Apache Kafka®, Kafka®, Spark® and associated open source project names and logos are trademarks of the Apache Software Foundation.</div></div></div></footer></div>
+</body>
+</html>
\ No newline at end of file
diff --git a/community/how-to-contribute/contribute-docs/index.html b/community/how-to-contribute/contribute-docs/index.html
new file mode 100644
index 0000000..f91fa68
--- /dev/null
+++ b/community/how-to-contribute/contribute-docs/index.html
@@ -0,0 +1,137 @@
+<!doctype html>
+<html lang="en" dir="ltr" class="docs-wrapper plugin-docs plugin-id-community docs-version-current docs-doc-page docs-doc-id-how-to-contribute/contribute-docs" data-has-hydrated="false">
+<head>
+<meta charset="UTF-8">
+<meta name="generator" content="Docusaurus v3.8.1">
+<title data-rh="true">Contribute Documentation | Fluss</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/docusaurus-social-card.jpg"><meta data-rh="true" name="twitter:image" content="https://fluss.apache.org/img/docusaurus-social-card.jpg"><meta data-rh="true" property="og:url" content="https://fluss. [...]
+<link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Fluss Atom Feed">
+
+
+
+
+<link rel="search" type="application/opensearchdescription+xml" title="Fluss" href="/opensearch.xml">
+
+<link rel="icon" href="/img/logo.svg">
+<link rel="manifest" href="/manifest.json">
+<meta name="theme-color" content="#0071e3"><link rel="stylesheet" href="/assets/css/styles.3ca55d09.css">
+<script src="/assets/js/runtime~main.264c6f6f.js" defer="defer"></script>
+<script src="/assets/js/main.a06cb6b9.js" defer="defer"></script>
+</head>
+<body class="navigation-with-keyboard">
+<svg xmlns="http://www.w3.org/2000/svg" style="display: none;"><defs>
+<symbol id="theme-svg-external-link" viewBox="0 0 24 24"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"/></symbol>
+</defs></svg>
+<script>!function(){var t="light";var e=function(){try{return new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}}()||function(){try{return window.localStorage.getItem("theme")}catch(t){}}();document.documentElement.setAttribute("data-theme",e||t),document.documentElement.setAttribute("data-theme-choice",e||t)}(),function(){try{const c=new URLSearchParams(window.location.search).entries();for(var[t,e]of c)if(t.startsWith("docusaurus-data-")){var a=t.replace("do [...]
+<p>The Fluss website serves as the primary interface between the project and its community, with several key purposes:</p>
+<ul>
+<li>Introducing Fluss as a streaming storage solution for real-time analytics</li>
+<li>Providing technical documentation for users and developers</li>
+<li>Facilitating downloads and deployment guidance</li>
+<li>Fostering community engagement and contributions</li>
+<li>Showcasing Fluss features, use cases, and roadmap</li>
+</ul>
+<p>This website is built with Docusaurus, a modern static website generator optimized for documentation. For advanced features and tools, visit the <a href="https://docusaurus.io/" target="_blank" rel="noopener noreferrer">official Docusaurus documentation</a>.</p>
+<p>This guide will walk you through the process of contributing to the Fluss documentation, from setting up your environment to submitting your changes.</p>
+<h2 class="anchor anchorWithStickyNavbar_LWe7" id="build-documentation">Build Documentation<a href="#build-documentation" class="hash-link" aria-label="Direct link to Build Documentation" title="Direct link to Build Documentation"></a></h2>
+<h3 class="anchor anchorWithStickyNavbar_LWe7" id="fork-and-clone">Fork and Clone<a href="#fork-and-clone" class="hash-link" aria-label="Direct link to Fork and Clone" title="Direct link to Fork and Clone"></a></h3>
+<p>Fork the <a href="https://github.com/alibaba/fluss" target="_blank" rel="noopener noreferrer">Fluss repository</a></p>
+<div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#9CDCFE;--prism-background-color:#1E1E1E"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style="color:#9CDCFE;background-color:#1E1E1E"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#9CDCFE"><span class="token function" style="color:rgb(220, 220, 170)">git</span><span class="token plain"> clone https://gith [...]
+<h3 class="anchor anchorWithStickyNavbar_LWe7" id="create-a-branch">Create a Branch<a href="#create-a-branch" class="hash-link" aria-label="Direct link to Create a Branch" title="Direct link to Create a Branch"></a></h3>
+<div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#9CDCFE;--prism-background-color:#1E1E1E"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style="color:#9CDCFE;background-color:#1E1E1E"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#9CDCFE"><span class="token function" style="color:rgb(220, 220, 170)">git</span><span class="token plain"> checkout </span><s [...]
+<h3 class="anchor anchorWithStickyNavbar_LWe7" id="install-dependencies">Install Dependencies<a href="#install-dependencies" class="hash-link" aria-label="Direct link to Install Dependencies" title="Direct link to Install Dependencies"></a></h3>
+<div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#9CDCFE;--prism-background-color:#1E1E1E"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style="color:#9CDCFE;background-color:#1E1E1E"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#9CDCFE"><span class="token builtin class-name" style="color:rgb(78, 201, 176)">cd</span><span class="token plain"> website</s [...]
+<h3 class="anchor anchorWithStickyNavbar_LWe7" id="directory-structure">Directory Structure<a href="#directory-structure" class="hash-link" aria-label="Direct link to Directory Structure" title="Direct link to Directory Structure"></a></h3>
+<p>The Fluss documentation is organized as follows:</p>
+<div class="language-text codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#9CDCFE;--prism-background-color:#1E1E1E"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar" style="color:#9CDCFE;background-color:#1E1E1E"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#9CDCFE"><span class="token plain">fluss/website/</span><br></span><span class="token-line" style="color:#9CDCFE"><span class= [...]
+<h3 class="anchor anchorWithStickyNavbar_LWe7" id="validation-including-versioned-docs">Validation (including versioned docs)<a href="#validation-including-versioned-docs" class="hash-link" aria-label="Direct link to Validation (including versioned docs)" title="Direct link to Validation (including versioned docs)"></a></h3>
+<ul>
+<li>Edit or create Markdown files in the appropriate directories</li>
+<li>Generate versioned docs (simulates what CI does)</li>
+</ul>
+<div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#9CDCFE;--prism-background-color:#1E1E1E"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style="color:#9CDCFE;background-color:#1E1E1E"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#9CDCFE"><span class="token plain">./build_versioned_docs.sh</span><br></span></code></pre></div></div>
+<ul>
+<li>Then build the complete site which checks broken links</li>
+</ul>
+<div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#9CDCFE;--prism-background-color:#1E1E1E"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style="color:#9CDCFE;background-color:#1E1E1E"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#9CDCFE"><span class="token function" style="color:rgb(220, 220, 170)">npm</span><span class="token plain"> run build -- --no- [...]
+<h3 class="anchor anchorWithStickyNavbar_LWe7" id="preview-changes">Preview Changes<a href="#preview-changes" class="hash-link" aria-label="Direct link to Preview Changes" title="Direct link to Preview Changes"></a></h3>
+<ul>
+<li>Start the local development server to preview changes</li>
+</ul>
+<div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#9CDCFE;--prism-background-color:#1E1E1E"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style="color:#9CDCFE;background-color:#1E1E1E"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#9CDCFE"><span class="token function" style="color:rgb(220, 220, 170)">npm</span><span class="token plain"> run start</span><b [...]
+<ul>
+<li>View your changes at <a href="http://localhost:3000/fluss-docs/" target="_blank" rel="noopener noreferrer">http://localhost:3000/fluss-docs/</a></li>
+</ul>
+<h2 class="anchor anchorWithStickyNavbar_LWe7" id="versioned-documentation">Versioned Documentation<a href="#versioned-documentation" class="hash-link" aria-label="Direct link to Versioned Documentation" title="Direct link to Versioned Documentation"></a></h2>
+<ul>
+<li>Only content in <code>website/docs/* </code>is versioned</li>
+<li>Each version corresponds to a branch (e.g., release-0.5, release-0.6)</li>
+<li>Fixes for <code>website/docs/*</code> documentation related to old versions should be backported to their corresponding release-x.y branches</li>
+<li>The main branch contains the latest (unreleased) documentation</li>
+<li>Other pages (community, roadmap) are only maintained in the main branch</li>
+</ul>
+<h3 class="anchor anchorWithStickyNavbar_LWe7" id="updating-existing-versions">Updating Existing Versions<a href="#updating-existing-versions" class="hash-link" aria-label="Direct link to Updating Existing Versions" title="Direct link to Updating Existing Versions"></a></h3>
+<ul>
+<li>Checkout the corresponding release branch</li>
+</ul>
+<div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#9CDCFE;--prism-background-color:#1E1E1E"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style="color:#9CDCFE;background-color:#1E1E1E"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#9CDCFE"><span class="token function" style="color:rgb(220, 220, 170)">git</span><span class="token plain"> checkout release-0 [...]
+<ul>
+<li>Make changes to files in <code>website/docs/</code></li>
+<li>Create a pull request to that specific release branch</li>
+</ul>
+<h3 class="anchor anchorWithStickyNavbar_LWe7" id="version-expressions">Version Expressions<a href="#version-expressions" class="hash-link" aria-label="Direct link to Version Expressions" title="Direct link to Version Expressions"></a></h3>
+<p>Fluss documentation uses placeholder variables that are automatically replaced during the build process. Note that these variables are only available for documentation under <code>website/docs/*</code>.</p>
+<ul>
+<li><code>$FLUSS_VERSION$</code>: Expands to the full version (e.g., "0.6.0")</li>
+<li><code>$FLUSS_VERSION_SHORT$</code>: Expands to the short version (e.g., "0.6")</li>
+<li><code>$FLUSS_DOCKER_VERSION$</code>: Expands to the docker version (e.g., "0.6.0-rc1"), it is suggested to use this variable when referring to the docker image version that we can link to a RC version during release testing.</li>
+</ul>
+<p>For example, to link to a specific version of Fluss binary:</p>
+<div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#9CDCFE;--prism-background-color:#1E1E1E"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style="color:#9CDCFE;background-color:#1E1E1E"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#9CDCFE"><span class="token function" style="color:rgb(220, 220, 170)">tar</span><span class="token plain"> </span><span class [...]
+<p>The above code block will be rendered as follows for 0.6 version:</p>
+<div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#9CDCFE;--prism-background-color:#1E1E1E"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style="color:#9CDCFE;background-color:#1E1E1E"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#9CDCFE"><span class="token function" style="color:rgb(220, 220, 170)">tar</span><span class="token plain"> </span><span class [...]
+<h2 class="anchor anchorWithStickyNavbar_LWe7" id="documentation-linking">Documentation Linking<a href="#documentation-linking" class="hash-link" aria-label="Direct link to Documentation Linking" title="Direct link to Documentation Linking"></a></h2>
+<h3 class="anchor anchorWithStickyNavbar_LWe7" id="dos">Do's<a href="#dos" class="hash-link" aria-label="Direct link to Do's" title="Direct link to Do's"></a></h3>
+<ul>
+<li>Use file paths with .md extensions</li>
+</ul>
+<div class="language-markdown codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#9CDCFE;--prism-background-color:#1E1E1E"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-markdown codeBlock_bY9V thin-scrollbar" style="color:#9CDCFE;background-color:#1E1E1E"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#9CDCFE"><span class="token url">[</span><span class="token url content">Table Design</span><span class="token url">]( [...]
+<ul>
+<li>Use paths relative to the docs/ directory</li>
+</ul>
+<div class="language-markdown codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#9CDCFE;--prism-background-color:#1E1E1E"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-markdown codeBlock_bY9V thin-scrollbar" style="color:#9CDCFE;background-color:#1E1E1E"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#9CDCFE"><span class="token url">[</span><span class="token url content">Flink Engine</span><span class="token url">]( [...]
+<h3 class="anchor anchorWithStickyNavbar_LWe7" id="donts">Don'ts<a href="#donts" class="hash-link" aria-label="Direct link to Don'ts" title="Direct link to Don'ts"></a></h3>
+<ul>
+<li>Use absolute links like <code>/docs/</code> or <code>/blog/</code></li>
+<li>Use URLs without file extensions</li>
+</ul>
+<h3 class="anchor anchorWithStickyNavbar_LWe7" id="link-validation">Link Validation<a href="#link-validation" class="hash-link" aria-label="Direct link to Link Validation" title="Direct link to Link Validation"></a></h3>
+<ul>
+<li>Pull request CI checks for broken links using <code>.github/workflows/docs-check.yaml</code></li>
+<li>Fix any broken links identified in the CI build</li>
+<li>Test locally with <code>npm run build</code> in the website directory</li>
+</ul>
+<h2 class="anchor anchorWithStickyNavbar_LWe7" id="submitting-your-contribution">Submitting Your Contribution<a href="#submitting-your-contribution" class="hash-link" aria-label="Direct link to Submitting Your Contribution" title="Direct link to Submitting Your Contribution"></a></h2>
+<ol>
+<li>Commit your changes with a descriptive message:</li>
+</ol>
+<div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#9CDCFE;--prism-background-color:#1E1E1E"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style="color:#9CDCFE;background-color:#1E1E1E"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#9CDCFE"><span class="token function" style="color:rgb(220, 220, 170)">git</span><span class="token plain"> </span><span class [...]
+<ol start="2">
+<li>Push to your fork:</li>
+</ol>
+<div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#9CDCFE;--prism-background-color:#1E1E1E"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style="color:#9CDCFE;background-color:#1E1E1E"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#9CDCFE"><span class="token function" style="color:rgb(220, 220, 170)">git</span><span class="token plain"> push origin featur [...]
+<ol start="3">
+<li>Create a pull request on GitHub from your branch to the appropriate branch</li>
+</ol>
+<ul>
+<li>For latest docs: target the main branch</li>
+<li>For version-specific changes: target the specific release-x.y branch</li>
+</ul>
+<h2 class="anchor anchorWithStickyNavbar_LWe7" id="deployment-process">Deployment Process<a href="#deployment-process" class="hash-link" aria-label="Direct link to Deployment Process" title="Direct link to Deployment Process"></a></h2>
+<ul>
+<li>The <code>.github/workflows/docs-deploy.yaml</code> workflow automatically deploys documentation</li>
+<li>Triggers when changes are pushed to <code>website/*</code> in any <code>release-*</code> branches or <code>main</code></li>
+<li>Runs <code>build_versioned_docs.sh</code> to collect versioned docs from all release branches</li>
+</ul></div><footer class="theme-doc-footer docusaurus-mt-lg"><div class="row margin-top--sm theme-doc-footer-edit-meta-row"><div class="col"><a href="https://github.com/apache/fluss/edit/main/website/community/how-to-contribute/contribute-docs.md" target="_blank" rel="noopener noreferrer" class="theme-edit-this-page"><svg fill="currentColor" height="20" width="20" viewBox="0 0 40 40" class="iconEdit_Z9Sw" aria-hidden="true"><g><path d="m34.5 11.7l-3 3.1-6.3-6.3 3.1-3q0.5-0.5 1.2-0.5t1.1 [...]
+ Apache®, Apache Flink®, Flink®, Apache Kafka®, Kafka®, Spark® and associated open source project names and logos are trademarks of the Apache Software Foundation.</div></div></div></footer></div>
+</body>
+</html>
\ No newline at end of file
diff --git a/community/how-to-contribute/review-pull-requests/index.html b/community/how-to-contribute/review-pull-requests/index.html
new file mode 100644
index 0000000..66f342c
--- /dev/null
+++ b/community/how-to-contribute/review-pull-requests/index.html
@@ -0,0 +1,57 @@
+<!doctype html>
+<html lang="en" dir="ltr" class="docs-wrapper plugin-docs plugin-id-community docs-version-current docs-doc-page docs-doc-id-how-to-contribute/review-pull-requests" data-has-hydrated="false">
+<head>
+<meta charset="UTF-8">
+<meta name="generator" content="Docusaurus v3.8.1">
+<title data-rh="true">Review Pull Requests | Fluss</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/docusaurus-social-card.jpg"><meta data-rh="true" name="twitter:image" content="https://fluss.apache.org/img/docusaurus-social-card.jpg"><meta data-rh="true" property="og:url" content="https://fluss.apac [...]
+<link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Fluss Atom Feed">
+
+
+
+
+<link rel="search" type="application/opensearchdescription+xml" title="Fluss" href="/opensearch.xml">
+
+<link rel="icon" href="/img/logo.svg">
+<link rel="manifest" href="/manifest.json">
+<meta name="theme-color" content="#0071e3"><link rel="stylesheet" href="/assets/css/styles.3ca55d09.css">
+<script src="/assets/js/runtime~main.264c6f6f.js" defer="defer"></script>
+<script src="/assets/js/main.a06cb6b9.js" defer="defer"></script>
+</head>
+<body class="navigation-with-keyboard">
+<svg xmlns="http://www.w3.org/2000/svg" style="display: none;"><defs>
+<symbol id="theme-svg-external-link" viewBox="0 0 24 24"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"/></symbol>
+</defs></svg>
+<script>!function(){var t="light";var e=function(){try{return new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}}()||function(){try{return window.localStorage.getItem("theme")}catch(t){}}();document.documentElement.setAttribute("data-theme",e||t),document.documentElement.setAttribute("data-theme-choice",e||t)}(),function(){try{const c=new URLSearchParams(window.location.search).entries();for(var[t,e]of c)if(t.startsWith("docusaurus-data-")){var a=t.replace("do [...]
+<p>This guide is for all committers and contributors that want to help with reviewing code contributions. Thank you for your effort - good reviews are one of the most important and crucial parts of an open source project. This guide should help the community to make reviews such that:</p>
+<ul>
+<li>Contributors have a good contribution experience.</li>
+<li>Our reviews are structured and check all important aspects of a contribution.</li>
+<li>We make sure to keep a high code quality in Fluss.</li>
+<li>We avoid situations where contributors and reviewers spend a lot of time refining a contribution that gets rejected later.</li>
+</ul>
+<h2 class="anchor anchorWithStickyNavbar_LWe7" id="review-checklist">Review Checklist<a href="#review-checklist" class="hash-link" aria-label="Direct link to Review Checklist" title="Direct link to Review Checklist"></a></h2>
+<p>Every review needs to check the following six aspects. <strong>We encourage to check these aspects in order, to avoid
+spending time on detailed code quality reviews when formal requirements are not met or there is no consensus in
+the community to accept the change.</strong></p>
+<h3 class="anchor anchorWithStickyNavbar_LWe7" id="1-is-the-contribution-well-described">1. Is the Contribution Well-Described?<a href="#1-is-the-contribution-well-described" class="hash-link" aria-label="Direct link to 1. Is the Contribution Well-Described?" title="Direct link to 1. Is the Contribution Well-Described?"></a></h3>
+<p>Check whether the contribution is sufficiently well-described to support a good review. Trivial changes and fixes
+do not need a long description. If the implementation is exactly according to a prior discussion on issue or the
+development mailing list, only a short reference to that discussion is needed.</p>
+<p>If the implementation is different from the agreed approach in the consensus discussion, a detailed description of
+the implementation is required for any further review of the contribution.</p>
+<h3 class="anchor anchorWithStickyNavbar_LWe7" id="2-does-the-contribution-need-attention-from-some-specific-committers">2. Does the Contribution Need Attention from some Specific Committers?<a href="#2-does-the-contribution-need-attention-from-some-specific-committers" class="hash-link" aria-label="Direct link to 2. Does the Contribution Need Attention from some Specific Committers?" title="Direct link to 2. Does the Contribution Need Attention from some Specific Committers?"></a></h3>
+<p>Some changes require attention and approval from specific committers.</p>
+<p>If the pull request needs specific attention, one of the tagged committers/contributors should give the final approval.</p>
+<h3 class="anchor anchorWithStickyNavbar_LWe7" id="3-is-the-overall-code-quality-good-meeting-standard-we-want-to-maintain-in-fluss">3. Is the Overall Code Quality Good, Meeting Standard we Want to Maintain in Fluss?<a href="#3-is-the-overall-code-quality-good-meeting-standard-we-want-to-maintain-in-fluss" class="hash-link" aria-label="Direct link to 3. Is the Overall Code Quality Good, Meeting Standard we Want to Maintain in Fluss?" title="Direct link to 3. Is the Overall Code Quality G [...]
+<ul>
+<li>Does the code follow the right software engineering practices? Is the code correct, robust, maintainable, testable?</li>
+<li>Are the changes performance aware, when changing a performance sensitive part?</li>
+<li>Are the changes sufficiently covered by tests? Are the tests executing fast?</li>
+<li>If dependencies have been changed, were the NOTICE files updated?</li>
+</ul>
+<p>Code guidelines can be found in the <a href="https://flink.apache.org/how-to-contribute/code-style-and-quality-java/" target="_blank" rel="noopener noreferrer">Flink Java Code Style and Quality Guide</a>.</p>
+<h3 class="anchor anchorWithStickyNavbar_LWe7" id="4-are-the-documentation-updated">4. Are the documentation updated?<a href="#4-are-the-documentation-updated" class="hash-link" aria-label="Direct link to 4. Are the documentation updated?" title="Direct link to 4. Are the documentation updated?"></a></h3>
+<p>If the pull request introduces a new feature, the feature should be documented.</p></div><footer class="theme-doc-footer docusaurus-mt-lg"><div class="row margin-top--sm theme-doc-footer-edit-meta-row"><div class="col"><a href="https://github.com/apache/fluss/edit/main/website/community/how-to-contribute/review-pull-requests.md" target="_blank" rel="noopener noreferrer" class="theme-edit-this-page"><svg fill="currentColor" height="20" width="20" viewBox="0 0 40 40" class="iconEdit_Z9S [...]
+ Apache®, Apache Flink®, Flink®, Apache Kafka®, Kafka®, Spark® and associated open source project names and logos are trademarks of the Apache Software Foundation.</div></div></div></footer></div>
+</body>
+</html>
\ No newline at end of file
diff --git a/community/how-to-release/index.html b/community/how-to-release/index.html
new file mode 100644
index 0000000..9c25876
--- /dev/null
+++ b/community/how-to-release/index.html
@@ -0,0 +1,28 @@
+<!doctype html>
+<html lang="en" dir="ltr" class="docs-wrapper plugin-docs plugin-id-community docs-version-current docs-doc-page docs-doc-id-how-to-release" data-has-hydrated="false">
+<head>
+<meta charset="UTF-8">
+<meta name="generator" content="Docusaurus v3.8.1">
+<title data-rh="true">How to Release | Fluss</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/docusaurus-social-card.jpg"><meta data-rh="true" name="twitter:image" content="https://fluss.apache.org/img/docusaurus-social-card.jpg"><meta data-rh="true" property="og:url" content="https://fluss.apache.org [...]
+<link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Fluss Atom Feed">
+
+
+
+
+<link rel="search" type="application/opensearchdescription+xml" title="Fluss" href="/opensearch.xml">
+
+<link rel="icon" href="/img/logo.svg">
+<link rel="manifest" href="/manifest.json">
+<meta name="theme-color" content="#0071e3"><link rel="stylesheet" href="/assets/css/styles.3ca55d09.css">
+<script src="/assets/js/runtime~main.264c6f6f.js" defer="defer"></script>
+<script src="/assets/js/main.a06cb6b9.js" defer="defer"></script>
+</head>
+<body class="navigation-with-keyboard">
+<svg xmlns="http://www.w3.org/2000/svg" style="display: none;"><defs>
+<symbol id="theme-svg-external-link" viewBox="0 0 24 24"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"/></symbol>
+</defs></svg>
+<script>!function(){var t="light";var e=function(){try{return new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}}()||function(){try{return window.localStorage.getItem("theme")}catch(t){}}();document.documentElement.setAttribute("data-theme",e||t),document.documentElement.setAttribute("data-theme-choice",e||t)}(),function(){try{const c=new URLSearchParams(window.location.search).entries();for(var[t,e]of c)if(t.startsWith("docusaurus-data-")){var a=t.replace("do [...]
+<p>TODO</p></div><footer class="theme-doc-footer docusaurus-mt-lg"><div class="row margin-top--sm theme-doc-footer-edit-meta-row"><div class="col"><a href="https://github.com/apache/fluss/edit/main/website/community/how-to-release.md" target="_blank" rel="noopener noreferrer" class="theme-edit-this-page"><svg fill="currentColor" height="20" width="20" viewBox="0 0 40 40" class="iconEdit_Z9Sw" aria-hidden="true"><g><path d="m34.5 11.7l-3 3.1-6.3-6.3 3.1-3q0.5-0.5 1.2-0.5t1.1 0.5l3.9 3.9q0 [...]
+ Apache®, Apache Flink®, Flink®, Apache Kafka®, Kafka®, Spark® and associated open source project names and logos are trademarks of the Apache Software Foundation.</div></div></div></footer></div>
+</body>
+</html>
\ No newline at end of file
diff --git a/community/welcome/index.html b/community/welcome/index.html
new file mode 100644
index 0000000..e7a723c
--- /dev/null
+++ b/community/welcome/index.html
@@ -0,0 +1,43 @@
+<!doctype html>
+<html lang="en" dir="ltr" class="docs-wrapper plugin-docs plugin-id-community docs-version-current docs-doc-page docs-doc-id-welcome" data-has-hydrated="false">
+<head>
+<meta charset="UTF-8">
+<meta name="generator" content="Docusaurus v3.8.1">
+<title data-rh="true">Welcome | Fluss</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/docusaurus-social-card.jpg"><meta data-rh="true" name="twitter:image" content="https://fluss.apache.org/img/docusaurus-social-card.jpg"><meta data-rh="true" property="og:url" content="https://fluss.apache.org/commun [...]
+<link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Fluss Atom Feed">
+
+
+
+
+<link rel="search" type="application/opensearchdescription+xml" title="Fluss" href="/opensearch.xml">
+
+<link rel="icon" href="/img/logo.svg">
+<link rel="manifest" href="/manifest.json">
+<meta name="theme-color" content="#0071e3"><link rel="stylesheet" href="/assets/css/styles.3ca55d09.css">
+<script src="/assets/js/runtime~main.264c6f6f.js" defer="defer"></script>
+<script src="/assets/js/main.a06cb6b9.js" defer="defer"></script>
+</head>
+<body class="navigation-with-keyboard">
+<svg xmlns="http://www.w3.org/2000/svg" style="display: none;"><defs>
+<symbol id="theme-svg-external-link" viewBox="0 0 24 24"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"/></symbol>
+</defs></svg>
+<script>!function(){var t="light";var e=function(){try{return new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}}()||function(){try{return window.localStorage.getItem("theme")}catch(t){}}();document.documentElement.setAttribute("data-theme",e||t),document.documentElement.setAttribute("data-theme-choice",e||t)}(),function(){try{const c=new URLSearchParams(window.location.search).entries();for(var[t,e]of c)if(t.startsWith("docusaurus-data-")){var a=t.replace("do [...]
+<h2 class="anchor anchorWithStickyNavbar_LWe7" id="issues">Issues<a href="#issues" class="hash-link" aria-label="Direct link to Issues" title="Direct link to Issues"></a></h2>
+<p>Issues are <a href="https://github.com/alibaba/fluss/issues" target="_blank" rel="noopener noreferrer">tracked in GitHub</a>.</p>
+<p>If you are not sure on what to work on, look at issue tagged with <a href="https://github.com/alibaba/fluss/labels/good%20first%20issue" target="_blank" rel="noopener noreferrer">good first issue</a>.</p>
+<h2 class="anchor anchorWithStickyNavbar_LWe7" id="discussions">Discussions<a href="#discussions" class="hash-link" aria-label="Direct link to Discussions" title="Direct link to Discussions"></a></h2>
+<p>The development discussions and user questions happen primarily on <a href="https://github.com/alibaba/fluss/discussions" target="_blank" rel="noopener noreferrer">GitHub Discussions</a>.</p>
+<h2 class="anchor anchorWithStickyNavbar_LWe7" id="slack">Slack<a href="#slack" class="hash-link" aria-label="Direct link to Slack" title="Direct link to Slack"></a></h2>
+<p>We use the <a href="https://fluss-hq.slack.com/" target="_blank" rel="noopener noreferrer">Fluss workspace</a> on Slack for real-time communication and collaboration. You can join the community using <a href="https://join.slack.com/t/fluss-hq/shared_invite/zt-33wlna581-QAooAiCmnYboJS8D_JUcYw" target="_blank" rel="noopener noreferrer">this invite link</a>.</p>
+<p>Please note that this link may occasionally break when Slack does an upgrade. If you encounter problems using it, please let us know by creating an issue on GitHub.</p>
+<h2 class="anchor anchorWithStickyNavbar_LWe7" id="community-events">Community Events<a href="#community-events" class="hash-link" aria-label="Direct link to Community Events" title="Direct link to Community Events"></a></h2>
+<p>Join our monthly community gatherings to get involved:</p>
+<p><strong>Fluss Contributors Call</strong></p>
+<p>Agenda for upcoming meeting: <a href="https://docs.google.com/document/d/18b7G_dvYx-1FogV7LWEFMHXze5D5T9XZ3h9zSU75dDA/edit?tab=t.0#heading=h.w6zqoksn877i" target="_blank" rel="noopener noreferrer">Community Sync Docs</a></p>
+<p>Invitation link: <a href="https://calendar.google.com/calendar/u/0?cid=MjUzMjY2OTFkY2FmNmRiYjk5MzllZmUxNDliYjg1ZjI4ODhhNjU0YzY5Mzc2M2IyZDQ1NzIwNTAyZGU1MjZmOEBncm91cC5jYWxlbmRhci5nb29nbGUuY29t" target="_blank" rel="noopener noreferrer">Community Events</a></p>
+<p>Community calls are a great opportunity to discuss the project roadmap, implementation details, and connect with other contributors.</p>
+<div class="theme-admonition theme-admonition-info admonition_xJq3 alert alert--info"><div class="admonitionHeading_Gvgb"><span class="admonitionIcon_Rf37"><svg viewBox="0 0 14 16"><path fill-rule="evenodd" d="M7 2.3c3.14 0 5.7 2.56 5.7 5.7s-2.56 5.7-5.7 5.7A5.71 5.71 0 0 1 1.3 8c0-3.14 2.56-5.7 5.7-5.7zM7 1C3.14 1 0 4.14 0 8s3.14 7 7 7 7-3.14 7-7-3.14-7-7-7zm1 3H6v5h2V4zm0 6H6v2h2v-2z"></path></svg></span>info</div><div class="admonitionContent_BuS1"><p>The <strong>Google Calendar</stro [...]
+<iframe src="https://calendar.google.com/calendar/embed?src=25326691dcaf6dbb9939efe149bb85f2888a654c693763b2d45720502de526f8%40group.calendar.google.com&ctz=Greenwich" width="800" height="600" frameborder="0" scrolling="no"></iframe></div><footer class="theme-doc-footer docusaurus-mt-lg"><div class="row margin-top--sm theme-doc-footer-edit-meta-row"><div class="col"><a href="https://github.com/apache/fluss/edit/main/website/community/welcome.md" target="_blank" rel="noopener noreferr [...]
+ Apache®, Apache Flink®, Flink®, Apache Kafka®, Kafka®, Spark® and associated open source project names and logos are trademarks of the Apache Software Foundation.</div></div></div></footer></div>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/0.5/concepts/architecture/index.html b/docs/0.5/concepts/architecture/index.html
new file mode 100644
index 0000000..b563060
--- /dev/null
+++ b/docs/0.5/concepts/architecture/index.html
@@ -0,0 +1,68 @@
+<!doctype html>
+<html lang="en" dir="ltr" class="docs-wrapper plugin-docs plugin-id-default docs-version-0.5 docs-doc-page docs-doc-id-concepts/architecture" data-has-hydrated="false">
+<head>
+<meta charset="UTF-8">
+<meta name="generator" content="Docusaurus v3.8.1">
+<title data-rh="true">Architecture | Fluss</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/docusaurus-social-card.jpg"><meta data-rh="true" name="twitter:image" content="https://fluss.apache.org/img/docusaurus-social-card.jpg"><meta data-rh="true" property="og:url" content="https://fluss.apache.org/d [...]
+<link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Fluss Atom Feed">
+
+
+
+
+<link rel="search" type="application/opensearchdescription+xml" title="Fluss" href="/opensearch.xml">
+
+<link rel="icon" href="/img/logo.svg">
+<link rel="manifest" href="/manifest.json">
+<meta name="theme-color" content="#0071e3"><link rel="stylesheet" href="/assets/css/styles.3ca55d09.css">
+<script src="/assets/js/runtime~main.264c6f6f.js" defer="defer"></script>
+<script src="/assets/js/main.a06cb6b9.js" defer="defer"></script>
+</head>
+<body class="navigation-with-keyboard">
+<svg xmlns="http://www.w3.org/2000/svg" style="display: none;"><defs>
+<symbol id="theme-svg-external-link" viewBox="0 0 24 24"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"/></symbol>
+</defs></svg>
+<script>!function(){var t="light";var e=function(){try{return new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}}()||function(){try{return window.localStorage.getItem("theme")}catch(t){}}();document.documentElement.setAttribute("data-theme",e||t),document.documentElement.setAttribute("data-theme-choice",e||t)}(),function(){try{const c=new URLSearchParams(window.location.search).entries();for(var[t,e]of c)if(t.startsWith("docusaurus-data-")){var a=t.replace("do [...]
+<p>A Fluss cluster consists of two main processes: the <strong>CoordinatorServer</strong> and the <strong>TabletServer</strong>.</p>
+<p><img decoding="async" loading="lazy" alt="Fluss Architecture" src="/assets/images/architecture-b318beb94d717f94d6fe64b6303e79ab.png" width="6714" height="4904" class="img_ev3q"></p>
+<h2 class="anchor anchorWithStickyNavbar_LWe7" id="coordinatorserver">CoordinatorServer<a href="#coordinatorserver" class="hash-link" aria-label="Direct link to CoordinatorServer" title="Direct link to CoordinatorServer"></a></h2>
+<p>The <strong>CoordinatorServer</strong> serves as the central control and management component of the cluster. It is responsible for maintaining metadata, managing tablet allocation, listing nodes, and handling permissions.</p>
+<p>Additionally, it coordinates critical operations such as:</p>
+<ul>
+<li>Rebalancing data during node scaling (upscaling or downscaling).</li>
+<li>Managing data migration and service node switching in the event of node failures.</li>
+<li>Overseeing table management tasks, including creating or deleting tables and updating bucket counts.</li>
+</ul>
+<p>As the <strong>brain</strong> of the cluster, the <strong>Coordinator Server</strong> ensures efficient cluster operation and seamless management of resources.</p>
+<h2 class="anchor anchorWithStickyNavbar_LWe7" id="tabletserver">TabletServer<a href="#tabletserver" class="hash-link" aria-label="Direct link to TabletServer" title="Direct link to TabletServer"></a></h2>
+<p>The <strong>TabletServer</strong> is responsible for data storage, persistence, and providing I/O services directly to users. It comprises two key components: <strong>LogStore</strong> and <strong>KvStore</strong>.</p>
+<ul>
+<li>For <strong>PrimaryKey Tables</strong> which support updates, both <strong>LogStore</strong> and <strong>KvStore</strong> are activated. The KvStore is used to support updates and point lookup efficiently. LogStore is used to store the changelogs of the table.</li>
+<li>For <strong>Log Tables</strong> which only supports appends, only the <strong>LogStore</strong> is activated, optimizing performance for write-heavy workloads.</li>
+</ul>
+<p>This architecture ensures the <strong>TabletServer</strong> delivers tailored data handling capabilities based on table types.</p>
+<h3 class="anchor anchorWithStickyNavbar_LWe7" id="logstore">LogStore<a href="#logstore" class="hash-link" aria-label="Direct link to LogStore" title="Direct link to LogStore"></a></h3>
+<p>The <strong>LogStore</strong> is designed to store log data, functioning similarly to a database binlog.
+Messages can only be appended, not modified, ensuring data integrity.
+Its primary purpose is to enable low-latency streaming reads and to serve as the write-ahead log (WAL) for restoring the <strong>KvStore</strong>.</p>
+<h3 class="anchor anchorWithStickyNavbar_LWe7" id="kvstore">KvStore<a href="#kvstore" class="hash-link" aria-label="Direct link to KvStore" title="Direct link to KvStore"></a></h3>
+<p>The <strong>KvStore</strong> is used to store table data, functioning similarly to database tables. It supports data updates and deletions, enabling efficient querying and table management. Additionally, it generates comprehensive changelogs to track data modifications.</p>
+<h3 class="anchor anchorWithStickyNavbar_LWe7" id="tablet--bucket">Tablet / Bucket<a href="#tablet--bucket" class="hash-link" aria-label="Direct link to Tablet / Bucket" title="Direct link to Tablet / Bucket"></a></h3>
+<p>Table data is divided into multiple buckets based on the defined bucketing policy.</p>
+<p>Data for the <strong>LogStore</strong> and <strong>KvStore</strong> is stored within tablets. Each tablet consists of a <strong>LogTablet</strong> and, optionally, a <strong>KvTablet</strong>, depending on whether the table supports updates.
+Both <strong>LogStore</strong> and <strong>KvStore</strong> adhere to the same bucket-splitting and tablet allocation policies. As a result, <strong>LogTablets</strong> and <strong>KvTablets</strong> with the same <code>tablet_id</code> are always allocated to the same <strong>TabletServer</strong> for efficient data management.</p>
+<p>The <strong>LogTablet</strong> supports multiple replicas based on the table's configured replication factor, ensuring high availability and fault tolerance. <strong>Currently, replication is not supported for KvTablets</strong>.</p>
+<h2 class="anchor anchorWithStickyNavbar_LWe7" id="zookeeper">Zookeeper<a href="#zookeeper" class="hash-link" aria-label="Direct link to Zookeeper" title="Direct link to Zookeeper"></a></h2>
+<p>Fluss currently utilizes <strong>ZooKeeper</strong> for cluster coordination, metadata storage, and cluster configuration management.
+In upcoming releases, <strong>ZooKeeper will be replaced</strong> by <strong>KvStore</strong> for metadata storage and <strong>Raft</strong> for cluster coordination and ensuring consistency. This transition aims to streamline operations and enhance system reliability. See the <a href="/roadmap/">Roadmap</a> for more details.</p>
+<h2 class="anchor anchorWithStickyNavbar_LWe7" id="remote-storage">Remote Storage<a href="#remote-storage" class="hash-link" aria-label="Direct link to Remote Storage" title="Direct link to Remote Storage"></a></h2>
+<p><strong>Remote Storage</strong> serves two primary purposes:</p>
+<ul>
+<li><strong>Hierarchical Storage for LogStores:</strong> By offloading LogStore data, it reduces storage costs and accelerates scaling operations.</li>
+<li><strong>Persistent Storage for KvStores:</strong> It ensures durable storage for KvStore data and collaborates with LogStore to enable fault recovery.</li>
+</ul>
+<p>Additionally, <strong>Remote Storage</strong> allows clients to perform bulk read operations on Log and Kv data, enhancing data analysis efficiency and reduce the overhead on Fluss servers. In the future, it will also support bulk write operations, optimizing data import workflows for greater scalability and performance.</p>
+<h2 class="anchor anchorWithStickyNavbar_LWe7" id="client">Client<a href="#client" class="hash-link" aria-label="Direct link to Client" title="Direct link to Client"></a></h2>
+<p>Fluss clients/sdks support streaming reads/writes, batch read/writes, DDL and point queries. Currently, the main implementation of client is Flink Connector. Users can use Flink SQL to easily operate Fluss tables and data.</p></div><footer class="theme-doc-footer docusaurus-mt-lg"><div class="row margin-top--sm theme-doc-footer-edit-meta-row"><div class="col"><a href="https://github.com/apache/fluss/edit/main/website/docs/concepts/architecture.md" target="_blank" rel="noopener norefer [...]
+ Apache®, Apache Flink®, Flink®, Apache Kafka®, Kafka®, Spark® and associated open source project names and logos are trademarks of the Apache Software Foundation.</div></div></div></footer></div>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/0.5/dev/building/index.html b/docs/0.5/dev/building/index.html
new file mode 100644
index 0000000..93f06db
--- /dev/null
+++ b/docs/0.5/dev/building/index.html
@@ -0,0 +1,43 @@
+<!doctype html>
+<html lang="en" dir="ltr" class="docs-wrapper plugin-docs plugin-id-default docs-version-0.5 docs-doc-page docs-doc-id-dev/building" data-has-hydrated="false">
+<head>
+<meta charset="UTF-8">
+<meta name="generator" content="Docusaurus v3.8.1">
+<title data-rh="true">Building Fluss from Source | Fluss</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/docusaurus-social-card.jpg"><meta data-rh="true" name="twitter:image" content="https://fluss.apache.org/img/docusaurus-social-card.jpg"><meta data-rh="true" property="og:url" content="https://flus [...]
+<link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Fluss Atom Feed">
+
+
+
+
+<link rel="search" type="application/opensearchdescription+xml" title="Fluss" href="/opensearch.xml">
+
+<link rel="icon" href="/img/logo.svg">
+<link rel="manifest" href="/manifest.json">
+<meta name="theme-color" content="#0071e3"><link rel="stylesheet" href="/assets/css/styles.3ca55d09.css">
+<script src="/assets/js/runtime~main.264c6f6f.js" defer="defer"></script>
+<script src="/assets/js/main.a06cb6b9.js" defer="defer"></script>
+</head>
+<body class="navigation-with-keyboard">
+<svg xmlns="http://www.w3.org/2000/svg" style="display: none;"><defs>
+<symbol id="theme-svg-external-link" viewBox="0 0 24 24"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"/></symbol>
+</defs></svg>
+<script>!function(){var t="light";var e=function(){try{return new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}}()||function(){try{return window.localStorage.getItem("theme")}catch(t){}}();document.documentElement.setAttribute("data-theme",e||t),document.documentElement.setAttribute("data-theme-choice",e||t)}(),function(){try{const c=new URLSearchParams(window.location.search).entries();for(var[t,e]of c)if(t.startsWith("docusaurus-data-")){var a=t.replace("do [...]
+<p>This page covers how to build Fluss 0.6.0-SNAPSHOT from sources.</p>
+<h2 class="anchor anchorWithStickyNavbar_LWe7" id="build-fluss">Build Fluss<a href="#build-fluss" class="hash-link" aria-label="Direct link to Build Fluss" title="Direct link to Build Fluss"></a></h2>
+<p>In order to build Fluss you need to get the source code by <a href="https://github.com/alibaba/fluss" target="_blank" rel="noopener noreferrer">clone the git repository</a>.</p>
+<p>In addition, you need <strong>Maven 3.8.6</strong> and a <strong>JDK</strong> (Java Development Kit). Fluss requires <strong>Java 8 or Java 11</strong> to build.</p>
+<p>To clone from git, enter:</p>
+<div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#9CDCFE;--prism-background-color:#1E1E1E"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style="color:#9CDCFE;background-color:#1E1E1E"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#9CDCFE"><span class="token function" style="color:rgb(220, 220, 170)">git</span><span class="token plain"> clone git@github.c [...]
+<p>The simplest way of building Fluss is by running:</p>
+<div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#9CDCFE;--prism-background-color:#1E1E1E"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style="color:#9CDCFE;background-color:#1E1E1E"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#9CDCFE"><span class="token plain">mvn clean </span><span class="token function" style="color:rgb(220, 220, 170)">install</spa [...]
+<p>This instructs <a href="http://maven.apache.org" target="_blank" rel="noopener noreferrer">Maven</a> (<code>mvn</code>) to first remove all existing builds (<code>clean</code>) and then create a new Fluss binary (<code>install</code>).</p>
+<p>To speed up the build you can:</p>
+<ul>
+<li>skip tests by using <code> -DskipTests</code></li>
+<li>use Maven's parallel build feature, e.g., <code>mvn package -T 1C</code> will attempt to build 1 module for each CPU core in parallel.</li>
+</ul>
+<p>The build script will be:</p>
+<div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#9CDCFE;--prism-background-color:#1E1E1E"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style="color:#9CDCFE;background-color:#1E1E1E"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#9CDCFE"><span class="token plain">mvn clean </span><span class="token function" style="color:rgb(220, 220, 170)">install</spa [...]
+ Apache®, Apache Flink®, Flink®, Apache Kafka®, Kafka®, Spark® and associated open source project names and logos are trademarks of the Apache Software Foundation.</div></div></div></footer></div>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/0.5/dev/ide-setup/index.html b/docs/0.5/dev/ide-setup/index.html
new file mode 100644
index 0000000..1f7b250
--- /dev/null
+++ b/docs/0.5/dev/ide-setup/index.html
@@ -0,0 +1,151 @@
+<!doctype html>
+<html lang="en" dir="ltr" class="docs-wrapper plugin-docs plugin-id-default docs-version-0.5 docs-doc-page docs-doc-id-dev/ide-setup" data-has-hydrated="false">
+<head>
+<meta charset="UTF-8">
+<meta name="generator" content="Docusaurus v3.8.1">
+<title data-rh="true">Import Fluss into an IDE | Fluss</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/docusaurus-social-card.jpg"><meta data-rh="true" name="twitter:image" content="https://fluss.apache.org/img/docusaurus-social-card.jpg"><meta data-rh="true" property="og:url" content="https://fluss. [...]
+<link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Fluss Atom Feed">
+
+
+
+
+<link rel="search" type="application/opensearchdescription+xml" title="Fluss" href="/opensearch.xml">
+
+<link rel="icon" href="/img/logo.svg">
+<link rel="manifest" href="/manifest.json">
+<meta name="theme-color" content="#0071e3"><link rel="stylesheet" href="/assets/css/styles.3ca55d09.css">
+<script src="/assets/js/runtime~main.264c6f6f.js" defer="defer"></script>
+<script src="/assets/js/main.a06cb6b9.js" defer="defer"></script>
+</head>
+<body class="navigation-with-keyboard">
+<svg xmlns="http://www.w3.org/2000/svg" style="display: none;"><defs>
+<symbol id="theme-svg-external-link" viewBox="0 0 24 24"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"/></symbol>
+</defs></svg>
+<script>!function(){var t="light";var e=function(){try{return new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}}()||function(){try{return window.localStorage.getItem("theme")}catch(t){}}();document.documentElement.setAttribute("data-theme",e||t),document.documentElement.setAttribute("data-theme-choice",e||t)}(),function(){try{const c=new URLSearchParams(window.location.search).entries();for(var[t,e]of c)if(t.startsWith("docusaurus-data-")){var a=t.replace("do [...]
+<p>The sections below describe how to import the Fluss project into an IDE
+for the development of Fluss itself.</p>
+<div class="theme-admonition theme-admonition-note admonition_xJq3 alert alert--secondary"><div class="admonitionHeading_Gvgb"><span class="admonitionIcon_Rf37"><svg viewBox="0 0 14 16"><path fill-rule="evenodd" d="M6.3 5.69a.942.942 0 0 1-.28-.7c0-.28.09-.52.28-.7.19-.18.42-.28.7-.28.28 0 .52.09.7.28.18.19.28.42.28.7 0 .28-.09.52-.28.7a1 1 0 0 1-.7.3c-.28 0-.52-.11-.7-.3zM8 7.99c-.02-.25-.11-.48-.31-.69-.2-.19-.42-.3-.69-.31H6c-.27.02-.48.13-.69.31-.2.2-.3.44-.31.69h1v3c.02.27.11.5.31.6 [...]
+command line first (<code>mvn clean package -DskipTests</code>) as it might be your IDE
+that has a bug or is not properly set up.</p></div></div>
+<h2 class="anchor anchorWithStickyNavbar_LWe7" id="preparation">Preparation<a href="#preparation" class="hash-link" aria-label="Direct link to Preparation" title="Direct link to Preparation"></a></h2>
+<p>To get started, please first checkout the Fluss sources from our
+<a href="https://github.com/alibaba/fluss" target="_blank" rel="noopener noreferrer">repository</a>,
+e.g.</p>
+<div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#9CDCFE;--prism-background-color:#1E1E1E"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style="color:#9CDCFE;background-color:#1E1E1E"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#9CDCFE"><span class="token function" style="color:rgb(220, 220, 170)">git</span><span class="token plain"> clone git@github.c [...]
+<h2 class="anchor anchorWithStickyNavbar_LWe7" id="intellij-idea">IntelliJ IDEA<a href="#intellij-idea" class="hash-link" aria-label="Direct link to IntelliJ IDEA" title="Direct link to IntelliJ IDEA"></a></h2>
+<p>The following guide has been written for <a href="https://www.jetbrains.com/idea/download/" target="_blank" rel="noopener noreferrer">IntelliJ IDEA</a>
+2024.3. Some details might differ in other versions. Please make sure to follow all steps</p>
+<h3 class="anchor anchorWithStickyNavbar_LWe7" id="importing-fluss">Importing Fluss<a href="#importing-fluss" class="hash-link" aria-label="Direct link to Importing Fluss" title="Direct link to Importing Fluss"></a></h3>
+<ol>
+<li>Choose "New" → "Project from Existing Sources".</li>
+<li>Select the root folder of the cloned Fluss repository.</li>
+<li>Choose "Import project from external model" and select "Maven".</li>
+<li>Leave the default options and successively click "Next" until you reach the SDK section.</li>
+<li>If there is no SDK listed, create one using the "+" sign on the top left.
+Select "JDK", choose the JDK home directory and click "OK".
+Select the most suitable JDK version. NOTE: A good rule of thumb is to select
+the JDK version matching the active Maven profile.</li>
+<li>Continue by clicking "Next" until the import is finished.</li>
+<li>Open the "Maven" tab (or right-click on the imported project and find "Maven") and run
+"Generate Sources and Update Folders". Alternatively, you can run
+<code>mvn clean package -DskipTests</code>.</li>
+<li>Build the Project ("Build" → "Build Project").</li>
+</ol>
+<h3 class="anchor anchorWithStickyNavbar_LWe7" id="copyright-profile">Copyright Profile<a href="#copyright-profile" class="hash-link" aria-label="Direct link to Copyright Profile" title="Direct link to Copyright Profile"></a></h3>
+<p>Every file needs to include the Alibaba license as a header. This can be automated in IntelliJ by
+adding a Copyright profile:</p>
+<ol>
+<li>
+<p>Go to "Settings" → "Editor" → "Copyright" → "Copyright Profiles".</p>
+</li>
+<li>
+<p>Add a new profile and name it "Alibaba".</p>
+</li>
+<li>
+<p>Add the following text as the license text:</p>
+<div class="language-text codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#9CDCFE;--prism-background-color:#1E1E1E"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar" style="color:#9CDCFE;background-color:#1E1E1E"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#9CDCFE"><span class="token plain"> Copyright (c) 2024 Alibaba Group Holding Ltd.</span><br></span><span class="token-line" st [...]
+</li>
+<li>
+<p>Go to "Editor" → "Copyright" and choose the "Alibaba" profile as the default profile for this
+project.</p>
+</li>
+<li>
+<p>Click "Apply".</p>
+</li>
+</ol>
+<h3 class="anchor anchorWithStickyNavbar_LWe7" id="required-plugins">Required Plugins<a href="#required-plugins" class="hash-link" aria-label="Direct link to Required Plugins" title="Direct link to Required Plugins"></a></h3>
+<p>Go to "Settings" → "Plugins" and select the "Marketplace" tab. Search for the following plugins,
+install them, and restart the IDE if prompted:</p>
+<ul>
+<li><a href="https://plugins.jetbrains.com/plugin/22113-save-actions-x" target="_blank" rel="noopener noreferrer">Save Actions X</a></li>
+<li><a href="https://plugins.jetbrains.com/plugin/1065-checkstyle-idea" target="_blank" rel="noopener noreferrer">Checkstyle-IDEA</a></li>
+</ul>
+<p>You will also need to install the <a href="https://github.com/google/google-java-format" target="_blank" rel="noopener noreferrer">google-java-format</a>
+plugin. However, a specific version of this plugin is required. Download
+<a href="https://plugins.jetbrains.com/plugin/8527-google-java-format/versions/stable/115957" target="_blank" rel="noopener noreferrer">google-java-format v1.7.0.6</a>
+and install it as follows. <strong>Make sure to never update this plugin</strong>.</p>
+<ol>
+<li>Go to "Settings" → "Plugins".</li>
+<li>Click the gear icon and select "Install Plugin from Disk".</li>
+<li>Navigate to the downloaded ZIP file and select it.</li>
+</ol>
+<h4 class="anchor anchorWithStickyNavbar_LWe7" id="code-formatting">Code Formatting<a href="#code-formatting" class="hash-link" aria-label="Direct link to Code Formatting" title="Direct link to Code Formatting"></a></h4>
+<p>Fluss uses <a href="https://github.com/diffplug/spotless/tree/main/plugin-maven" target="_blank" rel="noopener noreferrer">Spotless</a> together with
+<a href="https://github.com/google/google-java-format" target="_blank" rel="noopener noreferrer">google-java-format</a> to format the Java code.</p>
+<p>It is recommended to automatically format your code by applying the following settings:</p>
+<ol>
+<li>Go to "Settings" → "Other Settings" → "google-java-format Settings".</li>
+<li>Tick the checkbox to enable the plugin.</li>
+<li>Change the code style to "Android Open Source Project (AOSP) style".</li>
+<li>Go to "Settings" → "Tools" → "Actions on Save".</li>
+<li>Under "Formatting Actions", select "Optimize imports" and "Reformat code".</li>
+<li>From the "All file types list" next to "Reformat code", select Java and Scala.</li>
+</ol>
+<p>For earlier IntelliJ IDEA versions:</p>
+<ol start="4">
+<li>Go to "Settings" → "Other Settings" → "Save Actions".</li>
+<li>Under "General", enable your preferred settings for when to format the code, e.g. "Activate save actions on save".</li>
+<li>Under "Formatting Actions", select "Optimize imports" and "Reformat file".</li>
+<li>Under "File Path Inclusions", add an entry for <code>.*\.java</code> to avoid formatting other file types.</li>
+</ol>
+<p>You can also format the whole project via Maven by using <code>mvn spotless:apply</code>.</p>
+<h4 class="anchor anchorWithStickyNavbar_LWe7" id="checkstyle-for-java">Checkstyle For Java<a href="#checkstyle-for-java" class="hash-link" aria-label="Direct link to Checkstyle For Java" title="Direct link to Checkstyle For Java"></a></h4>
+<p><a href="https://checkstyle.sourceforge.io/" target="_blank" rel="noopener noreferrer">Checkstyle</a> is used to enforce static coding guidelines.</p>
+<ol>
+<li>Go to "Settings" → "Tools" → "Checkstyle".</li>
+<li>Set "Scan Scope" to "Only Java sources (including tests)".</li>
+<li>For "Checkstyle Version" select "9.3".</li>
+<li>Under "Configuration File" click the "+" icon to add a new configuration.</li>
+<li>Set "Description" to "Fluss".</li>
+<li>Select "Use a local Checkstyle file" and point it to <code>tools/maven/checkstyle.xml</code> located within
+your cloned repository.</li>
+<li>Select "Store relative to project location" and click "Next".</li>
+<li>Configure the property <code>checkstyle.suppressions.file</code> with the value <code>suppressions.xml</code> and click
+"Next".</li>
+<li>Click "Finish".</li>
+<li>Select "Fluss" as the only active configuration file and click "Apply".</li>
+</ol>
+<p>You can now import the Checkstyle configuration for the Java code formatter.</p>
+<ol>
+<li>Go to "Settings" → "Editor" → "Code Style" → "Java".</li>
+<li>Click the gear icon next to "Scheme" and select "Import Scheme" → "Checkstyle Configuration".</li>
+<li>Navigate to and select <code>tools/maven/checkstyle.xml</code> located within your cloned repository.</li>
+</ol>
+<p>To verify the setup, click "View" → "Tool Windows" → "Checkstyle" and find the "Check Module"
+button in the opened tool window. It should report no violations.</p>
+<h3 class="anchor anchorWithStickyNavbar_LWe7" id="common-problems">Common Problems<a href="#common-problems" class="hash-link" aria-label="Direct link to Common Problems" title="Direct link to Common Problems"></a></h3>
+<p>This section lists issues that developers have run into in the past when working with IntelliJ.</p>
+<h4 class="anchor anchorWithStickyNavbar_LWe7" id="compilation-fails-with-invalid-flag---add-exportsjavabasesunnetutilall-unnamed">Compilation fails with <code>invalid flag: --add-exports=java.base/sun.net.util=ALL-UNNAMED</code><a href="#compilation-fails-with-invalid-flag---add-exportsjavabasesunnetutilall-unnamed" class="hash-link" aria-label="Direct link to compilation-fails-with-invalid-flag---add-exportsjavabasesunnetutilall-unnamed" title="Direct link to compilation-fails-with-inv [...]
+<p>This happens if the "java11" Maven profile is active, but an older JDK version is used. Go to
+"View" → "Tool Windows" → "Maven" and uncheck the "java11" profile. Afterwards, reimport the
+project.</p>
+<h4 class="anchor anchorWithStickyNavbar_LWe7" id="compilation-fails-with-package-sunmisc-does-not-exist">Compilation fails with <code>package sun.misc does not exist</code><a href="#compilation-fails-with-package-sunmisc-does-not-exist" class="hash-link" aria-label="Direct link to compilation-fails-with-package-sunmisc-does-not-exist" title="Direct link to compilation-fails-with-package-sunmisc-does-not-exist"></a></h4>
+<p>This happens if you are using JDK 11 and compile to Java 8 with the <code>--release</code> option. This option is currently incompatible with our build setup.
+Go to "Settings" → "Build, Execution, Deployment" → "Compiler" → "Java Compiler" and uncheck the "Use '--release' option for cross-compilation (Java 9 and later)".</p>
+<h4 class="anchor anchorWithStickyNavbar_LWe7" id="examples-fail-with-a-noclassdeffounderror-for-fluss-classes">Examples fail with a <code>NoClassDefFoundError</code> for Fluss classes.<a href="#examples-fail-with-a-noclassdeffounderror-for-fluss-classes" class="hash-link" aria-label="Direct link to examples-fail-with-a-noclassdeffounderror-for-fluss-classes" title="Direct link to examples-fail-with-a-noclassdeffounderror-for-fluss-classes"></a></h4>
+<p>This happens if Fluss dependencies are set to "provided", resulting in them not being available
+on the classpath. You can either check "Include dependencies with 'Provided' scope" in your
+run configuration, or create a test that calls the <code>main()</code> method of the example.</p></div><footer class="theme-doc-footer docusaurus-mt-lg"><div class="row margin-top--sm theme-doc-footer-edit-meta-row"><div class="col"><a href="https://github.com/apache/fluss/edit/main/website/docs/dev/ide-setup.md" target="_blank" rel="noopener noreferrer" class="theme-edit-this-page"><svg fill="currentColor" height="20" width="20" viewBox="0 0 40 40" class="iconEdit_Z9Sw" aria-hidden="tru [...]
+ Apache®, Apache Flink®, Flink®, Apache Kafka®, Kafka®, Spark® and associated open source project names and logos are trademarks of the Apache Software Foundation.</div></div></div></footer></div>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/0.5/engine-flink/ddl/index.html b/docs/0.5/engine-flink/ddl/index.html
new file mode 100644
index 0000000..a4c277d
--- /dev/null
+++ b/docs/0.5/engine-flink/ddl/index.html
@@ -0,0 +1,63 @@
+<!doctype html>
+<html lang="en" dir="ltr" class="docs-wrapper plugin-docs plugin-id-default docs-version-0.5 docs-doc-page docs-doc-id-engine-flink/ddl" data-has-hydrated="false">
+<head>
+<meta charset="UTF-8">
+<meta name="generator" content="Docusaurus v3.8.1">
+<title data-rh="true">Flink DDL | Fluss</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/docusaurus-social-card.jpg"><meta data-rh="true" name="twitter:image" content="https://fluss.apache.org/img/docusaurus-social-card.jpg"><meta data-rh="true" property="og:url" content="https://fluss.apache.org/docs [...]
+<link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Fluss Atom Feed">
+
+
+
+
+<link rel="search" type="application/opensearchdescription+xml" title="Fluss" href="/opensearch.xml">
+
+<link rel="icon" href="/img/logo.svg">
+<link rel="manifest" href="/manifest.json">
+<meta name="theme-color" content="#0071e3"><link rel="stylesheet" href="/assets/css/styles.3ca55d09.css">
+<script src="/assets/js/runtime~main.264c6f6f.js" defer="defer"></script>
+<script src="/assets/js/main.a06cb6b9.js" defer="defer"></script>
+</head>
+<body class="navigation-with-keyboard">
+<svg xmlns="http://www.w3.org/2000/svg" style="display: none;"><defs>
+<symbol id="theme-svg-external-link" viewBox="0 0 24 24"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"/></symbol>
+</defs></svg>
+<script>!function(){var t="light";var e=function(){try{return new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}}()||function(){try{return window.localStorage.getItem("theme")}catch(t){}}();document.documentElement.setAttribute("data-theme",e||t),document.documentElement.setAttribute("data-theme-choice",e||t)}(),function(){try{const c=new URLSearchParams(window.location.search).entries();for(var[t,e]of c)if(t.startsWith("docusaurus-data-")){var a=t.replace("do [...]
+<h2 class="anchor anchorWithStickyNavbar_LWe7" id="create-catalog">Create Catalog<a href="#create-catalog" class="hash-link" aria-label="Direct link to Create Catalog" title="Direct link to Create Catalog"></a></h2>
+<p>Fluss supports creating and managing tables through the Fluss Catalog.</p>
+<div class="language-sql codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#9CDCFE;--prism-background-color:#1E1E1E"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-sql codeBlock_bY9V thin-scrollbar" style="color:#9CDCFE;background-color:#1E1E1E"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#9CDCFE"><span class="token keyword" style="color:rgb(86, 156, 214)">CREATE</span><span class="token plain"> CATALOG fluss_catal [...]
+<p>The following properties can be set if using the Fluss catalog:</p>
+<table><thead><tr><th>Option</th><th>Required</th><th>Default</th><th>Description</th></tr></thead><tbody><tr><td>type</td><td>required</td><td>(none)</td><td>Catalog type, must to be 'fluss' here.</td></tr><tr><td>bootstrap.servers</td><td>required</td><td>(none)</td><td>Comma separated list of Fluss servers.</td></tr><tr><td>default-database</td><td>optional</td><td>fluss</td><td>The default database to use when switching to this catalog.</td></tr></tbody></table>
+<p>The following introduced statements assuming the current catalog is switched to the Fluss catalog using <code>USE CATALOG <catalog_name></code> statement.</p>
+<h2 class="anchor anchorWithStickyNavbar_LWe7" id="create-database">Create Database<a href="#create-database" class="hash-link" aria-label="Direct link to Create Database" title="Direct link to Create Database"></a></h2>
+<p>By default, FlussCatalog will use the <code>fluss</code> database in Flink. Using the following example to create a separate database in order to avoid creating tables under the default <code>fluss</code> database:</p>
+<div class="language-sql codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#9CDCFE;--prism-background-color:#1E1E1E"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-sql codeBlock_bY9V thin-scrollbar" style="color:#9CDCFE;background-color:#1E1E1E"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#9CDCFE"><span class="token keyword" style="color:rgb(86, 156, 214)">CREATE</span><span class="token plain"> </span><span class= [...]
+<h2 class="anchor anchorWithStickyNavbar_LWe7" id="drop-database">Drop Database<a href="#drop-database" class="hash-link" aria-label="Direct link to Drop Database" title="Direct link to Drop Database"></a></h2>
+<p>To delete a database, this will drop all the tables in the database as well:</p>
+<div class="language-sql codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#9CDCFE;--prism-background-color:#1E1E1E"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-sql codeBlock_bY9V thin-scrollbar" style="color:#9CDCFE;background-color:#1E1E1E"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#9CDCFE"><span class="token comment" style="color:rgb(106, 153, 85)">-- Flink doesn't allow drop current database, switch t [...]
+<h2 class="anchor anchorWithStickyNavbar_LWe7" id="create-table">Create Table<a href="#create-table" class="hash-link" aria-label="Direct link to Create Table" title="Direct link to Create Table"></a></h2>
+<h3 class="anchor anchorWithStickyNavbar_LWe7" id="primarykey-table">PrimaryKey Table<a href="#primarykey-table" class="hash-link" aria-label="Direct link to PrimaryKey Table" title="Direct link to PrimaryKey Table"></a></h3>
+<p>The following SQL statement will create a <a href="/docs/0.5/table-design/table-types/pk-table/">PrimaryKey Table</a> with a primary key consisting of shop_id and user_id.</p>
+<div class="language-sql codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#9CDCFE;--prism-background-color:#1E1E1E"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-sql codeBlock_bY9V thin-scrollbar" style="color:#9CDCFE;background-color:#1E1E1E"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#9CDCFE"><span class="token keyword" style="color:rgb(86, 156, 214)">CREATE</span><span class="token plain"> </span><span class= [...]
+<h3 class="anchor anchorWithStickyNavbar_LWe7" id="log-table">Log Table<a href="#log-table" class="hash-link" aria-label="Direct link to Log Table" title="Direct link to Log Table"></a></h3>
+<p>The following SQL statement creates a <a href="/docs/0.5/table-design/table-types/log-table/">Log Table</a> by not specifying primary key clause.</p>
+<div class="language-sql codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#9CDCFE;--prism-background-color:#1E1E1E"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-sql codeBlock_bY9V thin-scrollbar" style="color:#9CDCFE;background-color:#1E1E1E"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#9CDCFE"><span class="token keyword" style="color:rgb(86, 156, 214)">CREATE</span><span class="token plain"> </span><span class= [...]
+<h3 class="anchor anchorWithStickyNavbar_LWe7" id="partitioned-primarykeylog-table">Partitioned (PrimaryKey/Log) Table<a href="#partitioned-primarykeylog-table" class="hash-link" aria-label="Direct link to Partitioned (PrimaryKey/Log) Table" title="Direct link to Partitioned (PrimaryKey/Log) Table"></a></h3>
+<p>The following SQL statement creates a Partitioned PrimaryKey Table in Fluss. Note that the partitioned field (<code>dt</code> in this case) must be a subset of the primary key (<code>dt, shop_id, user_id</code> in this case).
+Currently, Fluss only supports one partitioned field with <code>STRING</code> type.</p>
+<div class="theme-admonition theme-admonition-note admonition_xJq3 alert alert--secondary"><div class="admonitionHeading_Gvgb"><span class="admonitionIcon_Rf37"><svg viewBox="0 0 14 16"><path fill-rule="evenodd" d="M6.3 5.69a.942.942 0 0 1-.28-.7c0-.28.09-.52.28-.7.19-.18.42-.28.7-.28.28 0 .52.09.7.28.18.19.28.42.28.7 0 .28-.09.52-.28.7a1 1 0 0 1-.7.3c-.28 0-.52-.11-.7-.3zM8 7.99c-.02-.25-.11-.48-.31-.69-.2-.19-.42-.3-.69-.31H6c-.27.02-.48.13-.69.31-.2.2-.3.44-.31.69h1v3c.02.27.11.5.31.6 [...]
+<div class="language-sql codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#9CDCFE;--prism-background-color:#1E1E1E"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-sql codeBlock_bY9V thin-scrollbar" style="color:#9CDCFE;background-color:#1E1E1E"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#9CDCFE"><span class="token keyword" style="color:rgb(86, 156, 214)">CREATE</span><span class="token plain"> </span><span class= [...]
+<p>The following SQL statement creates a Partitioned Log Table in Fluss.</p>
+<div class="language-sql codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#9CDCFE;--prism-background-color:#1E1E1E"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-sql codeBlock_bY9V thin-scrollbar" style="color:#9CDCFE;background-color:#1E1E1E"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#9CDCFE"><span class="token keyword" style="color:rgb(86, 156, 214)">CREATE</span><span class="token plain"> </span><span class= [...]
+<p>The supported option in "with" parameters when creating a table are as follows:</p>
+<table><thead><tr><th>Option</th><th>Type</th><th>Required</th><th>Default</th><th>Description</th></tr></thead><tbody><tr><td>bucket.num</td><td>int</td><td>optional</td><td>The bucket number of Fluss cluster.</td><td>The number of buckets of a Fluss table.</td></tr><tr><td>bucket.key</td><td>String</td><td>optional</td><td>(none)</td><td>Specific the distribution policy of the Fluss table. Data will be distributed to each bucket according to the hash value of bucket-key. If you specif [...]
+<h2 class="anchor anchorWithStickyNavbar_LWe7" id="create-table-like">Create Table Like<a href="#create-table-like" class="hash-link" aria-label="Direct link to Create Table Like" title="Direct link to Create Table Like"></a></h2>
+<p>To create a table with the same schema, partitioning, and table properties as another table, use <code>CREATE TABLE LIKE</code>.</p>
+<div class="language-sql codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#9CDCFE;--prism-background-color:#1E1E1E"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-sql codeBlock_bY9V thin-scrollbar" style="color:#9CDCFE;background-color:#1E1E1E"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#9CDCFE"><span class="token comment" style="color:rgb(106, 153, 85)">-- there is a temporary datagen table</span><span class="to [...]
+<p>For more details, refer to the <a href="https://nightlies.apache.org/flink/flink-docs-release-1.20/docs/dev/table/sql/create/#like" target="_blank" rel="noopener noreferrer">Flink CREATE TABLE</a> documentation.</p>
+<h2 class="anchor anchorWithStickyNavbar_LWe7" id="drop-table">Drop Table<a href="#drop-table" class="hash-link" aria-label="Direct link to Drop Table" title="Direct link to Drop Table"></a></h2>
+<p>To delete a table, run:</p>
+<div class="language-sql codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#9CDCFE;--prism-background-color:#1E1E1E"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-sql codeBlock_bY9V thin-scrollbar" style="color:#9CDCFE;background-color:#1E1E1E"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#9CDCFE"><span class="token keyword" style="color:rgb(86, 156, 214)">DROP</span><span class="token plain"> </span><span class="t [...]
+<p>This will entirely remove all the data of the table in the Fluss cluster.</p></div><footer class="theme-doc-footer docusaurus-mt-lg"><div class="row margin-top--sm theme-doc-footer-edit-meta-row"><div class="col"><a href="https://github.com/apache/fluss/edit/main/website/docs/engine-flink/ddl.md" target="_blank" rel="noopener noreferrer" class="theme-edit-this-page"><svg fill="currentColor" height="20" width="20" viewBox="0 0 40 40" class="iconEdit_Z9Sw" aria-hidden="true"><g><path d= [...]
+ Apache®, Apache Flink®, Flink®, Apache Kafka®, Kafka®, Spark® and associated open source project names and logos are trademarks of the Apache Software Foundation.</div></div></div></footer></div>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/0.5/engine-flink/getting-started/index.html b/docs/0.5/engine-flink/getting-started/index.html
new file mode 100644
index 0000000..2735f95
--- /dev/null
+++ b/docs/0.5/engine-flink/getting-started/index.html
@@ -0,0 +1,92 @@
+<!doctype html>
+<html lang="en" dir="ltr" class="docs-wrapper plugin-docs plugin-id-default docs-version-0.5 docs-doc-page docs-doc-id-engine-flink/getting-started" data-has-hydrated="false">
+<head>
+<meta charset="UTF-8">
+<meta name="generator" content="Docusaurus v3.8.1">
+<title data-rh="true">Getting Started with Flink Engine | Fluss</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/docusaurus-social-card.jpg"><meta data-rh="true" name="twitter:image" content="https://fluss.apache.org/img/docusaurus-social-card.jpg"><meta data-rh="true" property="og:url" content="https [...]
+<link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Fluss Atom Feed">
+
+
+
+
+<link rel="search" type="application/opensearchdescription+xml" title="Fluss" href="/opensearch.xml">
+
+<link rel="icon" href="/img/logo.svg">
+<link rel="manifest" href="/manifest.json">
+<meta name="theme-color" content="#0071e3"><link rel="stylesheet" href="/assets/css/styles.3ca55d09.css">
+<script src="/assets/js/runtime~main.264c6f6f.js" defer="defer"></script>
+<script src="/assets/js/main.a06cb6b9.js" defer="defer"></script>
+</head>
+<body class="navigation-with-keyboard">
+<svg xmlns="http://www.w3.org/2000/svg" style="display: none;"><defs>
+<symbol id="theme-svg-external-link" viewBox="0 0 24 24"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"/></symbol>
+</defs></svg>
+<script>!function(){var t="light";var e=function(){try{return new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}}()||function(){try{return window.localStorage.getItem("theme")}catch(t){}}();document.documentElement.setAttribute("data-theme",e||t),document.documentElement.setAttribute("data-theme-choice",e||t)}(),function(){try{const c=new URLSearchParams(window.location.search).entries();for(var[t,e]of c)if(t.startsWith("docusaurus-data-")){var a=t.replace("do [...]
+<h2 class="anchor anchorWithStickyNavbar_LWe7" id="quick-start">Quick Start<a href="#quick-start" class="hash-link" aria-label="Direct link to Quick Start" title="Direct link to Quick Start"></a></h2>
+<p>For a quick introduction to running Flink, refer to the <a href="/docs/0.5/quickstart/flink/">Quick Start</a> guide.</p>
+<h2 class="anchor anchorWithStickyNavbar_LWe7" id="support-flink-versions">Support Flink Versions<a href="#support-flink-versions" class="hash-link" aria-label="Direct link to Support Flink Versions" title="Direct link to Support Flink Versions"></a></h2>
+<table><thead><tr><th>Fluss Connector Versions</th><th>Supported Flink Versions</th></tr></thead><tbody><tr><td>0.5</td><td>1.18, 1.19, 1.20</td></tr></tbody></table>
+<h2 class="anchor anchorWithStickyNavbar_LWe7" id="feature-support">Feature Support<a href="#feature-support" class="hash-link" aria-label="Direct link to Feature Support" title="Direct link to Feature Support"></a></h2>
+<p>Fluss only supports Apache Flink's Table API.</p>
+<table><thead><tr><th>Feature support</th><th>Flink</th><th>Notes</th></tr></thead><tbody><tr><td><a href="/docs/0.5/engine-flink/ddl/#create-catalog">SQL create catalog</a></td><td>✔️</td><td></td></tr><tr><td><a href="/docs/0.5/engine-flink/ddl/#create-database">SQl create database</a></td><td>✔️</td><td></td></tr><tr><td><a href="/docs/0.5/engine-flink/ddl/#drop-database">SQL drop database</a></td><td>✔️</td><td></td></tr><tr><td><a href="/docs/0.5/engine-flink/ddl/#create-table">SQL [...]
+<h2 class="anchor anchorWithStickyNavbar_LWe7" id="preparation-when-using-flink-sql-client">Preparation when using Flink SQL Client<a href="#preparation-when-using-flink-sql-client" class="hash-link" aria-label="Direct link to Preparation when using Flink SQL Client" title="Direct link to Preparation when using Flink SQL Client"></a></h2>
+<ul>
+<li><strong>Download Flink</strong></li>
+</ul>
+<p>Flink runs on all UNIX-like environments, i.e. Linux, Mac OS X, and Cygwin (for Windows).
+If you haven’t downloaded Flink, you can download <a href="https://flink.apache.org/downloads.html" target="_blank" rel="noopener noreferrer">the binary release</a> of Flink, then extract the archive with the following command.</p>
+<div class="language-shell codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#9CDCFE;--prism-background-color:#1E1E1E"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-shell codeBlock_bY9V thin-scrollbar" style="color:#9CDCFE;background-color:#1E1E1E"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#9CDCFE"><span class="token function" style="color:rgb(220, 220, 170)">tar</span><span class="token plain"> </span><span cla [...]
+<ul>
+<li><strong>Copy Fluss Connector Jar</strong></li>
+</ul>
+<p>Download <a href="/downloads/#fluss-connector">Fluss connector jar</a> and copy to the lib directory of your Flink home.</p>
+<div class="language-shell codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#9CDCFE;--prism-background-color:#1E1E1E"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-shell codeBlock_bY9V thin-scrollbar" style="color:#9CDCFE;background-color:#1E1E1E"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#9CDCFE"><span class="token function" style="color:rgb(220, 220, 170)">cp</span><span class="token plain"> fluss-connector-f [...]
+<div class="theme-admonition theme-admonition-note admonition_xJq3 alert alert--secondary"><div class="admonitionHeading_Gvgb"><span class="admonitionIcon_Rf37"><svg viewBox="0 0 14 16"><path fill-rule="evenodd" d="M6.3 5.69a.942.942 0 0 1-.28-.7c0-.28.09-.52.28-.7.19-.18.42-.28.7-.28.28 0 .52.09.7.28.18.19.28.42.28.7 0 .28-.09.52-.28.7a1 1 0 0 1-.7.3c-.28 0-.52-.11-.7-.3zM8 7.99c-.02-.25-.11-.48-.31-.69-.2-.19-.42-.3-.69-.31H6c-.27.02-.48.13-.69.31-.2.2-.3.44-.31.69h1v3c.02.27.11.5.31.6 [...]
+you should download the corresponding <a href="/downloads/#filesystem-jars">Fluss filesystem jar</a> and also copy it to the lib directory of your Flink home.</p></div></div>
+<ul>
+<li><strong>Start a local cluster</strong></li>
+</ul>
+<p>To start a local cluster, run the bash script that comes with Flink:</p>
+<div class="language-shell codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#9CDCFE;--prism-background-color:#1E1E1E"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-shell codeBlock_bY9V thin-scrollbar" style="color:#9CDCFE;background-color:#1E1E1E"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#9CDCFE"><span class="token operator" style="color:rgb(212, 212, 212)"><</span><span class="token plain">FLINK_HOME</span [...]
+<p>You should be able to navigate to the web UI at <a href="http://localhost:8081/" target="_blank" rel="noopener noreferrer">localhost:8081</a> to view the Flink dashboard and see that the cluster is up and running. You can also check its status with the following command:</p>
+<div class="language-shell codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#9CDCFE;--prism-background-color:#1E1E1E"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-shell codeBlock_bY9V thin-scrollbar" style="color:#9CDCFE;background-color:#1E1E1E"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#9CDCFE"><span class="token function" style="color:rgb(220, 220, 170)">ps</span><span class="token plain"> aux </span><span [...]
+<ul>
+<li><strong>Start a sql client</strong></li>
+</ul>
+<p>To quickly stop the cluster and all running components, you can use the provided script:</p>
+<div class="language-shell codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#9CDCFE;--prism-background-color:#1E1E1E"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-shell codeBlock_bY9V thin-scrollbar" style="color:#9CDCFE;background-color:#1E1E1E"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#9CDCFE"><span class="token operator" style="color:rgb(212, 212, 212)"><</span><span class="token plain">FLINK_HOME</span [...]
+<h2 class="anchor anchorWithStickyNavbar_LWe7" id="creating-a-catalog">Creating a Catalog<a href="#creating-a-catalog" class="hash-link" aria-label="Direct link to Creating a Catalog" title="Direct link to Creating a Catalog"></a></h2>
+<p>You can use the following SQL statement to create a catalog.</p>
+<div class="language-sql codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#9CDCFE;--prism-background-color:#1E1E1E"><div class="codeBlockTitle_OeMC">Flink SQL Client</div><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-sql codeBlock_bY9V thin-scrollbar" style="color:#9CDCFE;background-color:#1E1E1E"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#9CDCFE"><span class="token keyword" style="color:rgb(86, 156, 214)">CREA [...]
+<div class="theme-admonition theme-admonition-note admonition_xJq3 alert alert--secondary"><div class="admonitionHeading_Gvgb"><span class="admonitionIcon_Rf37"><svg viewBox="0 0 14 16"><path fill-rule="evenodd" d="M6.3 5.69a.942.942 0 0 1-.28-.7c0-.28.09-.52.28-.7.19-.18.42-.28.7-.28.28 0 .52.09.7.28.18.19.28.42.28.7 0 .28-.09.52-.28.7a1 1 0 0 1-.7.3c-.28 0-.52-.11-.7-.3zM8 7.99c-.02-.25-.11-.48-.31-.69-.2-.19-.42-.3-.69-.31H6c-.27.02-.48.13-.69.31-.2.2-.3.44-.31.69h1v3c.02.27.11.5.31.6 [...]
+<li>The <code>bootstrap.servers</code> means the Fluss server address. Before you config the <code>bootstrap.servers</code>,
+you should start the Fluss server first. See <a href="/docs/0.5/install-deploy/overview/#how-to-deploy-fluss">Deploying Fluss</a>
+for how to build a Fluss cluster.
+Here, it is assumed that there is a Fluss cluster running on your local machine and the CoordinatorServer port is 9123.</li>
+<li>The<code> bootstrap.servers</code> configuration is used to discover all nodes within the Fluss cluster. It can be set with one or more (up to three) Fluss server addresses (either CoordinatorServer or TabletServer) separated by commas.</li>
+</ol></div></div>
+<h2 class="anchor anchorWithStickyNavbar_LWe7" id="creating-a-table">Creating a Table<a href="#creating-a-table" class="hash-link" aria-label="Direct link to Creating a Table" title="Direct link to Creating a Table"></a></h2>
+<div class="language-sql codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#9CDCFE;--prism-background-color:#1E1E1E"><div class="codeBlockTitle_OeMC">Flink SQL Client</div><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-sql codeBlock_bY9V thin-scrollbar" style="color:#9CDCFE;background-color:#1E1E1E"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#9CDCFE"><span class="token keyword" style="color:rgb(86, 156, 214)">USE< [...]
+<h2 class="anchor anchorWithStickyNavbar_LWe7" id="data-writing">Data Writing<a href="#data-writing" class="hash-link" aria-label="Direct link to Data Writing" title="Direct link to Data Writing"></a></h2>
+<p>To append new data to a table, you can use <code>INSERT INTO</code> in batch mode or streaming mode:</p>
+<div class="language-sql codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#9CDCFE;--prism-background-color:#1E1E1E"><div class="codeBlockTitle_OeMC">Flink SQL Client</div><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-sql codeBlock_bY9V thin-scrollbar" style="color:#9CDCFE;background-color:#1E1E1E"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#9CDCFE"><span class="token comment" style="color:rgb(106, 153, 85)">-- E [...]
+<p>To update data record with the primary key (1234, 1234) in a Flink streaming job, use the UPDATE statement as follows:</p>
+<div class="language-sql codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#9CDCFE;--prism-background-color:#1E1E1E"><div class="codeBlockTitle_OeMC">Flink SQL Client</div><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-sql codeBlock_bY9V thin-scrollbar" style="color:#9CDCFE;background-color:#1E1E1E"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#9CDCFE"><span class="token comment" style="color:rgb(106, 153, 85)">-- s [...]
+<p>To delete the data record with primary key <code>(12345, 12345)</code>, use <code>DELETE FROM</code>:</p>
+<div class="language-sql codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#9CDCFE;--prism-background-color:#1E1E1E"><div class="codeBlockTitle_OeMC">Flink SQL Client</div><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-sql codeBlock_bY9V thin-scrollbar" style="color:#9CDCFE;background-color:#1E1E1E"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#9CDCFE"><span class="token comment" style="color:rgb(106, 153, 85)">-- s [...]
+<h2 class="anchor anchorWithStickyNavbar_LWe7" id="data-reading">Data Reading<a href="#data-reading" class="hash-link" aria-label="Direct link to Data Reading" title="Direct link to Data Reading"></a></h2>
+<p>To retrieve data with the primary key <code>(1234, 1234)</code>, you can perform a point query by applying a filter on the primary key:</p>
+<div class="language-sql codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#9CDCFE;--prism-background-color:#1E1E1E"><div class="codeBlockTitle_OeMC">Flink SQL Client</div><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-sql codeBlock_bY9V thin-scrollbar" style="color:#9CDCFE;background-color:#1E1E1E"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#9CDCFE"><span class="token comment" style="color:rgb(106, 153, 85)">-- s [...]
+<p>To preview a subset of the data in a table, you can use a <code>LIMIT</code> clause.</p>
+<div class="language-sql codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#9CDCFE;--prism-background-color:#1E1E1E"><div class="codeBlockTitle_OeMC">Flink SQL Client</div><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-sql codeBlock_bY9V thin-scrollbar" style="color:#9CDCFE;background-color:#1E1E1E"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#9CDCFE"><span class="token comment" style="color:rgb(106, 153, 85)">-- s [...]
+<p>Fluss supports processing incremental data reading in flink streaming jobs:</p>
+<div class="language-sql codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#9CDCFE;--prism-background-color:#1E1E1E"><div class="codeBlockTitle_OeMC">Flink SQL Client</div><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-sql codeBlock_bY9V thin-scrollbar" style="color:#9CDCFE;background-color:#1E1E1E"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#9CDCFE"><span class="token comment" style="color:rgb(106, 153, 85)">-- S [...]
+<h2 class="anchor anchorWithStickyNavbar_LWe7" id="type-conversion">Type Conversion<a href="#type-conversion" class="hash-link" aria-label="Direct link to Type Conversion" title="Direct link to Type Conversion"></a></h2>
+<p>Fluss's integration for Flink automatically converts between Flink and Fluss types.</p>
+<h3 class="anchor anchorWithStickyNavbar_LWe7" id="fluss---apache-flink">Fluss -> Apache Flink<a href="#fluss---apache-flink" class="hash-link" aria-label="Direct link to Fluss -> Apache Flink" title="Direct link to Fluss -> Apache Flink"></a></h3>
+<table><thead><tr><th>Fluss</th><th>Flink</th></tr></thead><tbody><tr><td>BOOLEAN</td><td>BOOLEAN</td></tr><tr><td>TINYINT</td><td>TINYINT</td></tr><tr><td>SMALLINT</td><td>SMALLINT</td></tr><tr><td>INT</td><td>INT</td></tr><tr><td>BIGINT</td><td>BIGINT</td></tr><tr><td>FLOAT</td><td>FLOAT</td></tr><tr><td>DOUBLE</td><td>DOUBLE</td></tr><tr><td>CHAR</td><td>CHAR</td></tr><tr><td>STRING</td><td>STRING</td></tr><tr><td>DECIMAL</td><td>DECIMAL</td></tr><tr><td>DATE</td><td>DATE</td></tr><tr [...]
+<h3 class="anchor anchorWithStickyNavbar_LWe7" id="apache-flink---fluss">Apache Flink -> Fluss<a href="#apache-flink---fluss" class="hash-link" aria-label="Direct link to Apache Flink -> Fluss" title="Direct link to Apache Flink -> Fluss"></a></h3>
+<table><thead><tr><th>Flink</th><th>Fluss</th></tr></thead><tbody><tr><td>BOOLEAN</td><td>BOOLEAN</td></tr><tr><td>SMALLINT</td><td>SMALLINT</td></tr><tr><td>INT</td><td>INT</td></tr><tr><td>BIGINT</td><td>BIGINT</td></tr><tr><td>FLOAT</td><td>FLOAT</td></tr><tr><td>DOUBLE</td><td>DOUBLE</td></tr><tr><td>CHAR</td><td>CHAR</td></tr><tr><td>STRING</td><td>STRING</td></tr><tr><td>DECIMAL</td><td>DECIMAL</td></tr><tr><td>DATE</td><td>DATE</td></tr><tr><td>TIME</td><td>TIME</td></tr><tr><td>T [...]
+ Apache®, Apache Flink®, Flink®, Apache Kafka®, Kafka®, Spark® and associated open source project names and logos are trademarks of the Apache Software Foundation.</div></div></div></footer></div>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/0.5/engine-flink/lookups/index.html b/docs/0.5/engine-flink/lookups/index.html
new file mode 100644
index 0000000..6d9d2c1
--- /dev/null
+++ b/docs/0.5/engine-flink/lookups/index.html
@@ -0,0 +1,44 @@
+<!doctype html>
+<html lang="en" dir="ltr" class="docs-wrapper plugin-docs plugin-id-default docs-version-0.5 docs-doc-page docs-doc-id-engine-flink/lookups" data-has-hydrated="false">
+<head>
+<meta charset="UTF-8">
+<meta name="generator" content="Docusaurus v3.8.1">
+<title data-rh="true">Flink Lookup Joins | Fluss</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/docusaurus-social-card.jpg"><meta data-rh="true" name="twitter:image" content="https://fluss.apache.org/img/docusaurus-social-card.jpg"><meta data-rh="true" property="og:url" content="https://fluss.apache [...]
+<link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Fluss Atom Feed">
+
+
+
+
+<link rel="search" type="application/opensearchdescription+xml" title="Fluss" href="/opensearch.xml">
+
+<link rel="icon" href="/img/logo.svg">
+<link rel="manifest" href="/manifest.json">
+<meta name="theme-color" content="#0071e3"><link rel="stylesheet" href="/assets/css/styles.3ca55d09.css">
+<script src="/assets/js/runtime~main.264c6f6f.js" defer="defer"></script>
+<script src="/assets/js/main.a06cb6b9.js" defer="defer"></script>
+</head>
+<body class="navigation-with-keyboard">
+<svg xmlns="http://www.w3.org/2000/svg" style="display: none;"><defs>
+<symbol id="theme-svg-external-link" viewBox="0 0 24 24"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"/></symbol>
+</defs></svg>
+<script>!function(){var t="light";var e=function(){try{return new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}}()||function(){try{return window.localStorage.getItem("theme")}catch(t){}}();document.documentElement.setAttribute("data-theme",e||t),document.documentElement.setAttribute("data-theme-choice",e||t)}(),function(){try{const c=new URLSearchParams(window.location.search).entries();for(var[t,e]of c)if(t.startsWith("docusaurus-data-")){var a=t.replace("do [...]
+<p>Flink lookup joins are important because they enable efficient, real-time enrichment of streaming data with reference data, a common requirement in many real-time analytics and processing scenarios.</p>
+<h2 class="anchor anchorWithStickyNavbar_LWe7" id="instructions">Instructions<a href="#instructions" class="hash-link" aria-label="Direct link to Instructions" title="Direct link to Instructions"></a></h2>
+<ul>
+<li>Use a primary key table as a dimension table, and the join condition must include all primary keys of the dimension table.</li>
+<li>Fluss lookup join is in asynchronous mode by default for higher throughput. You can change the mode of lookup join as synchronous mode by setting the SQL Hint <code>'lookup.async' = 'false'</code>.</li>
+</ul>
+<h2 class="anchor anchorWithStickyNavbar_LWe7" id="examples">Examples<a href="#examples" class="hash-link" aria-label="Direct link to Examples" title="Direct link to Examples"></a></h2>
+<ol>
+<li>Create two tables.</li>
+</ol>
+<div class="language-sql codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#9CDCFE;--prism-background-color:#1E1E1E"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-sql codeBlock_bY9V thin-scrollbar" style="color:#9CDCFE;background-color:#1E1E1E"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#9CDCFE"><span class="token keyword" style="color:rgb(86, 156, 214)">CREATE</span><span class="token plain"> </span><span class= [...]
+<ol start="2">
+<li>Perform lookup join.</li>
+</ol>
+<div class="language-sql codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#9CDCFE;--prism-background-color:#1E1E1E"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-sql codeBlock_bY9V thin-scrollbar" style="color:#9CDCFE;background-color:#1E1E1E"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#9CDCFE"><span class="token keyword" style="color:rgb(86, 156, 214)">USE</span><span class="token plain"> CATALOG </span><span c [...]
+<h2 class="anchor anchorWithStickyNavbar_LWe7" id="lookup-options">Lookup Options<a href="#lookup-options" class="hash-link" aria-label="Direct link to Lookup Options" title="Direct link to Lookup Options"></a></h2>
+<table><thead><tr><th>Option</th><th>Type</th><th>Required</th><th>Default</th><th>Description</th></tr></thead><tbody><tr><td>lookup.cache</td><td>Enum</td><td>optional</td><td>NONE</td><td>The caching strategy for this lookup table, including NONE, PARTIAL.</td></tr><tr><td>lookup.max-retries</td><td>Integer</td><td>optional</td><td>3</td><td>The maximum allowed retries if a lookup operation fails.</td></tr><tr><td>lookup.partial-cache.expire-after-access</td><td>Duration</td><td>optio [...]
+ Apache®, Apache Flink®, Flink®, Apache Kafka®, Kafka®, Spark® and associated open source project names and logos are trademarks of the Apache Software Foundation.</div></div></div></footer></div>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/0.5/engine-flink/reads/index.html b/docs/0.5/engine-flink/reads/index.html
new file mode 100644
index 0000000..5890ec6
--- /dev/null
+++ b/docs/0.5/engine-flink/reads/index.html
@@ -0,0 +1,77 @@
+<!doctype html>
+<html lang="en" dir="ltr" class="docs-wrapper plugin-docs plugin-id-default docs-version-0.5 docs-doc-page docs-doc-id-engine-flink/reads" data-has-hydrated="false">
+<head>
+<meta charset="UTF-8">
+<meta name="generator" content="Docusaurus v3.8.1">
+<title data-rh="true">Flink Reads | Fluss</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/docusaurus-social-card.jpg"><meta data-rh="true" name="twitter:image" content="https://fluss.apache.org/img/docusaurus-social-card.jpg"><meta data-rh="true" property="og:url" content="https://fluss.apache.org/do [...]
+<link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Fluss Atom Feed">
+
+
+
+
+<link rel="search" type="application/opensearchdescription+xml" title="Fluss" href="/opensearch.xml">
+
+<link rel="icon" href="/img/logo.svg">
+<link rel="manifest" href="/manifest.json">
+<meta name="theme-color" content="#0071e3"><link rel="stylesheet" href="/assets/css/styles.3ca55d09.css">
+<script src="/assets/js/runtime~main.264c6f6f.js" defer="defer"></script>
+<script src="/assets/js/main.a06cb6b9.js" defer="defer"></script>
+</head>
+<body class="navigation-with-keyboard">
+<svg xmlns="http://www.w3.org/2000/svg" style="display: none;"><defs>
+<symbol id="theme-svg-external-link" viewBox="0 0 24 24"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"/></symbol>
+</defs></svg>
+<script>!function(){var t="light";var e=function(){try{return new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}}()||function(){try{return window.localStorage.getItem("theme")}catch(t){}}();document.documentElement.setAttribute("data-theme",e||t),document.documentElement.setAttribute("data-theme-choice",e||t)}(),function(){try{const c=new URLSearchParams(window.location.search).entries();for(var[t,e]of c)if(t.startsWith("docusaurus-data-")){var a=t.replace("do [...]
+<p>Fluss supports streaming and batch read with <a href="https://flink.apache.org/" target="_blank" rel="noopener noreferrer">Apache Flink</a>'s SQL & Table API. Execute the following SQL command to switch execution mode from streaming to batch, and vice versa:</p>
+<div class="language-sql codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#9CDCFE;--prism-background-color:#1E1E1E"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-sql codeBlock_bY9V thin-scrollbar" style="color:#9CDCFE;background-color:#1E1E1E"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#9CDCFE"><span class="token comment" style="color:rgb(106, 153, 85)">-- Execute the flink job in streaming mode for current sess [...]
+<h2 class="anchor anchorWithStickyNavbar_LWe7" id="streaming-read">Streaming Read<a href="#streaming-read" class="hash-link" aria-label="Direct link to Streaming Read" title="Direct link to Streaming Read"></a></h2>
+<p>By default, Streaming read produces the latest snapshot on the table upon first startup, and continue to read the latest changes.</p>
+<p>Fluss by default ensures that your startup is properly processed with all data included.</p>
+<p>Fluss Source in streaming mode is unbounded, like a queue that never ends.</p>
+<div class="language-sql codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#9CDCFE;--prism-background-color:#1E1E1E"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-sql codeBlock_bY9V thin-scrollbar" style="color:#9CDCFE;background-color:#1E1E1E"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#9CDCFE"><span class="token keyword" style="color:rgb(86, 156, 214)">SET</span><span class="token plain"> </span><span class="to [...]
+<p>You can also do streaming read without reading the snapshot data, you can use <code>latest</code> scan mode, which only reads the changelogs (or logs) from the latest offset:</p>
+<div class="language-sql codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#9CDCFE;--prism-background-color:#1E1E1E"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-sql codeBlock_bY9V thin-scrollbar" style="color:#9CDCFE;background-color:#1E1E1E"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#9CDCFE"><span class="token keyword" style="color:rgb(86, 156, 214)">SELECT</span><span class="token plain"> </span><span class= [...]
+<h2 class="anchor anchorWithStickyNavbar_LWe7" id="batch-read">Batch Read<a href="#batch-read" class="hash-link" aria-label="Direct link to Batch Read" title="Direct link to Batch Read"></a></h2>
+<h3 class="anchor anchorWithStickyNavbar_LWe7" id="limit-read">Limit Read<a href="#limit-read" class="hash-link" aria-label="Direct link to Limit Read" title="Direct link to Limit Read"></a></h3>
+<p>The Fluss source supports limiting reads for both primary-key tables and log tables, making it convenient to preview the latest <code>N</code> records in a table.</p>
+<h4 class="anchor anchorWithStickyNavbar_LWe7" id="example">Example<a href="#example" class="hash-link" aria-label="Direct link to Example" title="Direct link to Example"></a></h4>
+<ol>
+<li>Create a table and prepare data</li>
+</ol>
+<div class="language-sql codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#9CDCFE;--prism-background-color:#1E1E1E"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-sql codeBlock_bY9V thin-scrollbar" style="color:#9CDCFE;background-color:#1E1E1E"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#9CDCFE"><span class="token keyword" style="color:rgb(86, 156, 214)">CREATE</span><span class="token plain"> </span><span class= [...]
+<ol start="2">
+<li>Query from table.</li>
+</ol>
+<div class="language-sql codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#9CDCFE;--prism-background-color:#1E1E1E"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-sql codeBlock_bY9V thin-scrollbar" style="color:#9CDCFE;background-color:#1E1E1E"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#9CDCFE"><span class="token comment" style="color:rgb(106, 153, 85)">-- Execute the flink job in batch mode for current session [...]
+<h3 class="anchor anchorWithStickyNavbar_LWe7" id="point-query">Point Query<a href="#point-query" class="hash-link" aria-label="Direct link to Point Query" title="Direct link to Point Query"></a></h3>
+<p>The Fluss source supports point queries for primary-key tables, allowing you to inspect specific records efficiently. Currently, this functionality is exclusive to primary-key tables.</p>
+<h4 class="anchor anchorWithStickyNavbar_LWe7" id="example-1">Example<a href="#example-1" class="hash-link" aria-label="Direct link to Example" title="Direct link to Example"></a></h4>
+<ol>
+<li>Create a table and prepare data</li>
+</ol>
+<div class="language-sql codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#9CDCFE;--prism-background-color:#1E1E1E"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-sql codeBlock_bY9V thin-scrollbar" style="color:#9CDCFE;background-color:#1E1E1E"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#9CDCFE"><span class="token keyword" style="color:rgb(86, 156, 214)">CREATE</span><span class="token plain"> </span><span class= [...]
+<ol start="2">
+<li>Query from table.</li>
+</ol>
+<div class="language-sql codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#9CDCFE;--prism-background-color:#1E1E1E"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-sql codeBlock_bY9V thin-scrollbar" style="color:#9CDCFE;background-color:#1E1E1E"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#9CDCFE"><span class="token comment" style="color:rgb(106, 153, 85)">-- Execute the flink job in batch mode for current session [...]
+<h3 class="anchor anchorWithStickyNavbar_LWe7" id="aggregations">Aggregations<a href="#aggregations" class="hash-link" aria-label="Direct link to Aggregations" title="Direct link to Aggregations">