You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@wayang.apache.org by gi...@apache.org on 2024/03/06 09:51:02 UTC
(incubator-wayang-website) branch deploy updated: deploy: 28bfb57175601a0bb7bb3ac548edad43b4a7f40d
This is an automated email from the ASF dual-hosted git repository.
github-bot pushed a commit to branch deploy
in repository https://gitbox.apache.org/repos/asf/incubator-wayang-website.git
The following commit(s) were added to refs/heads/deploy by this push:
new 28ddf9cc deploy: 28bfb57175601a0bb7bb3ac548edad43b4a7f40d
28ddf9cc is described below
commit 28ddf9cc839113186c50634071c988b05bdf2252
Author: 2pk03 <2p...@users.noreply.github.com>
AuthorDate: Wed Mar 6 09:50:55 2024 +0000
deploy: 28bfb57175601a0bb7bb3ac548edad43b4a7f40d
---
404.html | 4 +-
.../image-1-9cc35d5aea2b867d7e5759a96bd02334.png | Bin 0 -> 345956 bytes
assets/js/01a85c17.29a83f4a.js | 1 -
assets/js/01a85c17.877dc63c.js | 1 +
assets/js/05a94acb.aacc02fc.js | 1 -
assets/js/05a94acb.afdf246a.js | 1 +
assets/js/092604a4.9f2a0de9.js | 1 +
assets/js/092604a4.a021cf4e.js | 1 -
assets/js/1476.21a8e76a.js | 1 +
assets/js/1772.2b015107.js | 1 +
assets/js/17896441.7969bcce.js | 1 +
assets/js/17896441.a05e3bba.js | 1 -
assets/js/1a1d5c1d.8fbe0810.js | 1 +
assets/js/1a1d5c1d.ab15c59f.js | 1 -
assets/js/1df93b7f.41b844a8.js | 1 -
assets/js/1df93b7f.dd8f0cce.js | 1 +
assets/js/{572.76107c16.js => 2572.787ed0fc.js} | 2 +-
assets/js/2adba89d.5dfc9a08.js | 1 -
assets/js/2adba89d.f42ea927.js | 1 +
assets/js/2de9ff66.4b75d8c0.js | 1 -
assets/js/2de9ff66.a3a6667b.js | 1 +
assets/js/4611.461cfde8.js | 2 +
...js.LICENSE.txt => 4611.461cfde8.js.LICENSE.txt} | 0
assets/js/47457315.52705e1f.js | 1 +
assets/js/47e4c4a8.28869879.js | 1 -
assets/js/47e4c4a8.9a912aeb.js | 1 +
assets/js/4c34ea1b.52a59711.js | 1 -
assets/js/4c34ea1b.fa4db40f.js | 1 +
assets/js/5684.f3b486b7.js | 1 +
assets/js/572ad3b2.3f5b6abf.js | 1 -
assets/js/572ad3b2.4c0dcee3.js | 1 +
assets/js/5e95c892.9a73fb8e.js | 1 +
assets/js/5e95c892.b938804e.js | 1 -
assets/js/5f842dbc.f4893e13.js | 1 +
assets/js/611.8f30c906.js | 2 -
assets/js/627.932ff56c.js | 1 -
assets/js/64eed6c4.219de616.js | 1 -
assets/js/64eed6c4.54ed8f5b.js | 1 +
assets/js/684.06e15f13.js | 1 -
assets/js/6875c492.2a16f641.js | 1 -
assets/js/6875c492.80e0d8f9.js | 1 +
assets/js/707f14a2.f830c1fb.js | 1 +
assets/js/772.f1c7395e.js | 1 -
assets/js/77806f28.6ad81e5b.js | 1 +
assets/js/7941a8d8.7a800830.js | 1 -
assets/js/7941a8d8.a374d9c2.js | 1 +
assets/js/7c80c937.33a6aa15.js | 1 +
assets/js/7c80c937.e1040402.js | 1 -
assets/js/814f3328.07c6f4ba.js | 1 -
assets/js/814f3328.72a7783b.js | 1 +
assets/js/82fa5665.a13ad9c8.js | 1 +
assets/js/82fa5665.f9d4b0ea.js | 1 -
assets/js/86331d88.4ac84354.js | 1 +
assets/js/89c6f603.37fbf255.js | 1 -
assets/js/89c6f603.c15ed9af.js | 1 +
assets/js/922da4c8.3abff87a.js | 1 +
assets/js/92791066.ce7704dd.js | 1 -
assets/js/92791066.e6358e8e.js | 1 +
assets/js/94fcbb7f.210b3713.js | 1 +
assets/js/94fcbb7f.ea84c7e0.js | 1 -
assets/js/9e4087bc.92702229.js | 1 -
assets/js/9e4087bc.b724501e.js | 1 +
assets/js/a6aa9e1f.6bb7fda5.js | 1 -
assets/js/a6aa9e1f.db7bee20.js | 1 +
assets/js/a7023ddc.773fb221.js | 1 -
assets/js/a7023ddc.821b2117.js | 1 +
assets/js/a72578df.97c99ed4.js | 1 -
assets/js/a72578df.e3f45652.js | 1 +
assets/js/a7bd4aaa.c4da7e34.js | 1 +
assets/js/a7bd4aaa.f2c74e7a.js | 1 -
assets/js/a94703ab.130b2ff4.js | 1 +
assets/js/a94703ab.2645d6cb.js | 1 -
assets/js/ae568e66.71145064.js | 1 +
assets/js/ae568e66.d93dd239.js | 1 -
.../{b2b675dd.2e003fe7.js => b2b675dd.4aa3fc25.js} | 2 +-
assets/js/b2f554cd.14ec329e.js | 1 +
assets/js/b2f554cd.184b478e.js | 1 -
assets/js/c3d032e9.25862c57.js | 1 -
assets/js/c3d032e9.a627446e.js | 1 +
assets/js/c8d81af2.02880114.js | 1 -
assets/js/c8d81af2.2225744e.js | 1 +
assets/js/ccc49370.971de1e7.js | 1 -
assets/js/ccc49370.abc3e971.js | 1 +
assets/js/d8224fc8.1af06dcd.js | 1 -
assets/js/d8224fc8.1f0dd13a.js | 1 +
assets/js/dd4c342d.8f36f540.js | 1 -
assets/js/dd4c342d.c7caa21a.js | 1 +
assets/js/de9e258c.8b5311c8.js | 1 +
assets/js/e82464af.570a91e9.js | 1 +
assets/js/e82464af.7f611a2b.js | 1 -
assets/js/effa2a56.5eb24bf2.js | 1 -
assets/js/effa2a56.d9218085.js | 1 +
assets/js/main.bb71bd6f.js | 2 -
assets/js/main.fa771859.js | 2 +
...js.LICENSE.txt => main.fa771859.js.LICENSE.txt} | 0
assets/js/runtime~main.c0fb4924.js | 1 -
assets/js/runtime~main.c6c8cd99.js | 1 +
blog/Apache Kafka meets Apache Wayang/index.html | 77 +++++++++++
blog/archive/index.html | 6 +-
blog/atom.xml | 146 ++++++++++++++++++++-
blog/index.html | 92 ++++++++++++-
blog/rss.xml | 138 ++++++++++++++++++-
.../index.html | 106 +++++++++++++++
blog/tags/index.html | 6 +-
blog/tags/kafka/index.html | 106 +++++++++++++++
blog/tags/wayang/index.html | 94 ++++++++++++-
blog/website_update/index.html | 8 +-
docs/community/committer/index.html | 4 +-
docs/community/contribute/index.html | 4 +-
docs/community/mailinglist/index.html | 4 +-
docs/community/repositories/index.html | 4 +-
docs/community/team/index.html | 4 +-
docs/guide/adding-operators/index.html | 4 +-
docs/guide/api-documentation/index.html | 4 +-
docs/guide/developing-in-wayang/index.html | 4 +-
docs/guide/examples/index.html | 4 +-
docs/guide/getting-started/index.html | 4 +-
docs/guide/installation/index.html | 4 +-
docs/guide/ml4all/index.html | 4 +-
docs/guide/optimizer/index.html | 4 +-
docs/introduction/about/index.html | 4 +-
docs/introduction/benchmark/index.html | 4 +-
docs/introduction/features/index.html | 4 +-
docs/start/download/index.html | 4 +-
index.html | 4 +-
lunr-index-1709549570701.json | 1 -
lunr-index-1709718629629.json | 1 +
lunr-index.json | 2 +-
search-doc-1709549570701.json | 1 -
search-doc-1709718629629.json | 1 +
search-doc.json | 2 +-
sitemap.xml | 2 +-
132 files changed, 856 insertions(+), 108 deletions(-)
diff --git a/404.html b/404.html
index c0c885ad..7726c279 100644
--- a/404.html
+++ b/404.html
@@ -5,8 +5,8 @@
<meta name="generator" content="Docusaurus v3.1.1">
<title data-rh="true">Page Not Found | Apache Wayang (incubating)</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://wayang.apache.org/404.html"><meta data-rh="true" property="og:locale" content="en"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docusaurus_tag" content="default"><meta d [...]
<link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache Wayang (incubating) Atom Feed"><link rel="stylesheet" href="/assets/css/styles.ecf70413.css">
-<script src="/assets/js/runtime~main.c0fb4924.js" defer="defer"></script>
-<script src="/assets/js/main.bb71bd6f.js" defer="defer"></script>
+<script src="/assets/js/runtime~main.c6c8cd99.js" defer="defer"></script>
+<script src="/assets/js/main.fa771859.js" defer="defer"></script>
</head>
<body class="navigation-with-keyboard">
<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){try{return new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}}()||function(){try{return localStorage.getItem("theme")}catch(t){}}();t(null!==e?e:"light")}(),function(){try{const a=new URLSearchParams(window.location.search).entries();for(var[t,e]of a)if(t.startsWith("docusaurus-data-")){var n=t.replace("docusaurus-data-","data-");document.documentElement.se [...]
diff --git a/assets/images/image-1-9cc35d5aea2b867d7e5759a96bd02334.png b/assets/images/image-1-9cc35d5aea2b867d7e5759a96bd02334.png
new file mode 100644
index 00000000..27c4c1f5
Binary files /dev/null and b/assets/images/image-1-9cc35d5aea2b867d7e5759a96bd02334.png differ
diff --git a/assets/js/01a85c17.29a83f4a.js b/assets/js/01a85c17.29a83f4a.js
deleted file mode 100644
index be93d7e8..00000000
--- a/assets/js/01a85c17.29a83f4a.js
+++ /dev/null
@@ -1 +0,0 @@
-"use strict";(self.webpackChunkwayang_website=self.webpackChunkwayang_website||[]).push([[13],{1460:(e,t,s)=>{s.d(t,{Z:()=>v});var a=s(7294),i=s(512),r=s(4023),l=s(7524),n=s(3692),c=s(5999),o=s(6550),m=s(8596);function d(e){const{pathname:t}=(0,o.TH)();return(0,a.useMemo)((()=>e.filter((e=>function(e,t){return!(e.unlisted&&!(0,m.Mg)(e.permalink,t))}(e,t)))),[e,t])}const g={sidebar:"sidebar_re4s",sidebarItemTitle:"sidebarItemTitle_pO2u",sidebarItemList:"sidebarItemList_Yudw",sidebarItem:" [...]
\ No newline at end of file
diff --git a/assets/js/01a85c17.877dc63c.js b/assets/js/01a85c17.877dc63c.js
new file mode 100644
index 00000000..e9228fc0
--- /dev/null
+++ b/assets/js/01a85c17.877dc63c.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkwayang_website=self.webpackChunkwayang_website||[]).push([[4013],{1460:(e,t,s)=>{s.d(t,{Z:()=>v});var a=s(7294),i=s(512),r=s(4023),l=s(7524),n=s(3692),c=s(5999),o=s(6550),m=s(8596);function d(e){const{pathname:t}=(0,o.TH)();return(0,a.useMemo)((()=>e.filter((e=>function(e,t){return!(e.unlisted&&!(0,m.Mg)(e.permalink,t))}(e,t)))),[e,t])}const g={sidebar:"sidebar_re4s",sidebarItemTitle:"sidebarItemTitle_pO2u",sidebarItemList:"sidebarItemList_Yudw",sidebarItem [...]
\ No newline at end of file
diff --git a/assets/js/05a94acb.aacc02fc.js b/assets/js/05a94acb.aacc02fc.js
deleted file mode 100644
index b2237e0e..00000000
--- a/assets/js/05a94acb.aacc02fc.js
+++ /dev/null
@@ -1 +0,0 @@
-"use strict";(self.webpackChunkwayang_website=self.webpackChunkwayang_website||[]).push([[617],{7856:(e,t,i)=>{i.r(t),i.d(t,{assets:()=>c,contentTitle:()=>s,default:()=>d,frontMatter:()=>r,metadata:()=>a,toc:()=>l});var o=i(5893),n=i(1151);const r={title:"Becoming a committer",sidebar_position:5,id:"committer"},s=void 0,a={id:"community/committer",title:"Becoming a committer",description:"To get started contributing to Wayang, learn how to contribute \u2013 anyone can submit patches, doc [...]
\ No newline at end of file
diff --git a/assets/js/05a94acb.afdf246a.js b/assets/js/05a94acb.afdf246a.js
new file mode 100644
index 00000000..e320b940
--- /dev/null
+++ b/assets/js/05a94acb.afdf246a.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkwayang_website=self.webpackChunkwayang_website||[]).push([[3617],{7856:(e,t,i)=>{i.r(t),i.d(t,{assets:()=>c,contentTitle:()=>s,default:()=>d,frontMatter:()=>r,metadata:()=>a,toc:()=>l});var o=i(5893),n=i(1151);const r={title:"Becoming a committer",sidebar_position:5,id:"committer"},s=void 0,a={id:"community/committer",title:"Becoming a committer",description:"To get started contributing to Wayang, learn how to contribute \u2013 anyone can submit patches, do [...]
\ No newline at end of file
diff --git a/assets/js/092604a4.9f2a0de9.js b/assets/js/092604a4.9f2a0de9.js
new file mode 100644
index 00000000..e15ac797
--- /dev/null
+++ b/assets/js/092604a4.9f2a0de9.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkwayang_website=self.webpackChunkwayang_website||[]).push([[5088],{45:(e,a,t)=>{t.r(a),t.d(a,{assets:()=>c,contentTitle:()=>r,default:()=>h,frontMatter:()=>i,metadata:()=>o,toc:()=>l});var n=t(5893),s=t(1151);const i={id:"benchmark",title:"Benchmarking Wayang",sidebar_position:2},r=void 0,o={id:"introduction/benchmark",title:"Benchmarking Wayang",description:"Wayang is a powerful cross-platform middleware that can utilize and seamlessly integrate various exe [...]
\ No newline at end of file
diff --git a/assets/js/092604a4.a021cf4e.js b/assets/js/092604a4.a021cf4e.js
deleted file mode 100644
index 18bec260..00000000
--- a/assets/js/092604a4.a021cf4e.js
+++ /dev/null
@@ -1 +0,0 @@
-"use strict";(self.webpackChunkwayang_website=self.webpackChunkwayang_website||[]).push([[88],{45:(e,a,t)=>{t.r(a),t.d(a,{assets:()=>c,contentTitle:()=>r,default:()=>h,frontMatter:()=>i,metadata:()=>o,toc:()=>l});var n=t(5893),s=t(1151);const i={id:"benchmark",title:"Benchmarking Wayang",sidebar_position:2},r=void 0,o={id:"introduction/benchmark",title:"Benchmarking Wayang",description:"Wayang is a powerful cross-platform middleware that can utilize and seamlessly integrate various execu [...]
\ No newline at end of file
diff --git a/assets/js/1476.21a8e76a.js b/assets/js/1476.21a8e76a.js
new file mode 100644
index 00000000..91e344ab
--- /dev/null
+++ b/assets/js/1476.21a8e76a.js
@@ -0,0 +1 @@
+(self.webpackChunkwayang_website=self.webpackChunkwayang_website||[]).push([[1476],{9047:(e,t,n)=>{"use strict";n.d(t,{Z:()=>E});var s=n(7294),o=n(5893);function a(e){const{mdxAdmonitionTitle:t,rest:n}=function(e){const t=s.Children.toArray(e),n=t.find((e=>s.isValidElement(e)&&"mdxAdmonitionTitle"===e.type)),a=t.filter((e=>e!==n)),c=n?.props.children;return{mdxAdmonitionTitle:c,rest:a.length>0?(0,o.jsx)(o.Fragment,{children:a}):null}}(e.children),a=e.title??t;return{...e,...a&&{title:a}, [...]
\ No newline at end of file
diff --git a/assets/js/1772.2b015107.js b/assets/js/1772.2b015107.js
new file mode 100644
index 00000000..00d6139b
--- /dev/null
+++ b/assets/js/1772.2b015107.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkwayang_website=self.webpackChunkwayang_website||[]).push([[1772],{5658:(e,t,n)=>{n.d(t,{Z:()=>r});n(7294);var i=n(512),s=n(5999),a=n(7955),o=n(5893);function r(e){let{className:t}=e;return(0,o.jsx)("main",{className:(0,i.Z)("container margin-vert--xl",t),children:(0,o.jsx)("div",{className:"row",children:(0,o.jsxs)("div",{className:"col col--6 col--offset-3",children:[(0,o.jsx)(a.Z,{as:"h1",className:"hero__title",children:(0,o.jsx)(s.Z,{id:"theme.NotFound. [...]
\ No newline at end of file
diff --git a/assets/js/17896441.7969bcce.js b/assets/js/17896441.7969bcce.js
new file mode 100644
index 00000000..205de22c
--- /dev/null
+++ b/assets/js/17896441.7969bcce.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkwayang_website=self.webpackChunkwayang_website||[]).push([[7918],{8945:(e,t,n)=>{n.r(t),n.d(t,{default:()=>de});var s=n(7294),a=n(1944),i=n(902),l=n(5893);const o=s.createContext(null);function r(e){let{children:t,content:n}=e;const a=function(e){return(0,s.useMemo)((()=>({metadata:e.metadata,frontMatter:e.frontMatter,assets:e.assets,contentTitle:e.contentTitle,toc:e.toc})),[e])}(n);return(0,l.jsx)(o.Provider,{value:a,children:t})}function c(){const e=(0,s. [...]
\ No newline at end of file
diff --git a/assets/js/17896441.a05e3bba.js b/assets/js/17896441.a05e3bba.js
deleted file mode 100644
index e5f78402..00000000
--- a/assets/js/17896441.a05e3bba.js
+++ /dev/null
@@ -1 +0,0 @@
-"use strict";(self.webpackChunkwayang_website=self.webpackChunkwayang_website||[]).push([[918],{8945:(e,t,n)=>{n.r(t),n.d(t,{default:()=>de});var s=n(7294),a=n(1944),i=n(902),l=n(5893);const o=s.createContext(null);function r(e){let{children:t,content:n}=e;const a=function(e){return(0,s.useMemo)((()=>({metadata:e.metadata,frontMatter:e.frontMatter,assets:e.assets,contentTitle:e.contentTitle,toc:e.toc})),[e])}(n);return(0,l.jsx)(o.Provider,{value:a,children:t})}function c(){const e=(0,s.u [...]
\ No newline at end of file
diff --git a/assets/js/1a1d5c1d.8fbe0810.js b/assets/js/1a1d5c1d.8fbe0810.js
new file mode 100644
index 00000000..ed090ef5
--- /dev/null
+++ b/assets/js/1a1d5c1d.8fbe0810.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkwayang_website=self.webpackChunkwayang_website||[]).push([[7771],{3492:(e,i,n)=>{n.r(i),n.d(i,{assets:()=>c,contentTitle:()=>s,default:()=>l,frontMatter:()=>r,metadata:()=>a,toc:()=>d});var t=n(5893),o=n(1151);const r={title:"Data processing optimizer",sidebar_position:8,id:"optimizer"},s="How the optimizer works (WIP)",a={id:"guide/optimizer",title:"Data processing optimizer",description:"\x3c!--",source:"@site/docs/guide/optimizer.md",sourceDirName:"guide [...]
\ No newline at end of file
diff --git a/assets/js/1a1d5c1d.ab15c59f.js b/assets/js/1a1d5c1d.ab15c59f.js
deleted file mode 100644
index 703dedbe..00000000
--- a/assets/js/1a1d5c1d.ab15c59f.js
+++ /dev/null
@@ -1 +0,0 @@
-"use strict";(self.webpackChunkwayang_website=self.webpackChunkwayang_website||[]).push([[771],{3492:(e,i,n)=>{n.r(i),n.d(i,{assets:()=>c,contentTitle:()=>s,default:()=>l,frontMatter:()=>r,metadata:()=>a,toc:()=>d});var t=n(5893),o=n(1151);const r={title:"Data processing optimizer",sidebar_position:8,id:"optimizer"},s="How the optimizer works (WIP)",a={id:"guide/optimizer",title:"Data processing optimizer",description:"\x3c!--",source:"@site/docs/guide/optimizer.md",sourceDirName:"guide" [...]
\ No newline at end of file
diff --git a/assets/js/1df93b7f.41b844a8.js b/assets/js/1df93b7f.41b844a8.js
deleted file mode 100644
index de465932..00000000
--- a/assets/js/1df93b7f.41b844a8.js
+++ /dev/null
@@ -1 +0,0 @@
-"use strict";(self.webpackChunkwayang_website=self.webpackChunkwayang_website||[]).push([[237],{5576:(e,t,a)=>{a.d(t,{Z:()=>i});var n,r=a(7294);function s(){return s=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var a=arguments[t];for(var n in a)Object.prototype.hasOwnProperty.call(a,n)&&(e[n]=a[n])}return e},s.apply(this,arguments)}const i=e=>{let{title:t,titleId:a,...i}=e;return r.createElement("svg",s({width:800,height:800,viewBox:"0 0 32 32",xmlns [...]
\ No newline at end of file
diff --git a/assets/js/1df93b7f.dd8f0cce.js b/assets/js/1df93b7f.dd8f0cce.js
new file mode 100644
index 00000000..6afd0a8e
--- /dev/null
+++ b/assets/js/1df93b7f.dd8f0cce.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkwayang_website=self.webpackChunkwayang_website||[]).push([[3237],{5576:(e,t,a)=>{a.d(t,{Z:()=>i});var n,r=a(7294);function s(){return s=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var a=arguments[t];for(var n in a)Object.prototype.hasOwnProperty.call(a,n)&&(e[n]=a[n])}return e},s.apply(this,arguments)}const i=e=>{let{title:t,titleId:a,...i}=e;return r.createElement("svg",s({width:800,height:800,viewBox:"0 0 32 32",xmln [...]
\ No newline at end of file
diff --git a/assets/js/572.76107c16.js b/assets/js/2572.787ed0fc.js
similarity index 52%
rename from assets/js/572.76107c16.js
rename to assets/js/2572.787ed0fc.js
index 40d99e20..93113acc 100644
--- a/assets/js/572.76107c16.js
+++ b/assets/js/2572.787ed0fc.js
@@ -1 +1 @@
-"use strict";(self.webpackChunkwayang_website=self.webpackChunkwayang_website||[]).push([[572],{2572:(e,s,a)=>{a.r(s)}}]);
\ No newline at end of file
+"use strict";(self.webpackChunkwayang_website=self.webpackChunkwayang_website||[]).push([[2572],{2572:(e,s,a)=>{a.r(s)}}]);
\ No newline at end of file
diff --git a/assets/js/2adba89d.5dfc9a08.js b/assets/js/2adba89d.5dfc9a08.js
deleted file mode 100644
index 130e668a..00000000
--- a/assets/js/2adba89d.5dfc9a08.js
+++ /dev/null
@@ -1 +0,0 @@
-"use strict";(self.webpackChunkwayang_website=self.webpackChunkwayang_website||[]).push([[200],{8125:(e,n,a)=>{a.r(n),a.d(n,{assets:()=>l,contentTitle:()=>o,default:()=>h,frontMatter:()=>t,metadata:()=>i,toc:()=>c});var s=a(5893),r=a(1151);const t={id:"download",title:"Download Apache Wayang",sidebar_position:1},o="Releases",i={id:"start/download",title:"Download Apache Wayang",description:"\x3c!--",source:"@site/docs/start/download.md",sourceDirName:"start",slug:"/start/download",permal [...]
\ No newline at end of file
diff --git a/assets/js/2adba89d.f42ea927.js b/assets/js/2adba89d.f42ea927.js
new file mode 100644
index 00000000..9df57b5f
--- /dev/null
+++ b/assets/js/2adba89d.f42ea927.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkwayang_website=self.webpackChunkwayang_website||[]).push([[3200],{8125:(e,n,a)=>{a.r(n),a.d(n,{assets:()=>l,contentTitle:()=>o,default:()=>h,frontMatter:()=>t,metadata:()=>i,toc:()=>c});var s=a(5893),r=a(1151);const t={id:"download",title:"Download Apache Wayang",sidebar_position:1},o="Releases",i={id:"start/download",title:"Download Apache Wayang",description:"\x3c!--",source:"@site/docs/start/download.md",sourceDirName:"start",slug:"/start/download",perma [...]
\ No newline at end of file
diff --git a/assets/js/2de9ff66.4b75d8c0.js b/assets/js/2de9ff66.4b75d8c0.js
deleted file mode 100644
index 0b188038..00000000
--- a/assets/js/2de9ff66.4b75d8c0.js
+++ /dev/null
@@ -1 +0,0 @@
-"use strict";(self.webpackChunkwayang_website=self.webpackChunkwayang_website||[]).push([[701],{8810:(e,n,a)=>{a.r(n),a.d(n,{assets:()=>o,contentTitle:()=>l,default:()=>h,frontMatter:()=>t,metadata:()=>s,toc:()=>c});var i=a(5893),r=a(1151);const t={title:"How to build Wayang",sidebar_position:1,id:"installation"},l="Installing and building Apache Wayang",s={id:"guide/installation",title:"How to build Wayang",description:"\x3c!--",source:"@site/docs/guide/installation.md",sourceDirName:"g [...]
\ No newline at end of file
diff --git a/assets/js/2de9ff66.a3a6667b.js b/assets/js/2de9ff66.a3a6667b.js
new file mode 100644
index 00000000..6386f4a3
--- /dev/null
+++ b/assets/js/2de9ff66.a3a6667b.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkwayang_website=self.webpackChunkwayang_website||[]).push([[3701],{8810:(e,n,a)=>{a.r(n),a.d(n,{assets:()=>o,contentTitle:()=>l,default:()=>h,frontMatter:()=>t,metadata:()=>s,toc:()=>c});var i=a(5893),r=a(1151);const t={title:"How to build Wayang",sidebar_position:1,id:"installation"},l="Installing and building Apache Wayang",s={id:"guide/installation",title:"How to build Wayang",description:"\x3c!--",source:"@site/docs/guide/installation.md",sourceDirName:" [...]
\ No newline at end of file
diff --git a/assets/js/4611.461cfde8.js b/assets/js/4611.461cfde8.js
new file mode 100644
index 00000000..b08b3b65
--- /dev/null
+++ b/assets/js/4611.461cfde8.js
@@ -0,0 +1,2 @@
+/*! For license information please see 4611.461cfde8.js.LICENSE.txt */
+(self.webpackChunkwayang_website=self.webpackChunkwayang_website||[]).push([[4611],{1639:(e,t,n)=>{"use strict";e.exports=n(9281)},7114:(e,t,n)=>{"use strict";var i=n(5670),r={wrapper:{position:"relative",display:"inline-block"},hint:{position:"absolute",top:"0",left:"0",borderColor:"transparent",boxShadow:"none",opacity:"1"},input:{position:"relative",verticalAlign:"top",backgroundColor:"transparent"},inputWithNoHint:{position:"relative",verticalAlign:"top"},dropdown:{position:"absolute [...]
\ No newline at end of file
diff --git a/assets/js/611.8f30c906.js.LICENSE.txt b/assets/js/4611.461cfde8.js.LICENSE.txt
similarity index 100%
rename from assets/js/611.8f30c906.js.LICENSE.txt
rename to assets/js/4611.461cfde8.js.LICENSE.txt
diff --git a/assets/js/47457315.52705e1f.js b/assets/js/47457315.52705e1f.js
new file mode 100644
index 00000000..6f49dc9a
--- /dev/null
+++ b/assets/js/47457315.52705e1f.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkwayang_website=self.webpackChunkwayang_website||[]).push([[1380],{5755:e=>{e.exports=JSON.parse('{"permalink":"/blog/tags/kafka","page":1,"postsPerPage":10,"totalPages":1,"totalCount":2,"blogDescription":"Blog","blogTitle":"Blog"}')}}]);
\ No newline at end of file
diff --git a/assets/js/47e4c4a8.28869879.js b/assets/js/47e4c4a8.28869879.js
deleted file mode 100644
index 7584ab78..00000000
--- a/assets/js/47e4c4a8.28869879.js
+++ /dev/null
@@ -1 +0,0 @@
-"use strict";(self.webpackChunkwayang_website=self.webpackChunkwayang_website||[]).push([[8],{2102:(e,n,a)=>{a.r(n),a.d(n,{assets:()=>r,contentTitle:()=>s,default:()=>u,frontMatter:()=>t,metadata:()=>l,toc:()=>d});var i=a(5893),o=a(1151);const t={title:"Developing in Wayang",sidebar_position:6,id:"developing-in-wayang"},s=void 0,l={id:"guide/developing-in-wayang",title:"Developing in Wayang",description:"\x3c!--",source:"@site/docs/guide/develop-in-wayang.md",sourceDirName:"guide",slug:" [...]
\ No newline at end of file
diff --git a/assets/js/47e4c4a8.9a912aeb.js b/assets/js/47e4c4a8.9a912aeb.js
new file mode 100644
index 00000000..5dc8751e
--- /dev/null
+++ b/assets/js/47e4c4a8.9a912aeb.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkwayang_website=self.webpackChunkwayang_website||[]).push([[7008],{2102:(e,n,a)=>{a.r(n),a.d(n,{assets:()=>r,contentTitle:()=>s,default:()=>u,frontMatter:()=>t,metadata:()=>l,toc:()=>d});var i=a(5893),o=a(1151);const t={title:"Developing in Wayang",sidebar_position:6,id:"developing-in-wayang"},s=void 0,l={id:"guide/developing-in-wayang",title:"Developing in Wayang",description:"\x3c!--",source:"@site/docs/guide/develop-in-wayang.md",sourceDirName:"guide",slu [...]
\ No newline at end of file
diff --git a/assets/js/4c34ea1b.52a59711.js b/assets/js/4c34ea1b.52a59711.js
deleted file mode 100644
index 62f22daf..00000000
--- a/assets/js/4c34ea1b.52a59711.js
+++ /dev/null
@@ -1 +0,0 @@
-"use strict";(self.webpackChunkwayang_website=self.webpackChunkwayang_website||[]).push([[115],{3769:e=>{e.exports=JSON.parse('{"name":"docusaurus-plugin-content-docs","id":"default"}')}}]);
\ No newline at end of file
diff --git a/assets/js/4c34ea1b.fa4db40f.js b/assets/js/4c34ea1b.fa4db40f.js
new file mode 100644
index 00000000..8b903211
--- /dev/null
+++ b/assets/js/4c34ea1b.fa4db40f.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkwayang_website=self.webpackChunkwayang_website||[]).push([[3115],{3769:e=>{e.exports=JSON.parse('{"name":"docusaurus-plugin-content-docs","id":"default"}')}}]);
\ No newline at end of file
diff --git a/assets/js/5684.f3b486b7.js b/assets/js/5684.f3b486b7.js
new file mode 100644
index 00000000..bbedbba0
--- /dev/null
+++ b/assets/js/5684.f3b486b7.js
@@ -0,0 +1 @@
+(self.webpackChunkwayang_website=self.webpackChunkwayang_website||[]).push([[5684],{9039:(e,s,a)=>{"use strict";a.d(s,{Z:()=>n});var w=a(1336);const n=w},5525:()=>{}}]);
\ No newline at end of file
diff --git a/assets/js/572ad3b2.3f5b6abf.js b/assets/js/572ad3b2.3f5b6abf.js
deleted file mode 100644
index 568357a0..00000000
--- a/assets/js/572ad3b2.3f5b6abf.js
+++ /dev/null
@@ -1 +0,0 @@
-"use strict";(self.webpackChunkwayang_website=self.webpackChunkwayang_website||[]).push([[792],{8537:(e,i,t)=>{t.r(i),t.d(i,{assets:()=>r,contentTitle:()=>o,default:()=>u,frontMatter:()=>a,metadata:()=>l,toc:()=>c});var n=t(5893),s=t(1151);const a={title:"Mailinglists",sidebar_position:1,id:"mailinglist"},o="Mailing List",l={id:"community/mailinglist",title:"Mailinglists",description:"\x3c!--",source:"@site/docs/community/mailinglists.md",sourceDirName:"community",slug:"/community/mailin [...]
\ No newline at end of file
diff --git a/assets/js/572ad3b2.4c0dcee3.js b/assets/js/572ad3b2.4c0dcee3.js
new file mode 100644
index 00000000..2e26d8c6
--- /dev/null
+++ b/assets/js/572ad3b2.4c0dcee3.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkwayang_website=self.webpackChunkwayang_website||[]).push([[5792],{8537:(e,i,t)=>{t.r(i),t.d(i,{assets:()=>r,contentTitle:()=>o,default:()=>u,frontMatter:()=>a,metadata:()=>l,toc:()=>c});var n=t(5893),s=t(1151);const a={title:"Mailinglists",sidebar_position:1,id:"mailinglist"},o="Mailing List",l={id:"community/mailinglist",title:"Mailinglists",description:"\x3c!--",source:"@site/docs/community/mailinglists.md",sourceDirName:"community",slug:"/community/maili [...]
\ No newline at end of file
diff --git a/assets/js/5e95c892.9a73fb8e.js b/assets/js/5e95c892.9a73fb8e.js
new file mode 100644
index 00000000..8bf12e46
--- /dev/null
+++ b/assets/js/5e95c892.9a73fb8e.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkwayang_website=self.webpackChunkwayang_website||[]).push([[9661],{1892:(e,s,a)=>{a.r(s),a.d(s,{default:()=>i});a(7294);var r=a(512),n=a(1944),t=a(5281),u=a(8790),c=a(4023),w=a(5893);function i(e){return(0,w.jsx)(n.FG,{className:(0,r.Z)(t.k.wrapper.docsPages),children:(0,w.jsx)(c.Z,{children:(0,u.H)(e.route.routes)})})}}}]);
\ No newline at end of file
diff --git a/assets/js/5e95c892.b938804e.js b/assets/js/5e95c892.b938804e.js
deleted file mode 100644
index 35481b3c..00000000
--- a/assets/js/5e95c892.b938804e.js
+++ /dev/null
@@ -1 +0,0 @@
-"use strict";(self.webpackChunkwayang_website=self.webpackChunkwayang_website||[]).push([[661],{1892:(e,s,a)=>{a.r(s),a.d(s,{default:()=>i});a(7294);var r=a(512),n=a(1944),t=a(5281),u=a(8790),c=a(4023),w=a(5893);function i(e){return(0,w.jsx)(n.FG,{className:(0,r.Z)(t.k.wrapper.docsPages),children:(0,w.jsx)(c.Z,{children:(0,u.H)(e.route.routes)})})}}}]);
\ No newline at end of file
diff --git a/assets/js/5f842dbc.f4893e13.js b/assets/js/5f842dbc.f4893e13.js
new file mode 100644
index 00000000..960585b9
--- /dev/null
+++ b/assets/js/5f842dbc.f4893e13.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkwayang_website=self.webpackChunkwayang_website||[]).push([[7434],{394:a=>{a.exports=JSON.parse('{"label":"kafka","permalink":"/blog/tags/kafka","allTagsPath":"/blog/tags","count":2,"unlisted":false}')}}]);
\ No newline at end of file
diff --git a/assets/js/611.8f30c906.js b/assets/js/611.8f30c906.js
deleted file mode 100644
index 73103e0b..00000000
--- a/assets/js/611.8f30c906.js
+++ /dev/null
@@ -1,2 +0,0 @@
-/*! For license information please see 611.8f30c906.js.LICENSE.txt */
-(self.webpackChunkwayang_website=self.webpackChunkwayang_website||[]).push([[611],{1639:(e,t,n)=>{"use strict";e.exports=n(9281)},7114:(e,t,n)=>{"use strict";var i=n(5670),r={wrapper:{position:"relative",display:"inline-block"},hint:{position:"absolute",top:"0",left:"0",borderColor:"transparent",boxShadow:"none",opacity:"1"},input:{position:"relative",verticalAlign:"top",backgroundColor:"transparent"},inputWithNoHint:{position:"relative",verticalAlign:"top"},dropdown:{position:"absolute" [...]
\ No newline at end of file
diff --git a/assets/js/627.932ff56c.js b/assets/js/627.932ff56c.js
deleted file mode 100644
index 325344ae..00000000
--- a/assets/js/627.932ff56c.js
+++ /dev/null
@@ -1 +0,0 @@
-(self.webpackChunkwayang_website=self.webpackChunkwayang_website||[]).push([[627],{9047:(e,t,n)=>{"use strict";n.d(t,{Z:()=>E});var s=n(7294),o=n(5893);function a(e){const{mdxAdmonitionTitle:t,rest:n}=function(e){const t=s.Children.toArray(e),n=t.find((e=>s.isValidElement(e)&&"mdxAdmonitionTitle"===e.type)),a=t.filter((e=>e!==n)),c=n?.props.children;return{mdxAdmonitionTitle:c,rest:a.length>0?(0,o.jsx)(o.Fragment,{children:a}):null}}(e.children),a=e.title??t;return{...e,...a&&{title:a},c [...]
\ No newline at end of file
diff --git a/assets/js/64eed6c4.219de616.js b/assets/js/64eed6c4.219de616.js
deleted file mode 100644
index 3dfb7b87..00000000
--- a/assets/js/64eed6c4.219de616.js
+++ /dev/null
@@ -1 +0,0 @@
-"use strict";(self.webpackChunkwayang_website=self.webpackChunkwayang_website||[]).push([[871],{5856:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>o,contentTitle:()=>r,default:()=>p,frontMatter:()=>i,metadata:()=>l,toc:()=>d});var a=t(5893),s=t(1151);const i={title:"Scalable Machine Learning",sidebar_position:3,id:"ml4all"},r="ML4all: scalable ML system for everyone",l={id:"guide/ml4all",title:"Scalable Machine Learning",description:"\x3c!--",source:"@site/docs/guide/ml4all.md",sourceDirName:"guide [...]
\ No newline at end of file
diff --git a/assets/js/64eed6c4.54ed8f5b.js b/assets/js/64eed6c4.54ed8f5b.js
new file mode 100644
index 00000000..9598ab90
--- /dev/null
+++ b/assets/js/64eed6c4.54ed8f5b.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkwayang_website=self.webpackChunkwayang_website||[]).push([[5871],{5856:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>o,contentTitle:()=>r,default:()=>p,frontMatter:()=>i,metadata:()=>l,toc:()=>d});var a=t(5893),s=t(1151);const i={title:"Scalable Machine Learning",sidebar_position:3,id:"ml4all"},r="ML4all: scalable ML system for everyone",l={id:"guide/ml4all",title:"Scalable Machine Learning",description:"\x3c!--",source:"@site/docs/guide/ml4all.md",sourceDirName:"guid [...]
\ No newline at end of file
diff --git a/assets/js/684.06e15f13.js b/assets/js/684.06e15f13.js
deleted file mode 100644
index fc43cb89..00000000
--- a/assets/js/684.06e15f13.js
+++ /dev/null
@@ -1 +0,0 @@
-(self.webpackChunkwayang_website=self.webpackChunkwayang_website||[]).push([[684],{9039:(e,s,a)=>{"use strict";a.d(s,{Z:()=>n});var w=a(1336);const n=w},5525:()=>{}}]);
\ No newline at end of file
diff --git a/assets/js/6875c492.2a16f641.js b/assets/js/6875c492.2a16f641.js
deleted file mode 100644
index cf8ba6b0..00000000
--- a/assets/js/6875c492.2a16f641.js
+++ /dev/null
@@ -1 +0,0 @@
-"use strict";(self.webpackChunkwayang_website=self.webpackChunkwayang_website||[]).push([[610],{9703:(e,t,n)=>{n.d(t,{Z:()=>l});n(7294);var s=n(5999),a=n(2244),i=n(5893);function l(e){const{metadata:t}=e,{previousPage:n,nextPage:l}=t;return(0,i.jsxs)("nav",{className:"pagination-nav","aria-label":(0,s.I)({id:"theme.blog.paginator.navAriaLabel",message:"Blog list page navigation",description:"The ARIA label for the blog pagination"}),children:[n&&(0,i.jsx)(a.Z,{permalink:n,title:(0,i.jsx) [...]
\ No newline at end of file
diff --git a/assets/js/6875c492.80e0d8f9.js b/assets/js/6875c492.80e0d8f9.js
new file mode 100644
index 00000000..ad44b7de
--- /dev/null
+++ b/assets/js/6875c492.80e0d8f9.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkwayang_website=self.webpackChunkwayang_website||[]).push([[8610],{9703:(e,t,n)=>{n.d(t,{Z:()=>l});n(7294);var s=n(5999),a=n(2244),i=n(5893);function l(e){const{metadata:t}=e,{previousPage:n,nextPage:l}=t;return(0,i.jsxs)("nav",{className:"pagination-nav","aria-label":(0,s.I)({id:"theme.blog.paginator.navAriaLabel",message:"Blog list page navigation",description:"The ARIA label for the blog pagination"}),children:[n&&(0,i.jsx)(a.Z,{permalink:n,title:(0,i.jsx [...]
\ No newline at end of file
diff --git a/assets/js/707f14a2.f830c1fb.js b/assets/js/707f14a2.f830c1fb.js
new file mode 100644
index 00000000..606345a8
--- /dev/null
+++ b/assets/js/707f14a2.f830c1fb.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkwayang_website=self.webpackChunkwayang_website||[]).push([[5562],{3075:(a,e,t)=>{t.r(e),t.d(e,{assets:()=>c,contentTitle:()=>r,default:()=>p,frontMatter:()=>i,metadata:()=>s,toc:()=>l});var n=t(5893),o=t(1151);const i={slug:"Apache Kafka meets Apache Wayang",title:"Apache Kafka meets Apache Wayang - Part 1",authors:"kamir",tags:["wayang","kafka","cross organization data collaboration"]},r="Apache Wayang meets Apache Kafka - Part 1",s={permalink:"/blog/Apach [...]
\ No newline at end of file
diff --git a/assets/js/772.f1c7395e.js b/assets/js/772.f1c7395e.js
deleted file mode 100644
index ffc6acd3..00000000
--- a/assets/js/772.f1c7395e.js
+++ /dev/null
@@ -1 +0,0 @@
-"use strict";(self.webpackChunkwayang_website=self.webpackChunkwayang_website||[]).push([[772],{5658:(e,t,n)=>{n.d(t,{Z:()=>r});n(7294);var i=n(512),s=n(5999),a=n(7955),o=n(5893);function r(e){let{className:t}=e;return(0,o.jsx)("main",{className:(0,i.Z)("container margin-vert--xl",t),children:(0,o.jsx)("div",{className:"row",children:(0,o.jsxs)("div",{className:"col col--6 col--offset-3",children:[(0,o.jsx)(a.Z,{as:"h1",className:"hero__title",children:(0,o.jsx)(s.Z,{id:"theme.NotFound.t [...]
\ No newline at end of file
diff --git a/assets/js/77806f28.6ad81e5b.js b/assets/js/77806f28.6ad81e5b.js
new file mode 100644
index 00000000..0b61ffc7
--- /dev/null
+++ b/assets/js/77806f28.6ad81e5b.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkwayang_website=self.webpackChunkwayang_website||[]).push([[7524],{3714:a=>{a.exports=JSON.parse('{"label":"cross organization data collaboration","permalink":"/blog/tags/cross-organization-data-collaboration","allTagsPath":"/blog/tags","count":2,"unlisted":false}')}}]);
\ No newline at end of file
diff --git a/assets/js/7941a8d8.7a800830.js b/assets/js/7941a8d8.7a800830.js
deleted file mode 100644
index d1378c8d..00000000
--- a/assets/js/7941a8d8.7a800830.js
+++ /dev/null
@@ -1 +0,0 @@
-"use strict";(self.webpackChunkwayang_website=self.webpackChunkwayang_website||[]).push([[165],{8710:(n,e,t)=>{t.r(e),t.d(e,{assets:()=>l,contentTitle:()=>r,default:()=>d,frontMatter:()=>o,metadata:()=>s,toc:()=>c});var i=t(5893),a=t(1151);const o={title:"Usage Examples",sidebar_position:5,id:"examples"},r="Guide to Development and Usage with Apache Wayang (incubating)",s={id:"guide/examples",title:"Usage Examples",description:"\x3c!--",source:"@site/docs/guide/usage-examples.md",sourceD [...]
\ No newline at end of file
diff --git a/assets/js/7941a8d8.a374d9c2.js b/assets/js/7941a8d8.a374d9c2.js
new file mode 100644
index 00000000..b3a7d758
--- /dev/null
+++ b/assets/js/7941a8d8.a374d9c2.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkwayang_website=self.webpackChunkwayang_website||[]).push([[3088],{8710:(n,e,t)=>{t.r(e),t.d(e,{assets:()=>l,contentTitle:()=>r,default:()=>d,frontMatter:()=>o,metadata:()=>s,toc:()=>c});var i=t(5893),a=t(1151);const o={title:"Usage Examples",sidebar_position:5,id:"examples"},r="Guide to Development and Usage with Apache Wayang (incubating)",s={id:"guide/examples",title:"Usage Examples",description:"\x3c!--",source:"@site/docs/guide/usage-examples.md",source [...]
\ No newline at end of file
diff --git a/assets/js/7c80c937.33a6aa15.js b/assets/js/7c80c937.33a6aa15.js
new file mode 100644
index 00000000..6aeb195e
--- /dev/null
+++ b/assets/js/7c80c937.33a6aa15.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkwayang_website=self.webpackChunkwayang_website||[]).push([[1958],{1505:a=>{a.exports=JSON.parse('{"label":"wayang","permalink":"/blog/tags/wayang","allTagsPath":"/blog/tags","count":3,"unlisted":false}')}}]);
\ No newline at end of file
diff --git a/assets/js/7c80c937.e1040402.js b/assets/js/7c80c937.e1040402.js
deleted file mode 100644
index acbf1344..00000000
--- a/assets/js/7c80c937.e1040402.js
+++ /dev/null
@@ -1 +0,0 @@
-"use strict";(self.webpackChunkwayang_website=self.webpackChunkwayang_website||[]).push([[958],{1505:a=>{a.exports=JSON.parse('{"label":"wayang","permalink":"/blog/tags/wayang","allTagsPath":"/blog/tags","count":1,"unlisted":false}')}}]);
\ No newline at end of file
diff --git a/assets/js/814f3328.07c6f4ba.js b/assets/js/814f3328.07c6f4ba.js
deleted file mode 100644
index 2e7b4a05..00000000
--- a/assets/js/814f3328.07c6f4ba.js
+++ /dev/null
@@ -1 +0,0 @@
-"use strict";(self.webpackChunkwayang_website=self.webpackChunkwayang_website||[]).push([[535],{5641:e=>{e.exports=JSON.parse('{"title":"All our posts","items":[{"title":"Website updated","permalink":"/blog/website_update","unlisted":false}]}')}}]);
\ No newline at end of file
diff --git a/assets/js/814f3328.72a7783b.js b/assets/js/814f3328.72a7783b.js
new file mode 100644
index 00000000..f64da3d0
--- /dev/null
+++ b/assets/js/814f3328.72a7783b.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkwayang_website=self.webpackChunkwayang_website||[]).push([[2535],{5641:e=>{e.exports=JSON.parse('{"title":"All our posts","items":[{"title":"Apache Kafka meets Apache Wayang - Part 1","permalink":"/blog/Apache Kafka meets Apache Wayang","unlisted":false},{"title":"Apache Kafka meets Apache Wayang - Part 2","permalink":"/blog/Apache Kafka meets Apache Wayang","unlisted":false},{"title":"Website updated","permalink":"/blog/website_update","unlisted":false}]}')}}]);
\ No newline at end of file
diff --git a/assets/js/82fa5665.a13ad9c8.js b/assets/js/82fa5665.a13ad9c8.js
new file mode 100644
index 00000000..62d07fcd
--- /dev/null
+++ b/assets/js/82fa5665.a13ad9c8.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkwayang_website=self.webpackChunkwayang_website||[]).push([[5876],{7306:(e,n,i)=>{i.r(n),i.d(n,{assets:()=>d,contentTitle:()=>l,default:()=>u,frontMatter:()=>o,metadata:()=>a,toc:()=>c});var t=i(5893),s=i(1151);const o={title:"API documentation",sidebar_position:4,id:"api-documentation"},l="API Documentation (WIP)",a={id:"guide/api-documentation",title:"API documentation",description:"\x3c!--",source:"@site/docs/guide/api-documentation.md",sourceDirName:"gui [...]
\ No newline at end of file
diff --git a/assets/js/82fa5665.f9d4b0ea.js b/assets/js/82fa5665.f9d4b0ea.js
deleted file mode 100644
index f93101b2..00000000
--- a/assets/js/82fa5665.f9d4b0ea.js
+++ /dev/null
@@ -1 +0,0 @@
-"use strict";(self.webpackChunkwayang_website=self.webpackChunkwayang_website||[]).push([[876],{7306:(e,n,i)=>{i.r(n),i.d(n,{assets:()=>d,contentTitle:()=>l,default:()=>u,frontMatter:()=>o,metadata:()=>a,toc:()=>c});var t=i(5893),s=i(1151);const o={title:"API documentation",sidebar_position:4,id:"api-documentation"},l="API Documentation (WIP)",a={id:"guide/api-documentation",title:"API documentation",description:"\x3c!--",source:"@site/docs/guide/api-documentation.md",sourceDirName:"guid [...]
\ No newline at end of file
diff --git a/assets/js/86331d88.4ac84354.js b/assets/js/86331d88.4ac84354.js
new file mode 100644
index 00000000..d74abdc3
--- /dev/null
+++ b/assets/js/86331d88.4ac84354.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkwayang_website=self.webpackChunkwayang_website||[]).push([[4266],{2313:a=>{a.exports=JSON.parse('{"permalink":"/blog/tags/cross-organization-data-collaboration","page":1,"postsPerPage":10,"totalPages":1,"totalCount":2,"blogDescription":"Blog","blogTitle":"Blog"}')}}]);
\ No newline at end of file
diff --git a/assets/js/89c6f603.37fbf255.js b/assets/js/89c6f603.37fbf255.js
deleted file mode 100644
index 14078cb5..00000000
--- a/assets/js/89c6f603.37fbf255.js
+++ /dev/null
@@ -1 +0,0 @@
-"use strict";(self.webpackChunkwayang_website=self.webpackChunkwayang_website||[]).push([[979],{8653:(a,e,n)=>{n.r(e),n.d(e,{assets:()=>p,contentTitle:()=>i,default:()=>h,frontMatter:()=>t,metadata:()=>s,toc:()=>d});var r=n(5893),o=n(1151);const t={title:"Adding an operator in Wayang",sidebar_position:7,id:"adding-operators"},i="Adding new operators in Wayang",s={id:"guide/adding-operators",title:"Adding an operator in Wayang",description:"\x3c!--",source:"@site/docs/guide/add-an-operato [...]
\ No newline at end of file
diff --git a/assets/js/89c6f603.c15ed9af.js b/assets/js/89c6f603.c15ed9af.js
new file mode 100644
index 00000000..898e36c4
--- /dev/null
+++ b/assets/js/89c6f603.c15ed9af.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkwayang_website=self.webpackChunkwayang_website||[]).push([[9979],{8653:(a,e,n)=>{n.r(e),n.d(e,{assets:()=>p,contentTitle:()=>i,default:()=>h,frontMatter:()=>t,metadata:()=>s,toc:()=>d});var r=n(5893),o=n(1151);const t={title:"Adding an operator in Wayang",sidebar_position:7,id:"adding-operators"},i="Adding new operators in Wayang",s={id:"guide/adding-operators",title:"Adding an operator in Wayang",description:"\x3c!--",source:"@site/docs/guide/add-an-operat [...]
\ No newline at end of file
diff --git a/assets/js/922da4c8.3abff87a.js b/assets/js/922da4c8.3abff87a.js
new file mode 100644
index 00000000..be904ef7
--- /dev/null
+++ b/assets/js/922da4c8.3abff87a.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkwayang_website=self.webpackChunkwayang_website||[]).push([[3224],{4335:(a,e,t)=>{t.r(e),t.d(e,{assets:()=>c,contentTitle:()=>r,default:()=>p,frontMatter:()=>i,metadata:()=>s,toc:()=>l});var n=t(5893),o=t(1151);const i={slug:"Apache Kafka meets Apache Wayang",title:"Apache Kafka meets Apache Wayang - Part 1",authors:"kamir",tags:["wayang","kafka","cross organization data collaboration"]},r="Apache Wayang meets Apache Kafka - Part 1",s={permalink:"/blog/Apach [...]
\ No newline at end of file
diff --git a/assets/js/92791066.ce7704dd.js b/assets/js/92791066.ce7704dd.js
deleted file mode 100644
index ae8a304d..00000000
--- a/assets/js/92791066.ce7704dd.js
+++ /dev/null
@@ -1 +0,0 @@
-"use strict";(self.webpackChunkwayang_website=self.webpackChunkwayang_website||[]).push([[100],{6537:(e,t,i)=>{i.r(t),i.d(t,{assets:()=>l,contentTitle:()=>o,default:()=>p,frontMatter:()=>s,metadata:()=>r,toc:()=>c});var a=i(5893),n=i(1151);const s={id:"features",title:"Features",sidebar_position:3},o=void 0,r={id:"introduction/features",title:"Features",description:"Cross platform enablement",source:"@site/docs/introduction/features.md",sourceDirName:"introduction",slug:"/introduction/fe [...]
\ No newline at end of file
diff --git a/assets/js/92791066.e6358e8e.js b/assets/js/92791066.e6358e8e.js
new file mode 100644
index 00000000..4e2d4865
--- /dev/null
+++ b/assets/js/92791066.e6358e8e.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkwayang_website=self.webpackChunkwayang_website||[]).push([[4100],{6537:(e,t,i)=>{i.r(t),i.d(t,{assets:()=>l,contentTitle:()=>o,default:()=>p,frontMatter:()=>s,metadata:()=>r,toc:()=>c});var a=i(5893),n=i(1151);const s={id:"features",title:"Features",sidebar_position:3},o=void 0,r={id:"introduction/features",title:"Features",description:"Cross platform enablement",source:"@site/docs/introduction/features.md",sourceDirName:"introduction",slug:"/introduction/f [...]
\ No newline at end of file
diff --git a/assets/js/94fcbb7f.210b3713.js b/assets/js/94fcbb7f.210b3713.js
new file mode 100644
index 00000000..d6df0c19
--- /dev/null
+++ b/assets/js/94fcbb7f.210b3713.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkwayang_website=self.webpackChunkwayang_website||[]).push([[6845],{4469:e=>{e.exports=JSON.parse('{"name":"docusaurus-plugin-content-blog","id":"default"}')}}]);
\ No newline at end of file
diff --git a/assets/js/94fcbb7f.ea84c7e0.js b/assets/js/94fcbb7f.ea84c7e0.js
deleted file mode 100644
index e6d7186d..00000000
--- a/assets/js/94fcbb7f.ea84c7e0.js
+++ /dev/null
@@ -1 +0,0 @@
-"use strict";(self.webpackChunkwayang_website=self.webpackChunkwayang_website||[]).push([[845],{4469:e=>{e.exports=JSON.parse('{"name":"docusaurus-plugin-content-blog","id":"default"}')}}]);
\ No newline at end of file
diff --git a/assets/js/9e4087bc.92702229.js b/assets/js/9e4087bc.92702229.js
deleted file mode 100644
index 2cdd27c1..00000000
--- a/assets/js/9e4087bc.92702229.js
+++ /dev/null
@@ -1 +0,0 @@
-"use strict";(self.webpackChunkwayang_website=self.webpackChunkwayang_website||[]).push([[608],{3169:(e,a,s)=>{s.r(a),s.d(a,{default:()=>o});s(7294);var t=s(3692),r=s(5999),i=s(1944),n=s(4023),c=s(7955),l=s(5893);function h(e){let{year:a,posts:s}=e;return(0,l.jsxs)(l.Fragment,{children:[(0,l.jsx)(c.Z,{as:"h3",id:a,children:a}),(0,l.jsx)("ul",{children:s.map((e=>(0,l.jsx)("li",{children:(0,l.jsxs)(t.Z,{to:e.metadata.permalink,children:[e.metadata.formattedDate," - ",e.metadata.title]})},e [...]
\ No newline at end of file
diff --git a/assets/js/9e4087bc.b724501e.js b/assets/js/9e4087bc.b724501e.js
new file mode 100644
index 00000000..df8a009e
--- /dev/null
+++ b/assets/js/9e4087bc.b724501e.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkwayang_website=self.webpackChunkwayang_website||[]).push([[3608],{3169:(e,a,s)=>{s.r(a),s.d(a,{default:()=>o});s(7294);var t=s(3692),r=s(5999),i=s(1944),n=s(4023),c=s(7955),l=s(5893);function h(e){let{year:a,posts:s}=e;return(0,l.jsxs)(l.Fragment,{children:[(0,l.jsx)(c.Z,{as:"h3",id:a,children:a}),(0,l.jsx)("ul",{children:s.map((e=>(0,l.jsx)("li",{children:(0,l.jsxs)(t.Z,{to:e.metadata.permalink,children:[e.metadata.formattedDate," - ",e.metadata.title]})}, [...]
\ No newline at end of file
diff --git a/assets/js/a6aa9e1f.6bb7fda5.js b/assets/js/a6aa9e1f.6bb7fda5.js
deleted file mode 100644
index 01943bd9..00000000
--- a/assets/js/a6aa9e1f.6bb7fda5.js
+++ /dev/null
@@ -1 +0,0 @@
-"use strict";(self.webpackChunkwayang_website=self.webpackChunkwayang_website||[]).push([[89],{46:(e,t,a)=>{a.r(t),a.d(t,{default:()=>m});a(7294);var n=a(512),i=a(2263),s=a(1944),r=a(5281),l=a(1460),o=a(9703),g=a(197),d=a(9985),p=a(5893);function c(e){const{metadata:t}=e,{siteConfig:{title:a}}=(0,i.Z)(),{blogDescription:n,blogTitle:r,permalink:l}=t,o="/"===l?a:r;return(0,p.jsxs)(p.Fragment,{children:[(0,p.jsx)(s.d,{title:o,description:n}),(0,p.jsx)(g.Z,{tag:"blog_posts_list"})]})}functio [...]
\ No newline at end of file
diff --git a/assets/js/a6aa9e1f.db7bee20.js b/assets/js/a6aa9e1f.db7bee20.js
new file mode 100644
index 00000000..ebd16c82
--- /dev/null
+++ b/assets/js/a6aa9e1f.db7bee20.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkwayang_website=self.webpackChunkwayang_website||[]).push([[3089],{46:(e,t,a)=>{a.r(t),a.d(t,{default:()=>m});a(7294);var n=a(512),i=a(2263),s=a(1944),r=a(5281),l=a(1460),o=a(9703),g=a(197),d=a(9985),p=a(5893);function c(e){const{metadata:t}=e,{siteConfig:{title:a}}=(0,i.Z)(),{blogDescription:n,blogTitle:r,permalink:l}=t,o="/"===l?a:r;return(0,p.jsxs)(p.Fragment,{children:[(0,p.jsx)(s.d,{title:o,description:n}),(0,p.jsx)(g.Z,{tag:"blog_posts_list"})]})}funct [...]
\ No newline at end of file
diff --git a/assets/js/a7023ddc.773fb221.js b/assets/js/a7023ddc.773fb221.js
deleted file mode 100644
index 2ec3fbb8..00000000
--- a/assets/js/a7023ddc.773fb221.js
+++ /dev/null
@@ -1 +0,0 @@
-"use strict";(self.webpackChunkwayang_website=self.webpackChunkwayang_website||[]).push([[713],{3457:a=>{a.exports=JSON.parse('[{"label":"wayang","permalink":"/blog/tags/wayang","count":1}]')}}]);
\ No newline at end of file
diff --git a/assets/js/a7023ddc.821b2117.js b/assets/js/a7023ddc.821b2117.js
new file mode 100644
index 00000000..8345e8ed
--- /dev/null
+++ b/assets/js/a7023ddc.821b2117.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkwayang_website=self.webpackChunkwayang_website||[]).push([[1713],{3457:a=>{a.exports=JSON.parse('[{"label":"wayang","permalink":"/blog/tags/wayang","count":3},{"label":"kafka","permalink":"/blog/tags/kafka","count":2},{"label":"cross organization data collaboration","permalink":"/blog/tags/cross-organization-data-collaboration","count":2}]')}}]);
\ No newline at end of file
diff --git a/assets/js/a72578df.97c99ed4.js b/assets/js/a72578df.97c99ed4.js
deleted file mode 100644
index 743185c8..00000000
--- a/assets/js/a72578df.97c99ed4.js
+++ /dev/null
@@ -1 +0,0 @@
-"use strict";(self.webpackChunkwayang_website=self.webpackChunkwayang_website||[]).push([[957],{5745:e=>{e.exports=JSON.parse('{"name":"docusaurus-plugin-content-pages","id":"default"}')}}]);
\ No newline at end of file
diff --git a/assets/js/a72578df.e3f45652.js b/assets/js/a72578df.e3f45652.js
new file mode 100644
index 00000000..177d7b50
--- /dev/null
+++ b/assets/js/a72578df.e3f45652.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkwayang_website=self.webpackChunkwayang_website||[]).push([[4957],{5745:e=>{e.exports=JSON.parse('{"name":"docusaurus-plugin-content-pages","id":"default"}')}}]);
\ No newline at end of file
diff --git a/assets/js/a7bd4aaa.c4da7e34.js b/assets/js/a7bd4aaa.c4da7e34.js
new file mode 100644
index 00000000..54f7e359
--- /dev/null
+++ b/assets/js/a7bd4aaa.c4da7e34.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkwayang_website=self.webpackChunkwayang_website||[]).push([[8518],{8564:(n,e,s)=>{s.r(e),s.d(e,{default:()=>d});s(7294);var r=s(1944),o=s(3320),t=s(4477),i=s(8790),a=s(197),c=s(5893);function u(n){const{version:e}=n;return(0,c.jsxs)(c.Fragment,{children:[(0,c.jsx)(a.Z,{version:e.version,tag:(0,o.os)(e.pluginId,e.version)}),(0,c.jsx)(r.d,{children:e.noIndex&&(0,c.jsx)("meta",{name:"robots",content:"noindex, nofollow"})})]})}function l(n){const{version:e,route [...]
\ No newline at end of file
diff --git a/assets/js/a7bd4aaa.f2c74e7a.js b/assets/js/a7bd4aaa.f2c74e7a.js
deleted file mode 100644
index 91bc8f07..00000000
--- a/assets/js/a7bd4aaa.f2c74e7a.js
+++ /dev/null
@@ -1 +0,0 @@
-"use strict";(self.webpackChunkwayang_website=self.webpackChunkwayang_website||[]).push([[518],{8564:(n,e,s)=>{s.r(e),s.d(e,{default:()=>d});s(7294);var r=s(1944),o=s(3320),t=s(4477),i=s(8790),a=s(197),c=s(5893);function u(n){const{version:e}=n;return(0,c.jsxs)(c.Fragment,{children:[(0,c.jsx)(a.Z,{version:e.version,tag:(0,o.os)(e.pluginId,e.version)}),(0,c.jsx)(r.d,{children:e.noIndex&&(0,c.jsx)("meta",{name:"robots",content:"noindex, nofollow"})})]})}function l(n){const{version:e,route: [...]
\ No newline at end of file
diff --git a/assets/js/a94703ab.130b2ff4.js b/assets/js/a94703ab.130b2ff4.js
new file mode 100644
index 00000000..6a0d6f92
--- /dev/null
+++ b/assets/js/a94703ab.130b2ff4.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkwayang_website=self.webpackChunkwayang_website||[]).push([[4368],{2674:(e,t,n)=>{n.r(t),n.d(t,{default:()=>be});var a=n(7294),o=n(512),i=n(1944),s=n(5281),l=n(2802),r=n(1116),c=n(5999),d=n(2466),u=n(5936);const m={backToTopButton:"backToTopButton_sjWU",backToTopButtonShow:"backToTopButtonShow_xfvO"};var b=n(5893);function h(){const{shown:e,scrollToTop:t}=function(e){let{threshold:t}=e;const[n,o]=(0,a.useState)(!1),i=(0,a.useRef)(!1),{startScroll:s,cancelScr [...]
\ No newline at end of file
diff --git a/assets/js/a94703ab.2645d6cb.js b/assets/js/a94703ab.2645d6cb.js
deleted file mode 100644
index dd7cd9a7..00000000
--- a/assets/js/a94703ab.2645d6cb.js
+++ /dev/null
@@ -1 +0,0 @@
-"use strict";(self.webpackChunkwayang_website=self.webpackChunkwayang_website||[]).push([[368],{2674:(e,t,n)=>{n.r(t),n.d(t,{default:()=>be});var a=n(7294),o=n(512),i=n(1944),s=n(5281),l=n(2802),r=n(1116),c=n(5999),d=n(2466),u=n(5936);const m={backToTopButton:"backToTopButton_sjWU",backToTopButtonShow:"backToTopButtonShow_xfvO"};var b=n(5893);function h(){const{shown:e,scrollToTop:t}=function(e){let{threshold:t}=e;const[n,o]=(0,a.useState)(!1),i=(0,a.useRef)(!1),{startScroll:s,cancelScro [...]
\ No newline at end of file
diff --git a/assets/js/ae568e66.71145064.js b/assets/js/ae568e66.71145064.js
new file mode 100644
index 00000000..3b98cc9d
--- /dev/null
+++ b/assets/js/ae568e66.71145064.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkwayang_website=self.webpackChunkwayang_website||[]).push([[6042],{7146:e=>{e.exports=JSON.parse('{"permalink":"/blog/tags/wayang","page":1,"postsPerPage":10,"totalPages":1,"totalCount":3,"blogDescription":"Blog","blogTitle":"Blog"}')}}]);
\ No newline at end of file
diff --git a/assets/js/ae568e66.d93dd239.js b/assets/js/ae568e66.d93dd239.js
deleted file mode 100644
index 52b14f17..00000000
--- a/assets/js/ae568e66.d93dd239.js
+++ /dev/null
@@ -1 +0,0 @@
-"use strict";(self.webpackChunkwayang_website=self.webpackChunkwayang_website||[]).push([[42],{7146:e=>{e.exports=JSON.parse('{"permalink":"/blog/tags/wayang","page":1,"postsPerPage":10,"totalPages":1,"totalCount":1,"blogDescription":"Blog","blogTitle":"Blog"}')}}]);
\ No newline at end of file
diff --git a/assets/js/b2b675dd.2e003fe7.js b/assets/js/b2b675dd.4aa3fc25.js
similarity index 75%
rename from assets/js/b2b675dd.2e003fe7.js
rename to assets/js/b2b675dd.4aa3fc25.js
index e427d77f..05716d88 100644
--- a/assets/js/b2b675dd.2e003fe7.js
+++ b/assets/js/b2b675dd.4aa3fc25.js
@@ -1 +1 @@
-"use strict";(self.webpackChunkwayang_website=self.webpackChunkwayang_website||[]).push([[533],{8017:e=>{e.exports=JSON.parse('{"permalink":"/blog","page":1,"postsPerPage":10,"totalPages":1,"totalCount":1,"blogDescription":"Blog","blogTitle":"Blog"}')}}]);
\ No newline at end of file
+"use strict";(self.webpackChunkwayang_website=self.webpackChunkwayang_website||[]).push([[533],{8017:e=>{e.exports=JSON.parse('{"permalink":"/blog","page":1,"postsPerPage":10,"totalPages":1,"totalCount":3,"blogDescription":"Blog","blogTitle":"Blog"}')}}]);
\ No newline at end of file
diff --git a/assets/js/b2f554cd.14ec329e.js b/assets/js/b2f554cd.14ec329e.js
new file mode 100644
index 00000000..77065ef1
--- /dev/null
+++ b/assets/js/b2f554cd.14ec329e.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkwayang_website=self.webpackChunkwayang_website||[]).push([[1477],{10:a=>{a.exports=JSON.parse('{"blogPosts":[{"id":"Apache Kafka meets Apache Wayang","metadata":{"permalink":"/blog/Apache Kafka meets Apache Wayang","source":"@site/blog/kafka-meets-wayang-1.md","title":"Apache Kafka meets Apache Wayang - Part 1","description":"Intro","date":"2024-03-06T09:50:00.000Z","formattedDate":"March 6, 2024","tags":[{"label":"wayang","permalink":"/blog/tags/wayang"},{ [...]
\ No newline at end of file
diff --git a/assets/js/b2f554cd.184b478e.js b/assets/js/b2f554cd.184b478e.js
deleted file mode 100644
index 969f53cf..00000000
--- a/assets/js/b2f554cd.184b478e.js
+++ /dev/null
@@ -1 +0,0 @@
-"use strict";(self.webpackChunkwayang_website=self.webpackChunkwayang_website||[]).push([[477],{10:e=>{e.exports=JSON.parse('{"blogPosts":[{"id":"website_update","metadata":{"permalink":"/blog/website_update","source":"@site/blog/2024-01-25-website_update.md","title":"Website updated","description":"We\'re updated our website and use now Docusaurus.","date":"2024-01-25T00:00:00.000Z","formattedDate":"January 25, 2024","tags":[{"label":"wayang","permalink":"/blog/tags/wayang"}],"readingTi [...]
\ No newline at end of file
diff --git a/assets/js/c3d032e9.25862c57.js b/assets/js/c3d032e9.25862c57.js
deleted file mode 100644
index fdb3d5b0..00000000
--- a/assets/js/c3d032e9.25862c57.js
+++ /dev/null
@@ -1 +0,0 @@
-"use strict";(self.webpackChunkwayang_website=self.webpackChunkwayang_website||[]).push([[638],{1915:(t,e,n)=>{n.r(e),n.d(e,{assets:()=>l,contentTitle:()=>d,default:()=>h,frontMatter:()=>s,metadata:()=>c,toc:()=>o});var r=n(5893),i=n(1151);const s={title:"Team",sidebar_position:2,id:"team"},d=void 0,c={id:"community/team",title:"Team",description:"Committers and Contributors",source:"@site/docs/community/team.md",sourceDirName:"community",slug:"/community/team",permalink:"/docs/community [...]
\ No newline at end of file
diff --git a/assets/js/c3d032e9.a627446e.js b/assets/js/c3d032e9.a627446e.js
new file mode 100644
index 00000000..bf61c06c
--- /dev/null
+++ b/assets/js/c3d032e9.a627446e.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkwayang_website=self.webpackChunkwayang_website||[]).push([[2638],{1915:(t,e,n)=>{n.r(e),n.d(e,{assets:()=>l,contentTitle:()=>d,default:()=>h,frontMatter:()=>s,metadata:()=>c,toc:()=>o});var r=n(5893),i=n(1151);const s={title:"Team",sidebar_position:2,id:"team"},d=void 0,c={id:"community/team",title:"Team",description:"Committers and Contributors",source:"@site/docs/community/team.md",sourceDirName:"community",slug:"/community/team",permalink:"/docs/communit [...]
\ No newline at end of file
diff --git a/assets/js/c8d81af2.02880114.js b/assets/js/c8d81af2.02880114.js
deleted file mode 100644
index 107e12db..00000000
--- a/assets/js/c8d81af2.02880114.js
+++ /dev/null
@@ -1 +0,0 @@
-"use strict";(self.webpackChunkwayang_website=self.webpackChunkwayang_website||[]).push([[476],{8205:(e,t,a)=>{a.r(t),a.d(t,{assets:()=>c,contentTitle:()=>s,default:()=>p,frontMatter:()=>r,metadata:()=>o,toc:()=>l});var n=a(5893),i=a(1151);const r={id:"about",title:"What is Wayang?",sidebar_position:1},s=void 0,o={id:"introduction/about",title:"What is Wayang?",description:"\x3c!--",source:"@site/docs/introduction/about.md",sourceDirName:"introduction",slug:"/introduction/about",permalin [...]
\ No newline at end of file
diff --git a/assets/js/c8d81af2.2225744e.js b/assets/js/c8d81af2.2225744e.js
new file mode 100644
index 00000000..cefa8eab
--- /dev/null
+++ b/assets/js/c8d81af2.2225744e.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkwayang_website=self.webpackChunkwayang_website||[]).push([[4476],{8205:(e,t,a)=>{a.r(t),a.d(t,{assets:()=>c,contentTitle:()=>s,default:()=>p,frontMatter:()=>r,metadata:()=>o,toc:()=>l});var n=a(5893),i=a(1151);const r={id:"about",title:"What is Wayang?",sidebar_position:1},s=void 0,o={id:"introduction/about",title:"What is Wayang?",description:"\x3c!--",source:"@site/docs/introduction/about.md",sourceDirName:"introduction",slug:"/introduction/about",permali [...]
\ No newline at end of file
diff --git a/assets/js/ccc49370.971de1e7.js b/assets/js/ccc49370.971de1e7.js
deleted file mode 100644
index 771a9931..00000000
--- a/assets/js/ccc49370.971de1e7.js
+++ /dev/null
@@ -1 +0,0 @@
-"use strict";(self.webpackChunkwayang_website=self.webpackChunkwayang_website||[]).push([[103],{5203:(e,n,t)=>{t.r(n),t.d(n,{default:()=>p});t(7294);var a=t(512),i=t(1944),s=t(5281),o=t(9460),l=t(1460),r=t(390),c=t(5999),d=t(2244),u=t(5893);function m(e){const{nextItem:n,prevItem:t}=e;return(0,u.jsxs)("nav",{className:"pagination-nav docusaurus-mt-lg","aria-label":(0,c.I)({id:"theme.blog.post.paginator.navAriaLabel",message:"Blog post page navigation",description:"The ARIA label for the [...]
\ No newline at end of file
diff --git a/assets/js/ccc49370.abc3e971.js b/assets/js/ccc49370.abc3e971.js
new file mode 100644
index 00000000..28e90690
--- /dev/null
+++ b/assets/js/ccc49370.abc3e971.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkwayang_website=self.webpackChunkwayang_website||[]).push([[6103],{5203:(e,n,t)=>{t.r(n),t.d(n,{default:()=>p});t(7294);var a=t(512),i=t(1944),s=t(5281),o=t(9460),l=t(1460),r=t(390),c=t(5999),d=t(2244),u=t(5893);function m(e){const{nextItem:n,prevItem:t}=e;return(0,u.jsxs)("nav",{className:"pagination-nav docusaurus-mt-lg","aria-label":(0,c.I)({id:"theme.blog.post.paginator.navAriaLabel",message:"Blog post page navigation",description:"The ARIA label for the [...]
\ No newline at end of file
diff --git a/assets/js/d8224fc8.1af06dcd.js b/assets/js/d8224fc8.1af06dcd.js
deleted file mode 100644
index 49724955..00000000
--- a/assets/js/d8224fc8.1af06dcd.js
+++ /dev/null
@@ -1 +0,0 @@
-"use strict";(self.webpackChunkwayang_website=self.webpackChunkwayang_website||[]).push([[196],{1572:(e,n,a)=>{a.r(n),a.d(n,{assets:()=>l,contentTitle:()=>r,default:()=>p,frontMatter:()=>o,metadata:()=>s,toc:()=>c});var i=a(5893),t=a(1151);const o={title:"Getting started",sidebar_position:2,id:"getting-started"},r=void 0,s={id:"guide/getting-started",title:"Getting started",description:"\x3c!--",source:"@site/docs/guide/getting-started.md",sourceDirName:"guide",slug:"/guide/getting-start [...]
\ No newline at end of file
diff --git a/assets/js/d8224fc8.1f0dd13a.js b/assets/js/d8224fc8.1f0dd13a.js
new file mode 100644
index 00000000..9e135058
--- /dev/null
+++ b/assets/js/d8224fc8.1f0dd13a.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkwayang_website=self.webpackChunkwayang_website||[]).push([[1196],{1572:(e,n,a)=>{a.r(n),a.d(n,{assets:()=>l,contentTitle:()=>r,default:()=>p,frontMatter:()=>o,metadata:()=>s,toc:()=>c});var i=a(5893),t=a(1151);const o={title:"Getting started",sidebar_position:2,id:"getting-started"},r=void 0,s={id:"guide/getting-started",title:"Getting started",description:"\x3c!--",source:"@site/docs/guide/getting-started.md",sourceDirName:"guide",slug:"/guide/getting-star [...]
\ No newline at end of file
diff --git a/assets/js/dd4c342d.8f36f540.js b/assets/js/dd4c342d.8f36f540.js
deleted file mode 100644
index 15e6d113..00000000
--- a/assets/js/dd4c342d.8f36f540.js
+++ /dev/null
@@ -1 +0,0 @@
-"use strict";(self.webpackChunkwayang_website=self.webpackChunkwayang_website||[]).push([[516],{5462:(e,t,i)=>{i.r(t),i.d(t,{assets:()=>c,contentTitle:()=>n,default:()=>h,frontMatter:()=>o,metadata:()=>r,toc:()=>u});var s=i(5893),a=i(1151);const o={title:"Repositories",sidebar_position:2,id:"repositories"},n="Community Hubs",r={id:"community/repositories",title:"Repositories",description:"Source Code",source:"@site/docs/community/repositories.md",sourceDirName:"community",slug:"/communit [...]
\ No newline at end of file
diff --git a/assets/js/dd4c342d.c7caa21a.js b/assets/js/dd4c342d.c7caa21a.js
new file mode 100644
index 00000000..64f35bde
--- /dev/null
+++ b/assets/js/dd4c342d.c7caa21a.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkwayang_website=self.webpackChunkwayang_website||[]).push([[6516],{5462:(e,t,i)=>{i.r(t),i.d(t,{assets:()=>c,contentTitle:()=>n,default:()=>h,frontMatter:()=>o,metadata:()=>r,toc:()=>u});var s=i(5893),a=i(1151);const o={title:"Repositories",sidebar_position:2,id:"repositories"},n="Community Hubs",r={id:"community/repositories",title:"Repositories",description:"Source Code",source:"@site/docs/community/repositories.md",sourceDirName:"community",slug:"/communi [...]
\ No newline at end of file
diff --git a/assets/js/de9e258c.8b5311c8.js b/assets/js/de9e258c.8b5311c8.js
new file mode 100644
index 00000000..285de723
--- /dev/null
+++ b/assets/js/de9e258c.8b5311c8.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkwayang_website=self.webpackChunkwayang_website||[]).push([[1871],{19:(e,a,t)=>{t.r(a),t.d(a,{assets:()=>c,contentTitle:()=>s,default:()=>p,frontMatter:()=>o,metadata:()=>r,toc:()=>l});var n=t(5893),i=t(1151);const o={slug:"Apache Kafka meets Apache Wayang",title:"Apache Kafka meets Apache Wayang - Part 2",authors:"kamir",tags:["wayang","kafka","cross organization data collaboration"]},s="Apache Wayang meets Apache Kafka - Part 2",r={permalink:"/blog/Apache [...]
\ No newline at end of file
diff --git a/assets/js/e82464af.570a91e9.js b/assets/js/e82464af.570a91e9.js
new file mode 100644
index 00000000..55779e24
--- /dev/null
+++ b/assets/js/e82464af.570a91e9.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkwayang_website=self.webpackChunkwayang_website||[]).push([[7555],{1757:(e,t,a)=>{a.r(t),a.d(t,{assets:()=>i,contentTitle:()=>r,default:()=>p,frontMatter:()=>o,metadata:()=>u,toc:()=>c});var n=a(5893),s=a(1151);const o={slug:"website_update",title:"Website updated",authors:["alo.alt"],tags:["wayang"]},r=void 0,u={permalink:"/blog/website_update",source:"@site/blog/2024-01-25-website_update.md",title:"Website updated",description:"We're updated our website an [...]
\ No newline at end of file
diff --git a/assets/js/e82464af.7f611a2b.js b/assets/js/e82464af.7f611a2b.js
deleted file mode 100644
index 56800ea3..00000000
--- a/assets/js/e82464af.7f611a2b.js
+++ /dev/null
@@ -1 +0,0 @@
-"use strict";(self.webpackChunkwayang_website=self.webpackChunkwayang_website||[]).push([[555],{1757:(e,t,a)=>{a.r(t),a.d(t,{assets:()=>i,contentTitle:()=>u,default:()=>d,frontMatter:()=>o,metadata:()=>r,toc:()=>c});var n=a(5893),s=a(1151);const o={slug:"website_update",title:"Website updated",authors:["alo.alt"],tags:["wayang"]},u=void 0,r={permalink:"/blog/website_update",source:"@site/blog/2024-01-25-website_update.md",title:"Website updated",description:"We're updated our website and [...]
\ No newline at end of file
diff --git a/assets/js/effa2a56.5eb24bf2.js b/assets/js/effa2a56.5eb24bf2.js
deleted file mode 100644
index 54af71ab..00000000
--- a/assets/js/effa2a56.5eb24bf2.js
+++ /dev/null
@@ -1 +0,0 @@
-"use strict";(self.webpackChunkwayang_website=self.webpackChunkwayang_website||[]).push([[399],{897:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>o,contentTitle:()=>l,default:()=>d,frontMatter:()=>a,metadata:()=>r,toc:()=>c});var s=t(5893),i=t(1151);const a={slug:"website_update",title:"Website updated",authors:["alo.alt"],tags:["wayang"]},l="Website updated",r={permalink:"/blog/website_update",source:"@site/blog/2024-01-25-website_update.md",title:"Website updated",description:"We're updated our w [...]
\ No newline at end of file
diff --git a/assets/js/effa2a56.d9218085.js b/assets/js/effa2a56.d9218085.js
new file mode 100644
index 00000000..5c9b5674
--- /dev/null
+++ b/assets/js/effa2a56.d9218085.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkwayang_website=self.webpackChunkwayang_website||[]).push([[3399],{897:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>o,contentTitle:()=>l,default:()=>h,frontMatter:()=>i,metadata:()=>r,toc:()=>c});var a=t(5893),s=t(1151);const i={slug:"website_update",title:"Website updated",authors:["alo.alt"],tags:["wayang"]},l="Website updated",r={permalink:"/blog/website_update",source:"@site/blog/2024-01-25-website_update.md",title:"Website updated",description:"We're updated our [...]
\ No newline at end of file
diff --git a/assets/js/main.bb71bd6f.js b/assets/js/main.bb71bd6f.js
deleted file mode 100644
index 2ed14ee1..00000000
--- a/assets/js/main.bb71bd6f.js
+++ /dev/null
@@ -1,2 +0,0 @@
-/*! For license information please see main.bb71bd6f.js.LICENSE.txt */
-(self.webpackChunkwayang_website=self.webpackChunkwayang_website||[]).push([[179],{723:(e,t,n)=>{"use strict";n.d(t,{Z:()=>p});n(7294);var r=n(8356),a=n.n(r),o=n(6887);const i={"01a85c17":[()=>Promise.all([n.e(532),n.e(13)]).then(n.bind(n,1223)),"@theme/BlogTagsListPage",1223],"05a94acb":[()=>n.e(617).then(n.bind(n,7856)),"@site/docs/community/committer.md",7856],"092604a4":[()=>n.e(88).then(n.bind(n,45)),"@site/docs/introduction/benchmark.md",45],17896441:[()=>Promise.all([n.e(532),n.e( [...]
\ No newline at end of file
diff --git a/assets/js/main.fa771859.js b/assets/js/main.fa771859.js
new file mode 100644
index 00000000..e348d895
--- /dev/null
+++ b/assets/js/main.fa771859.js
@@ -0,0 +1,2 @@
+/*! For license information please see main.fa771859.js.LICENSE.txt */
+(self.webpackChunkwayang_website=self.webpackChunkwayang_website||[]).push([[179],{723:(e,t,n)=>{"use strict";n.d(t,{Z:()=>p});n(7294);var r=n(8356),a=n.n(r),o=n(6887);const i={"01a85c17":[()=>Promise.all([n.e(532),n.e(4013)]).then(n.bind(n,1223)),"@theme/BlogTagsListPage",1223],"05a94acb":[()=>n.e(3617).then(n.bind(n,7856)),"@site/docs/community/committer.md",7856],"092604a4":[()=>n.e(5088).then(n.bind(n,45)),"@site/docs/introduction/benchmark.md",45],17896441:[()=>Promise.all([n.e(532) [...]
\ No newline at end of file
diff --git a/assets/js/main.bb71bd6f.js.LICENSE.txt b/assets/js/main.fa771859.js.LICENSE.txt
similarity index 100%
rename from assets/js/main.bb71bd6f.js.LICENSE.txt
rename to assets/js/main.fa771859.js.LICENSE.txt
diff --git a/assets/js/runtime~main.c0fb4924.js b/assets/js/runtime~main.c0fb4924.js
deleted file mode 100644
index 35702741..00000000
--- a/assets/js/runtime~main.c0fb4924.js
+++ /dev/null
@@ -1 +0,0 @@
-(()=>{"use strict";var e,a,t,r,c,f={},d={};function o(e){var a=d[e];if(void 0!==a)return a.exports;var t=d[e]={exports:{}};return f[e].call(t.exports,t,t.exports,o),t.exports}o.m=f,e=[],o.O=(a,t,r,c)=>{if(!t){var f=1/0;for(i=0;i<e.length;i++){t=e[i][0],r=e[i][1],c=e[i][2];for(var d=!0,n=0;n<t.length;n++)(!1&c||f>=c)&&Object.keys(o.O).every((e=>o.O[e](t[n])))?t.splice(n--,1):(d=!1,c<f&&(f=c));if(d){e.splice(i--,1);var b=r();void 0!==b&&(a=b)}}return a}c=c||0;for(var i=e.length;i>0&&e[i-1] [...]
\ No newline at end of file
diff --git a/assets/js/runtime~main.c6c8cd99.js b/assets/js/runtime~main.c6c8cd99.js
new file mode 100644
index 00000000..9244475b
--- /dev/null
+++ b/assets/js/runtime~main.c6c8cd99.js
@@ -0,0 +1 @@
+(()=>{"use strict";var e,a,c,t,r,d={},f={};function o(e){var a=f[e];if(void 0!==a)return a.exports;var c=f[e]={exports:{}};return d[e].call(c.exports,c,c.exports,o),c.exports}o.m=d,e=[],o.O=(a,c,t,r)=>{if(!c){var d=1/0;for(i=0;i<e.length;i++){c=e[i][0],t=e[i][1],r=e[i][2];for(var f=!0,n=0;n<c.length;n++)(!1&r||d>=r)&&Object.keys(o.O).every((e=>o.O[e](c[n])))?c.splice(n--,1):(f=!1,r<d&&(d=r));if(f){e.splice(i--,1);var b=t();void 0!==b&&(a=b)}}return a}r=r||0;for(var i=e.length;i>0&&e[i-1] [...]
\ No newline at end of file
diff --git a/blog/Apache Kafka meets Apache Wayang/index.html b/blog/Apache Kafka meets Apache Wayang/index.html
new file mode 100644
index 00000000..edcbfdb8
--- /dev/null
+++ b/blog/Apache Kafka meets Apache Wayang/index.html
@@ -0,0 +1,77 @@
+<!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.1.1">
+<title data-rh="true">Apache Kafka meets Apache Wayang - Part 2 | Apache Wayang (incubating)</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://wayang.apache.org/blog/Apache Kafka meets Apache Wayang"><meta data-rh="true" property="og:locale" content="en"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-r [...]
+<link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache Wayang (incubating) Atom Feed"><link rel="stylesheet" href="/assets/css/styles.ecf70413.css">
+<script src="/assets/js/runtime~main.c6c8cd99.js" defer="defer"></script>
+<script src="/assets/js/main.fa771859.js" defer="defer"></script>
+</head>
+<body class="navigation-with-keyboard">
+<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){try{return new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}}()||function(){try{return localStorage.getItem("theme")}catch(t){}}();t(null!==e?e:"light")}(),function(){try{const a=new URLSearchParams(window.location.search).entries();for(var[t,e]of a)if(t.startsWith("docusaurus-data-")){var n=t.replace("docusaurus-data-","data-");document.documentElement.se [...]
+We look into the “Read- and Write-Path” for our data items, called <em>DataQuanta</em>.</p>
+<h2 class="anchor anchorWithStickyNavbar_LWe7" id="apache-wayangs-read--write-path-for-kafka-topics">Apache Wayang’s Read & Write Path for Kafka topics<a href="#apache-wayangs-read--write-path-for-kafka-topics" class="hash-link" aria-label="Direct link to Apache Wayang’s Read & Write Path for Kafka topics" title="Direct link to Apache Wayang’s Read & Write Path for Kafka topics"></a></h2>
+<p>To describe the read and write paths for data in the context of the created Apache Wayang code snippet, the primary classes and interfaces we need to understand are as follows:</p>
+<p><strong>WayangContext:</strong> This class is essential for initializing the Wayang processing environment.
+It allows you to configure the execution environment and register plugins that define which platforms Wayang can use for data processing tasks, such as <em>Java.basicPlugin()</em> for local Java execution.</p>
+<p><strong>JavaPlanBuilder:</strong> This class is used to build and define the data processing pipeline (or plan) in Wayang.
+It provides a fluent API to specify the operations to be performed on the data, from reading the input to processing it and writing the output.</p>
+<h3 class="anchor anchorWithStickyNavbar_LWe7" id="read-path">Read Path<a href="#read-path" class="hash-link" aria-label="Direct link to Read Path" title="Direct link to Read Path"></a></h3>
+<p>The read path describes how data is ingested from a source into the Wayang processing pipeline:</p>
+<p><em>Reading from Kafka Topic:</em> The method <em>readKafkaTopic(topicName)</em> is used to ingest data from a specified Kafka topic.
+This is the starting point of the data processing pipeline, where topicName represents the name of the Kafka topic from which data is read.</p>
+<p><em>Data Tokenization and Preparation:</em> Once the data is read from Kafka, it undergoes several transformations such as Splitting, Filtering, and Mapping.
+What follows are the procedures known as Reducing, Grouping, Co-Grouping, and Counting.</p>
+<h3 class="anchor anchorWithStickyNavbar_LWe7" id="write-path">Write Path<a href="#write-path" class="hash-link" aria-label="Direct link to Write Path" title="Direct link to Write Path"></a></h3>
+<p><em>Writing to Kafka Topic:</em> The final step in the pipeline involves writing the processed data back to a Kafka topic using <em>.writeKafkaTopic(...)</em>.
+This method takes parameters that specify the target Kafka topic, a serialization function to format the data as strings, and additional configuration for load profile estimation, which optimizes the writing process.</p>
+<p>This read-write path provides a comprehensive flow of data from ingestion from Kafka, through various processing steps, and finally back to Kafka, showcasing a full cycle of data processing within Apache Wayang's abstracted environment and is implemented in our example program shown in <em>listing 1</em>.</p>
+<h2 class="anchor anchorWithStickyNavbar_LWe7" id="implementation-of-input--and-output-operators">Implementation of Input- and Output Operators<a href="#implementation-of-input--and-output-operators" class="hash-link" aria-label="Direct link to Implementation of Input- and Output Operators" title="Direct link to Implementation of Input- and Output Operators"></a></h2>
+<p>The next section shows how a new pair of operators can be implemented to extend Apache Wayang’s capabilities on the input and output side.
+We created the Kafka Source and Kafka Sink components so that our cross organizational data collaboration scenario can be implemented using data streaming infrastructure.</p>
+<p><strong>Level 1 – Wayang execution plan with abstract operators</strong></p>
+<p>The implementation of our Kafka Source and Kafka Sink components for Apache Wayang requires new methods and classes on three layers.
+First of all in the API package.
+Here we use the JavaPlanBuilder to expose the function for selecting a Kafka topic as the source to be used by client.<br>
+<!-- -->The class <em>JavaPlanBuilder</em> in package <em>org.apache.wayang.api</em> in the project <em>wayang-api/wayang-api-scala-java</em> exposes our new functionality to our external client.
+An instance of the JavaPlanBuilder is used to define the data processing pipeline.
+We use its <em>readKafkaTopic()</em> which specifies the source Kafka topic to read from, and for the write path we use the <em>writeKafkaTopic()</em> method.
+Both Methods do only trigger activities in the background.</p>
+<p>For the output side, we use the <em>DataQuantaBuilder</em> class, which offers an implementation of the writeKafkaTopic function.
+This function is designed to send processed data, referred to as DataQuanta, to a specified Kafka topic.
+Essentially, it marks the final step in a data processing sequence constructed using the Apache Wayang framework.</p>
+<p>In the DataQuanta class we implemented the methods writeKafkaTopic and writeKafkaTopicJava which use the KafkaTopicSink class.
+In this API layer we use the Scala programming language, but we utilize the Java classes, implemented in the layer below.</p>
+<p><strong>Level 2 – Wiring between Platform Abstraction and Implementation</strong></p>
+<p>The second layer builds the bridge between the WayangContext and PlanBuilders which work together with DataQuanta and the DataQuantaBuilder.</p>
+<p>Also, the mapping between the abstract components and the specific implementations are defined in this layer.</p>
+<p>Therefore, the mappings package has a class <em>Mappings</em> in which all relevant input and output operators are listed.
+We use it to register the KafkaSourceMapping and a KafkaSinkMapping for the particular platform, Java in our case.
+These classes allow the Apache Wayang framework to use the Java implementation of the KafkaTopicSource component (and KafkaTopicSink respectively).
+While the Wayang execution plan uses the higher abstractions, here on the “platform level” we have to link the specific implementation for the target platform.
+In our case this leads to a Java program running on a JVM which is set up by the Apache Wayang framework using the logical components of the execution plan.</p>
+<p>Those mappings link the real implementation of our operators the ones used in an execution plan.
+The JavaKafkaTopicSource and the JavaKafkaTopicSink extend the KafkaTopicSource and KafkaTopicSink so that the lower level implementation of those classes become available within Wayang’s Java Platform context.</p>
+<p>In this layer, the KafkaConsumer class and the KafkaProducer class are used, but both are configured and instantiated in the next layer underneath.
+All this is done in the project <em>wayang-plarforms/wayang-java</em>.</p>
+<p><strong>Layer 3 – Input/Output Connector Layer</strong></p>
+<p>The <em>KafkaTopicSource</em> and <em>KafkaTopicSink</em> classes build the third layer of our implementation.
+Both are implemented in Java programming language.
+In this layer, the real Kafka-Client logic is defined.
+Details about consumer and producers, client configuration, and schema handling have to be handled here.</p>
+<h2 class="anchor anchorWithStickyNavbar_LWe7" id="summary">Summary<a href="#summary" class="hash-link" aria-label="Direct link to Summary" title="Direct link to Summary"></a></h2>
+<p>Both classes in the third layer implement the Kafka client logic which is needed by the Wayang-execution plan when external data flows should be established.
+The layer above handles the mapping of the components at startup time.
+All this wiring is needed to keep Wayang open and flexible so that multiple external systems can be used in a variety of combinations and using multiple target platforms in combinations.</p>
+<h2 class="anchor anchorWithStickyNavbar_LWe7" id="outlook">Outlook<a href="#outlook" class="hash-link" aria-label="Direct link to Outlook" title="Direct link to Outlook"></a></h2>
+<p>The next part of the article series will cover the creation of an Kafka Source and Sink component for the Apache Spark platform, which allows our use case to scale.
+Finally, in part four we bring all puzzles together, and show the full implementation of the multi organizational data collaboration use case.</p></div><footer class="row docusaurus-mt-lg blogPostFooterDetailsFull_mRVl"><div class="col"><b>Tags:</b><ul class="tags_jXut padding--none margin-left--sm"><li class="tag_QGVx"><a class="tag_zVej tagRegular_sFm0" href="/blog/tags/wayang">wayang</a></li><li class="tag_QGVx"><a class="tag_zVej tagRegular_sFm0" href="/blog/tags/kafka">kafka</a></li [...]
+ <p> Apache Wayang is an effort undergoing incubation at The Apache Software Foundation (ASF), sponsored by the Apache Incubator. Incubation is required of all newly accepted projects until a further review indicates that the infrastructure, communications, and decision making process have stabilized in a manner consistent with other successful ASF projects. While incubation status is not necessarily a reflection of the completeness or stability of the code, it does indicate that th [...]
+ <p>
+ Copyright © 2024 The Apache Software Foundation, Licensed under the Apache License, Version 2.0. <br>
+ Apache, the names of Apache projects, and the feather logo are either registered trademarks or trademarks of the Apache Software Foundation in the United States and/or other countries.
+ </p>
+ </div></div></div></div></footer></div>
+</body>
+</html>
\ No newline at end of file
diff --git a/blog/archive/index.html b/blog/archive/index.html
index ec0852ba..8745ef00 100644
--- a/blog/archive/index.html
+++ b/blog/archive/index.html
@@ -5,11 +5,11 @@
<meta name="generator" content="Docusaurus v3.1.1">
<title data-rh="true">Archive | Apache Wayang (incubating)</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://wayang.apache.org/blog/archive"><meta data-rh="true" property="og:locale" content="en"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docusaurus_tag" content="default"><meta data [...]
<link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache Wayang (incubating) Atom Feed"><link rel="stylesheet" href="/assets/css/styles.ecf70413.css">
-<script src="/assets/js/runtime~main.c0fb4924.js" defer="defer"></script>
-<script src="/assets/js/main.bb71bd6f.js" defer="defer"></script>
+<script src="/assets/js/runtime~main.c6c8cd99.js" defer="defer"></script>
+<script src="/assets/js/main.fa771859.js" defer="defer"></script>
</head>
<body class="navigation-with-keyboard">
-<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){try{return new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}}()||function(){try{return localStorage.getItem("theme")}catch(t){}}();t(null!==e?e:"light")}(),function(){try{const a=new URLSearchParams(window.location.search).entries();for(var[t,e]of a)if(t.startsWith("docusaurus-data-")){var n=t.replace("docusaurus-data-","data-");document.documentElement.se [...]
+<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){try{return new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}}()||function(){try{return localStorage.getItem("theme")}catch(t){}}();t(null!==e?e:"light")}(),function(){try{const a=new URLSearchParams(window.location.search).entries();for(var[t,e]of a)if(t.startsWith("docusaurus-data-")){var n=t.replace("docusaurus-data-","data-");document.documentElement.se [...]
<p> Apache Wayang is an effort undergoing incubation at The Apache Software Foundation (ASF), sponsored by the Apache Incubator. Incubation is required of all newly accepted projects until a further review indicates that the infrastructure, communications, and decision making process have stabilized in a manner consistent with other successful ASF projects. While incubation status is not necessarily a reflection of the completeness or stability of the code, it does indicate that th [...]
<p>
Copyright © 2024 The Apache Software Foundation, Licensed under the Apache License, Version 2.0. <br>
diff --git a/blog/atom.xml b/blog/atom.xml
index 4bd123e1..dfdbc0a4 100644
--- a/blog/atom.xml
+++ b/blog/atom.xml
@@ -2,11 +2,155 @@
<feed xmlns="http://www.w3.org/2005/Atom">
<id>https://wayang.apache.org/blog</id>
<title>Apache Wayang (incubating) Blog</title>
- <updated>2024-01-25T00:00:00.000Z</updated>
+ <updated>2024-03-06T09:50:00.000Z</updated>
<generator>https://github.com/jpmonette/feed</generator>
<link rel="alternate" href="https://wayang.apache.org/blog"/>
<subtitle>Apache Wayang (incubating) Blog</subtitle>
<icon>https://wayang.apache.org/img/wayang-logo.jpg</icon>
+ <entry>
+ <title type="html"><![CDATA[Apache Kafka meets Apache Wayang - Part 1]]></title>
+ <id>https://wayang.apache.org/blog/Apache Kafka meets Apache Wayang</id>
+ <link href="https://wayang.apache.org/blog/Apache Kafka meets Apache Wayang"/>
+ <updated>2024-03-06T09:50:00.000Z</updated>
+ <summary type="html"><![CDATA[Intro]]></summary>
+ <content type="html"><![CDATA[<p>In the second part of the article series we describe the implementation of the Kafka Source and Kafka Sink component for Apache Wayang.
+We look into the “Read- and Write-Path” for our data items, called <em>DataQuanta</em>.</p>
+<h2 class="anchor anchorWithStickyNavbar_LWe7" id="apache-wayangs-read--write-path-for-kafka-topics">Apache Wayang’s Read & Write Path for Kafka topics<a href="https://wayang.apache.org/blog/Apache%20Kafka%20meets%20Apache%20Wayang#apache-wayangs-read--write-path-for-kafka-topics" class="hash-link" aria-label="Direct link to Apache Wayang’s Read & Write Path for Kafka topics" title="Direct link to Apache Wayang’s Read & Write Path for Kafka topics"></a></h2>
+<p>To describe the read and write paths for data in the context of the created Apache Wayang code snippet, the primary classes and interfaces we need to understand are as follows:</p>
+<p><strong>WayangContext:</strong> This class is essential for initializing the Wayang processing environment.
+It allows you to configure the execution environment and register plugins that define which platforms Wayang can use for data processing tasks, such as <em>Java.basicPlugin()</em> for local Java execution.</p>
+<p><strong>JavaPlanBuilder:</strong> This class is used to build and define the data processing pipeline (or plan) in Wayang.
+It provides a fluent API to specify the operations to be performed on the data, from reading the input to processing it and writing the output.</p>
+<h3 class="anchor anchorWithStickyNavbar_LWe7" id="read-path">Read Path<a href="https://wayang.apache.org/blog/Apache%20Kafka%20meets%20Apache%20Wayang#read-path" class="hash-link" aria-label="Direct link to Read Path" title="Direct link to Read Path"></a></h3>
+<p>The read path describes how data is ingested from a source into the Wayang processing pipeline:</p>
+<p><em>Reading from Kafka Topic:</em> The method <em>readKafkaTopic(topicName)</em> is used to ingest data from a specified Kafka topic.
+This is the starting point of the data processing pipeline, where topicName represents the name of the Kafka topic from which data is read.</p>
+<p><em>Data Tokenization and Preparation:</em> Once the data is read from Kafka, it undergoes several transformations such as Splitting, Filtering, and Mapping.
+What follows are the procedures known as Reducing, Grouping, Co-Grouping, and Counting.</p>
+<h3 class="anchor anchorWithStickyNavbar_LWe7" id="write-path">Write Path<a href="https://wayang.apache.org/blog/Apache%20Kafka%20meets%20Apache%20Wayang#write-path" class="hash-link" aria-label="Direct link to Write Path" title="Direct link to Write Path"></a></h3>
+<p><em>Writing to Kafka Topic:</em> The final step in the pipeline involves writing the processed data back to a Kafka topic using <em>.writeKafkaTopic(...)</em>.
+This method takes parameters that specify the target Kafka topic, a serialization function to format the data as strings, and additional configuration for load profile estimation, which optimizes the writing process.</p>
+<p>This read-write path provides a comprehensive flow of data from ingestion from Kafka, through various processing steps, and finally back to Kafka, showcasing a full cycle of data processing within Apache Wayang's abstracted environment and is implemented in our example program shown in <em>listing 1</em>.</p>
+<h2 class="anchor anchorWithStickyNavbar_LWe7" id="implementation-of-input--and-output-operators">Implementation of Input- and Output Operators<a href="https://wayang.apache.org/blog/Apache%20Kafka%20meets%20Apache%20Wayang#implementation-of-input--and-output-operators" class="hash-link" aria-label="Direct link to Implementation of Input- and Output Operators" title="Direct link to Implementation of Input- and Output Operators"></a></h2>
+<p>The next section shows how a new pair of operators can be implemented to extend Apache Wayang’s capabilities on the input and output side.
+We created the Kafka Source and Kafka Sink components so that our cross organizational data collaboration scenario can be implemented using data streaming infrastructure.</p>
+<p><strong>Level 1 – Wayang execution plan with abstract operators</strong></p>
+<p>The implementation of our Kafka Source and Kafka Sink components for Apache Wayang requires new methods and classes on three layers.
+First of all in the API package.
+Here we use the JavaPlanBuilder to expose the function for selecting a Kafka topic as the source to be used by client.<br>
+<!-- -->The class <em>JavaPlanBuilder</em> in package <em>org.apache.wayang.api</em> in the project <em>wayang-api/wayang-api-scala-java</em> exposes our new functionality to our external client.
+An instance of the JavaPlanBuilder is used to define the data processing pipeline.
+We use its <em>readKafkaTopic()</em> which specifies the source Kafka topic to read from, and for the write path we use the <em>writeKafkaTopic()</em> method.
+Both Methods do only trigger activities in the background.</p>
+<p>For the output side, we use the <em>DataQuantaBuilder</em> class, which offers an implementation of the writeKafkaTopic function.
+This function is designed to send processed data, referred to as DataQuanta, to a specified Kafka topic.
+Essentially, it marks the final step in a data processing sequence constructed using the Apache Wayang framework.</p>
+<p>In the DataQuanta class we implemented the methods writeKafkaTopic and writeKafkaTopicJava which use the KafkaTopicSink class.
+In this API layer we use the Scala programming language, but we utilize the Java classes, implemented in the layer below.</p>
+<p><strong>Level 2 – Wiring between Platform Abstraction and Implementation</strong></p>
+<p>The second layer builds the bridge between the WayangContext and PlanBuilders which work together with DataQuanta and the DataQuantaBuilder.</p>
+<p>Also, the mapping between the abstract components and the specific implementations are defined in this layer.</p>
+<p>Therefore, the mappings package has a class <em>Mappings</em> in which all relevant input and output operators are listed.
+We use it to register the KafkaSourceMapping and a KafkaSinkMapping for the particular platform, Java in our case.
+These classes allow the Apache Wayang framework to use the Java implementation of the KafkaTopicSource component (and KafkaTopicSink respectively).
+While the Wayang execution plan uses the higher abstractions, here on the “platform level” we have to link the specific implementation for the target platform.
+In our case this leads to a Java program running on a JVM which is set up by the Apache Wayang framework using the logical components of the execution plan.</p>
+<p>Those mappings link the real implementation of our operators the ones used in an execution plan.
+The JavaKafkaTopicSource and the JavaKafkaTopicSink extend the KafkaTopicSource and KafkaTopicSink so that the lower level implementation of those classes become available within Wayang’s Java Platform context.</p>
+<p>In this layer, the KafkaConsumer class and the KafkaProducer class are used, but both are configured and instantiated in the next layer underneath.
+All this is done in the project <em>wayang-plarforms/wayang-java</em>.</p>
+<p><strong>Layer 3 – Input/Output Connector Layer</strong></p>
+<p>The <em>KafkaTopicSource</em> and <em>KafkaTopicSink</em> classes build the third layer of our implementation.
+Both are implemented in Java programming language.
+In this layer, the real Kafka-Client logic is defined.
+Details about consumer and producers, client configuration, and schema handling have to be handled here.</p>
+<h2 class="anchor anchorWithStickyNavbar_LWe7" id="summary">Summary<a href="https://wayang.apache.org/blog/Apache%20Kafka%20meets%20Apache%20Wayang#summary" class="hash-link" aria-label="Direct link to Summary" title="Direct link to Summary"></a></h2>
+<p>Both classes in the third layer implement the Kafka client logic which is needed by the Wayang-execution plan when external data flows should be established.
+The layer above handles the mapping of the components at startup time.
+All this wiring is needed to keep Wayang open and flexible so that multiple external systems can be used in a variety of combinations and using multiple target platforms in combinations.</p>
+<h2 class="anchor anchorWithStickyNavbar_LWe7" id="outlook">Outlook<a href="https://wayang.apache.org/blog/Apache%20Kafka%20meets%20Apache%20Wayang#outlook" class="hash-link" aria-label="Direct link to Outlook" title="Direct link to Outlook"></a></h2>
+<p>The next part of the article series will cover the creation of an Kafka Source and Sink component for the Apache Spark platform, which allows our use case to scale.
+Finally, in part four we bring all puzzles together, and show the full implementation of the multi organizational data collaboration use case.</p>]]></content>
+ <author>
+ <name>Mirko Kämpf</name>
+ <uri>https://github.com/kamir</uri>
+ </author>
+ <category label="wayang" term="wayang"/>
+ <category label="kafka" term="kafka"/>
+ <category label="cross organization data collaboration" term="cross organization data collaboration"/>
+ </entry>
+ <entry>
+ <title type="html"><![CDATA[Apache Kafka meets Apache Wayang - Part 2]]></title>
+ <id>https://wayang.apache.org/blog/Apache Kafka meets Apache Wayang</id>
+ <link href="https://wayang.apache.org/blog/Apache Kafka meets Apache Wayang"/>
+ <updated>2024-03-06T09:50:00.000Z</updated>
+ <summary type="html"><![CDATA[In the second part of the article series we describe the implementation of the Kafka Source and Kafka Sink component for Apache Wayang.]]></summary>
+ <content type="html"><![CDATA[<p>In the second part of the article series we describe the implementation of the Kafka Source and Kafka Sink component for Apache Wayang.
+We look into the “Read- and Write-Path” for our data items, called <em>DataQuanta</em>.</p>
+<h2 class="anchor anchorWithStickyNavbar_LWe7" id="apache-wayangs-read--write-path-for-kafka-topics">Apache Wayang’s Read & Write Path for Kafka topics<a href="https://wayang.apache.org/blog/Apache%20Kafka%20meets%20Apache%20Wayang#apache-wayangs-read--write-path-for-kafka-topics" class="hash-link" aria-label="Direct link to Apache Wayang’s Read & Write Path for Kafka topics" title="Direct link to Apache Wayang’s Read & Write Path for Kafka topics"></a></h2>
+<p>To describe the read and write paths for data in the context of the created Apache Wayang code snippet, the primary classes and interfaces we need to understand are as follows:</p>
+<p><strong>WayangContext:</strong> This class is essential for initializing the Wayang processing environment.
+It allows you to configure the execution environment and register plugins that define which platforms Wayang can use for data processing tasks, such as <em>Java.basicPlugin()</em> for local Java execution.</p>
+<p><strong>JavaPlanBuilder:</strong> This class is used to build and define the data processing pipeline (or plan) in Wayang.
+It provides a fluent API to specify the operations to be performed on the data, from reading the input to processing it and writing the output.</p>
+<h3 class="anchor anchorWithStickyNavbar_LWe7" id="read-path">Read Path<a href="https://wayang.apache.org/blog/Apache%20Kafka%20meets%20Apache%20Wayang#read-path" class="hash-link" aria-label="Direct link to Read Path" title="Direct link to Read Path"></a></h3>
+<p>The read path describes how data is ingested from a source into the Wayang processing pipeline:</p>
+<p><em>Reading from Kafka Topic:</em> The method <em>readKafkaTopic(topicName)</em> is used to ingest data from a specified Kafka topic.
+This is the starting point of the data processing pipeline, where topicName represents the name of the Kafka topic from which data is read.</p>
+<p><em>Data Tokenization and Preparation:</em> Once the data is read from Kafka, it undergoes several transformations such as Splitting, Filtering, and Mapping.
+What follows are the procedures known as Reducing, Grouping, Co-Grouping, and Counting.</p>
+<h3 class="anchor anchorWithStickyNavbar_LWe7" id="write-path">Write Path<a href="https://wayang.apache.org/blog/Apache%20Kafka%20meets%20Apache%20Wayang#write-path" class="hash-link" aria-label="Direct link to Write Path" title="Direct link to Write Path"></a></h3>
+<p><em>Writing to Kafka Topic:</em> The final step in the pipeline involves writing the processed data back to a Kafka topic using <em>.writeKafkaTopic(...)</em>.
+This method takes parameters that specify the target Kafka topic, a serialization function to format the data as strings, and additional configuration for load profile estimation, which optimizes the writing process.</p>
+<p>This read-write path provides a comprehensive flow of data from ingestion from Kafka, through various processing steps, and finally back to Kafka, showcasing a full cycle of data processing within Apache Wayang's abstracted environment and is implemented in our example program shown in <em>listing 1</em>.</p>
+<h2 class="anchor anchorWithStickyNavbar_LWe7" id="implementation-of-input--and-output-operators">Implementation of Input- and Output Operators<a href="https://wayang.apache.org/blog/Apache%20Kafka%20meets%20Apache%20Wayang#implementation-of-input--and-output-operators" class="hash-link" aria-label="Direct link to Implementation of Input- and Output Operators" title="Direct link to Implementation of Input- and Output Operators"></a></h2>
+<p>The next section shows how a new pair of operators can be implemented to extend Apache Wayang’s capabilities on the input and output side.
+We created the Kafka Source and Kafka Sink components so that our cross organizational data collaboration scenario can be implemented using data streaming infrastructure.</p>
+<p><strong>Level 1 – Wayang execution plan with abstract operators</strong></p>
+<p>The implementation of our Kafka Source and Kafka Sink components for Apache Wayang requires new methods and classes on three layers.
+First of all in the API package.
+Here we use the JavaPlanBuilder to expose the function for selecting a Kafka topic as the source to be used by client.<br>
+<!-- -->The class <em>JavaPlanBuilder</em> in package <em>org.apache.wayang.api</em> in the project <em>wayang-api/wayang-api-scala-java</em> exposes our new functionality to our external client.
+An instance of the JavaPlanBuilder is used to define the data processing pipeline.
+We use its <em>readKafkaTopic()</em> which specifies the source Kafka topic to read from, and for the write path we use the <em>writeKafkaTopic()</em> method.
+Both Methods do only trigger activities in the background.</p>
+<p>For the output side, we use the <em>DataQuantaBuilder</em> class, which offers an implementation of the writeKafkaTopic function.
+This function is designed to send processed data, referred to as DataQuanta, to a specified Kafka topic.
+Essentially, it marks the final step in a data processing sequence constructed using the Apache Wayang framework.</p>
+<p>In the DataQuanta class we implemented the methods writeKafkaTopic and writeKafkaTopicJava which use the KafkaTopicSink class.
+In this API layer we use the Scala programming language, but we utilize the Java classes, implemented in the layer below.</p>
+<p><strong>Level 2 – Wiring between Platform Abstraction and Implementation</strong></p>
+<p>The second layer builds the bridge between the WayangContext and PlanBuilders which work together with DataQuanta and the DataQuantaBuilder.</p>
+<p>Also, the mapping between the abstract components and the specific implementations are defined in this layer.</p>
+<p>Therefore, the mappings package has a class <em>Mappings</em> in which all relevant input and output operators are listed.
+We use it to register the KafkaSourceMapping and a KafkaSinkMapping for the particular platform, Java in our case.
+These classes allow the Apache Wayang framework to use the Java implementation of the KafkaTopicSource component (and KafkaTopicSink respectively).
+While the Wayang execution plan uses the higher abstractions, here on the “platform level” we have to link the specific implementation for the target platform.
+In our case this leads to a Java program running on a JVM which is set up by the Apache Wayang framework using the logical components of the execution plan.</p>
+<p>Those mappings link the real implementation of our operators the ones used in an execution plan.
+The JavaKafkaTopicSource and the JavaKafkaTopicSink extend the KafkaTopicSource and KafkaTopicSink so that the lower level implementation of those classes become available within Wayang’s Java Platform context.</p>
+<p>In this layer, the KafkaConsumer class and the KafkaProducer class are used, but both are configured and instantiated in the next layer underneath.
+All this is done in the project <em>wayang-plarforms/wayang-java</em>.</p>
+<p><strong>Layer 3 – Input/Output Connector Layer</strong></p>
+<p>The <em>KafkaTopicSource</em> and <em>KafkaTopicSink</em> classes build the third layer of our implementation.
+Both are implemented in Java programming language.
+In this layer, the real Kafka-Client logic is defined.
+Details about consumer and producers, client configuration, and schema handling have to be handled here.</p>
+<h2 class="anchor anchorWithStickyNavbar_LWe7" id="summary">Summary<a href="https://wayang.apache.org/blog/Apache%20Kafka%20meets%20Apache%20Wayang#summary" class="hash-link" aria-label="Direct link to Summary" title="Direct link to Summary"></a></h2>
+<p>Both classes in the third layer implement the Kafka client logic which is needed by the Wayang-execution plan when external data flows should be established.
+The layer above handles the mapping of the components at startup time.
+All this wiring is needed to keep Wayang open and flexible so that multiple external systems can be used in a variety of combinations and using multiple target platforms in combinations.</p>
+<h2 class="anchor anchorWithStickyNavbar_LWe7" id="outlook">Outlook<a href="https://wayang.apache.org/blog/Apache%20Kafka%20meets%20Apache%20Wayang#outlook" class="hash-link" aria-label="Direct link to Outlook" title="Direct link to Outlook"></a></h2>
+<p>The next part of the article series will cover the creation of an Kafka Source and Sink component for the Apache Spark platform, which allows our use case to scale.
+Finally, in part four we bring all puzzles together, and show the full implementation of the multi organizational data collaboration use case.</p>]]></content>
+ <author>
+ <name>Mirko Kämpf</name>
+ <uri>https://github.com/kamir</uri>
+ </author>
+ <category label="wayang" term="wayang"/>
+ <category label="kafka" term="kafka"/>
+ <category label="cross organization data collaboration" term="cross organization data collaboration"/>
+ </entry>
<entry>
<title type="html"><![CDATA[Website updated]]></title>
<id>https://wayang.apache.org/blog/website_update</id>
diff --git a/blog/index.html b/blog/index.html
index 746048ad..cc1b294e 100644
--- a/blog/index.html
+++ b/blog/index.html
@@ -5,11 +5,97 @@
<meta name="generator" content="Docusaurus v3.1.1">
<title data-rh="true">Blog | Apache Wayang (incubating)</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://wayang.apache.org/blog"><meta data-rh="true" property="og:locale" content="en"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" p [...]
<link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache Wayang (incubating) Atom Feed"><link rel="stylesheet" href="/assets/css/styles.ecf70413.css">
-<script src="/assets/js/runtime~main.c0fb4924.js" defer="defer"></script>
-<script src="/assets/js/main.bb71bd6f.js" defer="defer"></script>
+<script src="/assets/js/runtime~main.c6c8cd99.js" defer="defer"></script>
+<script src="/assets/js/main.fa771859.js" defer="defer"></script>
</head>
<body class="navigation-with-keyboard">
-<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){try{return new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}}()||function(){try{return localStorage.getItem("theme")}catch(t){}}();t(null!==e?e:"light")}(),function(){try{const a=new URLSearchParams(window.location.search).entries();for(var[t,e]of a)if(t.startsWith("docusaurus-data-")){var n=t.replace("docusaurus-data-","data-");document.documentElement.se [...]
+<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){try{return new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}}()||function(){try{return localStorage.getItem("theme")}catch(t){}}();t(null!==e?e:"light")}(),function(){try{const a=new URLSearchParams(window.location.search).entries();for(var[t,e]of a)if(t.startsWith("docusaurus-data-")){var n=t.replace("docusaurus-data-","data-");document.documentElement.se [...]
+<p>This article is the first of a four part series about federated data analysis using Apache Wayang.
+The first article starts with an introduction of a typical data colaboration scenario which will emerge in our digital future.</p>
+<p>In part two and three we will share a summary of our Apache Kafka client implementation for Apache Wayang.
+We started with the Java Platform (part 2) and the Apache Spark implementation follows (W.I.P.) in part three.</p>
+<p>The use case behind this work is an imaginary data collaboration scenario.
+We see this example and the demand for a solution already in many places.<br>
+<!-- -->For us this is motivation enough to propose a solution.
+This would also allow us to do more local data processing, and businesses can stop moving data around the world, but rather care about data locality while they expose and share specific information to others by using data federation.
+This reduces complexity of data management and cost dramatically.</p>
+<p>For this purpose, we illustrate a cross organizational data sharing scenario from the finance sector soon.
+This analysis pattern will also be relevant in the context of data analysis along supply chains, another typical example where data from many stakeholder together is needed but never managed in one place, for good reasons.</p>
+<p>Data federation can help us to unlock the hidden value of all those isolated data lakes.</p>
+<h2 class="anchor anchorWithStickyNavbar_LWe7" id="a-cross-organizational-data-sharing-scenario">A cross organizational data sharing scenario<a href="#a-cross-organizational-data-sharing-scenario" class="hash-link" aria-label="Direct link to A cross organizational data sharing scenario" title="Direct link to A cross organizational data sharing scenario"></a></h2>
+<p>Our goal is the implementation of a cross organization decentralized data processing scenario, in which protected local data should be processed in combination with public data from public sources in a collaborative manner.
+Instead of copying all data into a central data lake or a central data platform we decided to use federated analytics.
+Apache Wayang is the tool we work with.
+In our case, the public data is hosted on publicly available websites or data pods.
+A client can use the HTTP(S) protocol to read the data which is given in a well defined format.
+For simplicity we decided to use CSV format.
+When we look into the data of each participant we have a different perspective.</p>
+<p>Our processing procedure should calculate a particular metric on the <em>local data</em> of each participant.
+An example of such a metric is the average spending of all users on a particular product category per month.
+This can vary from partner to partner, hence, we want to be able to calculate a peer-group comparison so that each partner can see its own metric compared with a global average calculated from contributions by all partners.
+Such a process requires global averaging and local averaging.
+And due to governance constraints, we can’t bring all raw data together in one place.</p>
+<p>Instead, we want to use Apache Wayang for this purpose.
+We simplify the procedure and split it into two phases.
+Phase one is the process, which allows each participant to calculate the local metrics.
+This requires only local data. The second phase requires data from all collaborating partners.
+The monthly sum and counter values per partner and category are needed in one place by all other parties.
+Hence, the algorithm of the first phase stores the local results locally, and the contributions to the global results in an externally accessible Kafka topic.
+We assume this is done by each of the partners.</p>
+<p>Now we have a scenario, in which an Apache Wayang process must be able to read data from multiple Apache Kafka topics from multiple Apache Kafka clusters but finally writes into a single Kafka topic, which then can be accessed by all the participating clients.</p>
+<p><img decoding="async" loading="lazy" alt="images/image-1.png" src="/assets/images/image-1-9cc35d5aea2b867d7e5759a96bd02334.png" width="904" height="550" class="img_ev3q"></p>
+<p>The illustration shows the data flows in such a scenario.
+Jobs with red border are executed by the participants in isolation within their own data processing environments.
+But they share some of the data, using publicly accessible Kafka topics, marked by A. Job 4 is the Apache Wayang job in our focus: here we intent to read data from 3 different source systems, and write results into a fourth system (marked as B), which can be accesses by all participants again.</p>
+<p>With this in mind we want to implement an Apache Wayang application which implements the illustrated <em>Job 4</em>.
+Since as of today, there is now <em>KafkaSource</em> and <em>KafkaSink</em> available in Apache Wayang, an implementation of both will be our first step.
+Our assumption is, that in the beginning, there won’t be much data.</p>
+<p>Apache Spark is not required to cope with the load, but we expect, that in the future, a single Java application would not be able to handle our workload.
+Hence, we want to utilize the Apache Wayang abstraction over multiple processing platforms, starting with Java.
+Later, we want to switch to Apache Spark.</p></div><footer class="row docusaurus-mt-lg"><div class="col"><b>Tags:</b><ul class="tags_jXut padding--none margin-left--sm"><li class="tag_QGVx"><a class="tag_zVej tagRegular_sFm0" href="/blog/tags/wayang">wayang</a></li><li class="tag_QGVx"><a class="tag_zVej tagRegular_sFm0" href="/blog/tags/kafka">kafka</a></li><li class="tag_QGVx"><a class="tag_zVej tagRegular_sFm0" href="/blog/tags/cross-organization-data-collaboration">cross organization [...]
+<p>This article is the first of a four part series about federated data analysis using Apache Wayang.
+The first article starts with an introduction of a typical data colaboration scenario which will emerge in our digital future.</p>
+<p>In part two and three we will share a summary of our Apache Kafka client implementation for Apache Wayang.
+We started with the Java Platform (part 2) and the Apache Spark implementation follows (W.I.P.) in part three.</p>
+<p>The use case behind this work is an imaginary data collaboration scenario.
+We see this example and the demand for a solution already in many places.<br>
+<!-- -->For us this is motivation enough to propose a solution.
+This would also allow us to do more local data processing, and businesses can stop moving data around the world, but rather care about data locality while they expose and share specific information to others by using data federation.
+This reduces complexity of data management and cost dramatically.</p>
+<p>For this purpose, we illustrate a cross organizational data sharing scenario from the finance sector soon.
+This analysis pattern will also be relevant in the context of data analysis along supply chains, another typical example where data from many stakeholder together is needed but never managed in one place, for good reasons.</p>
+<p>Data federation can help us to unlock the hidden value of all those isolated data lakes.</p>
+<h2 class="anchor anchorWithStickyNavbar_LWe7" id="a-cross-organizational-data-sharing-scenario">A cross organizational data sharing scenario<a href="#a-cross-organizational-data-sharing-scenario" class="hash-link" aria-label="Direct link to A cross organizational data sharing scenario" title="Direct link to A cross organizational data sharing scenario"></a></h2>
+<p>Our goal is the implementation of a cross organization decentralized data processing scenario, in which protected local data should be processed in combination with public data from public sources in a collaborative manner.
+Instead of copying all data into a central data lake or a central data platform we decided to use federated analytics.
+Apache Wayang is the tool we work with.
+In our case, the public data is hosted on publicly available websites or data pods.
+A client can use the HTTP(S) protocol to read the data which is given in a well defined format.
+For simplicity we decided to use CSV format.
+When we look into the data of each participant we have a different perspective.</p>
+<p>Our processing procedure should calculate a particular metric on the <em>local data</em> of each participant.
+An example of such a metric is the average spending of all users on a particular product category per month.
+This can vary from partner to partner, hence, we want to be able to calculate a peer-group comparison so that each partner can see its own metric compared with a global average calculated from contributions by all partners.
+Such a process requires global averaging and local averaging.
+And due to governance constraints, we can’t bring all raw data together in one place.</p>
+<p>Instead, we want to use Apache Wayang for this purpose.
+We simplify the procedure and split it into two phases.
+Phase one is the process, which allows each participant to calculate the local metrics.
+This requires only local data. The second phase requires data from all collaborating partners.
+The monthly sum and counter values per partner and category are needed in one place by all other parties.
+Hence, the algorithm of the first phase stores the local results locally, and the contributions to the global results in an externally accessible Kafka topic.
+We assume this is done by each of the partners.</p>
+<p>Now we have a scenario, in which an Apache Wayang process must be able to read data from multiple Apache Kafka topics from multiple Apache Kafka clusters but finally writes into a single Kafka topic, which then can be accessed by all the participating clients.</p>
+<p><img decoding="async" loading="lazy" alt="images/image-1.png" src="/assets/images/image-1-9cc35d5aea2b867d7e5759a96bd02334.png" width="904" height="550" class="img_ev3q"></p>
+<p>The illustration shows the data flows in such a scenario.
+Jobs with red border are executed by the participants in isolation within their own data processing environments.
+But they share some of the data, using publicly accessible Kafka topics, marked by A. Job 4 is the Apache Wayang job in our focus: here we intent to read data from 3 different source systems, and write results into a fourth system (marked as B), which can be accesses by all participants again.</p>
+<p>With this in mind we want to implement an Apache Wayang application which implements the illustrated <em>Job 4</em>.
+Since as of today, there is now <em>KafkaSource</em> and <em>KafkaSink</em> available in Apache Wayang, an implementation of both will be our first step.
+Our assumption is, that in the beginning, there won’t be much data.</p>
+<p>Apache Spark is not required to cope with the load, but we expect, that in the future, a single Java application would not be able to handle our workload.
+Hence, we want to utilize the Apache Wayang abstraction over multiple processing platforms, starting with Java.
+Later, we want to switch to Apache Spark.</p></div><footer class="row docusaurus-mt-lg"><div class="col"><b>Tags:</b><ul class="tags_jXut padding--none margin-left--sm"><li class="tag_QGVx"><a class="tag_zVej tagRegular_sFm0" href="/blog/tags/wayang">wayang</a></li><li class="tag_QGVx"><a class="tag_zVej tagRegular_sFm0" href="/blog/tags/kafka">kafka</a></li><li class="tag_QGVx"><a class="tag_zVej tagRegular_sFm0" href="/blog/tags/cross-organization-data-collaboration">cross organization [...]
<p> Apache Wayang is an effort undergoing incubation at The Apache Software Foundation (ASF), sponsored by the Apache Incubator. Incubation is required of all newly accepted projects until a further review indicates that the infrastructure, communications, and decision making process have stabilized in a manner consistent with other successful ASF projects. While incubation status is not necessarily a reflection of the completeness or stability of the code, it does indicate that th [...]
<p>
Copyright © 2024 The Apache Software Foundation, Licensed under the Apache License, Version 2.0. <br>
diff --git a/blog/rss.xml b/blog/rss.xml
index ea433a13..246533f4 100644
--- a/blog/rss.xml
+++ b/blog/rss.xml
@@ -4,10 +4,146 @@
<title>Apache Wayang (incubating) Blog</title>
<link>https://wayang.apache.org/blog</link>
<description>Apache Wayang (incubating) Blog</description>
- <lastBuildDate>Thu, 25 Jan 2024 00:00:00 GMT</lastBuildDate>
+ <lastBuildDate>Wed, 06 Mar 2024 09:50: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[Apache Kafka meets Apache Wayang - Part 1]]></title>
+ <link>https://wayang.apache.org/blog/Apache Kafka meets Apache Wayang</link>
+ <guid>https://wayang.apache.org/blog/Apache Kafka meets Apache Wayang</guid>
+ <pubDate>Wed, 06 Mar 2024 09:50:00 GMT</pubDate>
+ <description><![CDATA[Intro]]></description>
+ <content:encoded><![CDATA[<p>In the second part of the article series we describe the implementation of the Kafka Source and Kafka Sink component for Apache Wayang.
+We look into the “Read- and Write-Path” for our data items, called <em>DataQuanta</em>.</p>
+<h2 class="anchor anchorWithStickyNavbar_LWe7" id="apache-wayangs-read--write-path-for-kafka-topics">Apache Wayang’s Read & Write Path for Kafka topics<a href="https://wayang.apache.org/blog/Apache%20Kafka%20meets%20Apache%20Wayang#apache-wayangs-read--write-path-for-kafka-topics" class="hash-link" aria-label="Direct link to Apache Wayang’s Read & Write Path for Kafka topics" title="Direct link to Apache Wayang’s Read & Write Path for Kafka topics"></a></h2>
+<p>To describe the read and write paths for data in the context of the created Apache Wayang code snippet, the primary classes and interfaces we need to understand are as follows:</p>
+<p><strong>WayangContext:</strong> This class is essential for initializing the Wayang processing environment.
+It allows you to configure the execution environment and register plugins that define which platforms Wayang can use for data processing tasks, such as <em>Java.basicPlugin()</em> for local Java execution.</p>
+<p><strong>JavaPlanBuilder:</strong> This class is used to build and define the data processing pipeline (or plan) in Wayang.
+It provides a fluent API to specify the operations to be performed on the data, from reading the input to processing it and writing the output.</p>
+<h3 class="anchor anchorWithStickyNavbar_LWe7" id="read-path">Read Path<a href="https://wayang.apache.org/blog/Apache%20Kafka%20meets%20Apache%20Wayang#read-path" class="hash-link" aria-label="Direct link to Read Path" title="Direct link to Read Path"></a></h3>
+<p>The read path describes how data is ingested from a source into the Wayang processing pipeline:</p>
+<p><em>Reading from Kafka Topic:</em> The method <em>readKafkaTopic(topicName)</em> is used to ingest data from a specified Kafka topic.
+This is the starting point of the data processing pipeline, where topicName represents the name of the Kafka topic from which data is read.</p>
+<p><em>Data Tokenization and Preparation:</em> Once the data is read from Kafka, it undergoes several transformations such as Splitting, Filtering, and Mapping.
+What follows are the procedures known as Reducing, Grouping, Co-Grouping, and Counting.</p>
+<h3 class="anchor anchorWithStickyNavbar_LWe7" id="write-path">Write Path<a href="https://wayang.apache.org/blog/Apache%20Kafka%20meets%20Apache%20Wayang#write-path" class="hash-link" aria-label="Direct link to Write Path" title="Direct link to Write Path"></a></h3>
+<p><em>Writing to Kafka Topic:</em> The final step in the pipeline involves writing the processed data back to a Kafka topic using <em>.writeKafkaTopic(...)</em>.
+This method takes parameters that specify the target Kafka topic, a serialization function to format the data as strings, and additional configuration for load profile estimation, which optimizes the writing process.</p>
+<p>This read-write path provides a comprehensive flow of data from ingestion from Kafka, through various processing steps, and finally back to Kafka, showcasing a full cycle of data processing within Apache Wayang's abstracted environment and is implemented in our example program shown in <em>listing 1</em>.</p>
+<h2 class="anchor anchorWithStickyNavbar_LWe7" id="implementation-of-input--and-output-operators">Implementation of Input- and Output Operators<a href="https://wayang.apache.org/blog/Apache%20Kafka%20meets%20Apache%20Wayang#implementation-of-input--and-output-operators" class="hash-link" aria-label="Direct link to Implementation of Input- and Output Operators" title="Direct link to Implementation of Input- and Output Operators"></a></h2>
+<p>The next section shows how a new pair of operators can be implemented to extend Apache Wayang’s capabilities on the input and output side.
+We created the Kafka Source and Kafka Sink components so that our cross organizational data collaboration scenario can be implemented using data streaming infrastructure.</p>
+<p><strong>Level 1 – Wayang execution plan with abstract operators</strong></p>
+<p>The implementation of our Kafka Source and Kafka Sink components for Apache Wayang requires new methods and classes on three layers.
+First of all in the API package.
+Here we use the JavaPlanBuilder to expose the function for selecting a Kafka topic as the source to be used by client.<br>
+<!-- -->The class <em>JavaPlanBuilder</em> in package <em>org.apache.wayang.api</em> in the project <em>wayang-api/wayang-api-scala-java</em> exposes our new functionality to our external client.
+An instance of the JavaPlanBuilder is used to define the data processing pipeline.
+We use its <em>readKafkaTopic()</em> which specifies the source Kafka topic to read from, and for the write path we use the <em>writeKafkaTopic()</em> method.
+Both Methods do only trigger activities in the background.</p>
+<p>For the output side, we use the <em>DataQuantaBuilder</em> class, which offers an implementation of the writeKafkaTopic function.
+This function is designed to send processed data, referred to as DataQuanta, to a specified Kafka topic.
+Essentially, it marks the final step in a data processing sequence constructed using the Apache Wayang framework.</p>
+<p>In the DataQuanta class we implemented the methods writeKafkaTopic and writeKafkaTopicJava which use the KafkaTopicSink class.
+In this API layer we use the Scala programming language, but we utilize the Java classes, implemented in the layer below.</p>
+<p><strong>Level 2 – Wiring between Platform Abstraction and Implementation</strong></p>
+<p>The second layer builds the bridge between the WayangContext and PlanBuilders which work together with DataQuanta and the DataQuantaBuilder.</p>
+<p>Also, the mapping between the abstract components and the specific implementations are defined in this layer.</p>
+<p>Therefore, the mappings package has a class <em>Mappings</em> in which all relevant input and output operators are listed.
+We use it to register the KafkaSourceMapping and a KafkaSinkMapping for the particular platform, Java in our case.
+These classes allow the Apache Wayang framework to use the Java implementation of the KafkaTopicSource component (and KafkaTopicSink respectively).
+While the Wayang execution plan uses the higher abstractions, here on the “platform level” we have to link the specific implementation for the target platform.
+In our case this leads to a Java program running on a JVM which is set up by the Apache Wayang framework using the logical components of the execution plan.</p>
+<p>Those mappings link the real implementation of our operators the ones used in an execution plan.
+The JavaKafkaTopicSource and the JavaKafkaTopicSink extend the KafkaTopicSource and KafkaTopicSink so that the lower level implementation of those classes become available within Wayang’s Java Platform context.</p>
+<p>In this layer, the KafkaConsumer class and the KafkaProducer class are used, but both are configured and instantiated in the next layer underneath.
+All this is done in the project <em>wayang-plarforms/wayang-java</em>.</p>
+<p><strong>Layer 3 – Input/Output Connector Layer</strong></p>
+<p>The <em>KafkaTopicSource</em> and <em>KafkaTopicSink</em> classes build the third layer of our implementation.
+Both are implemented in Java programming language.
+In this layer, the real Kafka-Client logic is defined.
+Details about consumer and producers, client configuration, and schema handling have to be handled here.</p>
+<h2 class="anchor anchorWithStickyNavbar_LWe7" id="summary">Summary<a href="https://wayang.apache.org/blog/Apache%20Kafka%20meets%20Apache%20Wayang#summary" class="hash-link" aria-label="Direct link to Summary" title="Direct link to Summary"></a></h2>
+<p>Both classes in the third layer implement the Kafka client logic which is needed by the Wayang-execution plan when external data flows should be established.
+The layer above handles the mapping of the components at startup time.
+All this wiring is needed to keep Wayang open and flexible so that multiple external systems can be used in a variety of combinations and using multiple target platforms in combinations.</p>
+<h2 class="anchor anchorWithStickyNavbar_LWe7" id="outlook">Outlook<a href="https://wayang.apache.org/blog/Apache%20Kafka%20meets%20Apache%20Wayang#outlook" class="hash-link" aria-label="Direct link to Outlook" title="Direct link to Outlook"></a></h2>
+<p>The next part of the article series will cover the creation of an Kafka Source and Sink component for the Apache Spark platform, which allows our use case to scale.
+Finally, in part four we bring all puzzles together, and show the full implementation of the multi organizational data collaboration use case.</p>]]></content:encoded>
+ <category>wayang</category>
+ <category>kafka</category>
+ <category>cross organization data collaboration</category>
+ </item>
+ <item>
+ <title><![CDATA[Apache Kafka meets Apache Wayang - Part 2]]></title>
+ <link>https://wayang.apache.org/blog/Apache Kafka meets Apache Wayang</link>
+ <guid>https://wayang.apache.org/blog/Apache Kafka meets Apache Wayang</guid>
+ <pubDate>Wed, 06 Mar 2024 09:50:00 GMT</pubDate>
+ <description><![CDATA[In the second part of the article series we describe the implementation of the Kafka Source and Kafka Sink component for Apache Wayang.]]></description>
+ <content:encoded><![CDATA[<p>In the second part of the article series we describe the implementation of the Kafka Source and Kafka Sink component for Apache Wayang.
+We look into the “Read- and Write-Path” for our data items, called <em>DataQuanta</em>.</p>
+<h2 class="anchor anchorWithStickyNavbar_LWe7" id="apache-wayangs-read--write-path-for-kafka-topics">Apache Wayang’s Read & Write Path for Kafka topics<a href="https://wayang.apache.org/blog/Apache%20Kafka%20meets%20Apache%20Wayang#apache-wayangs-read--write-path-for-kafka-topics" class="hash-link" aria-label="Direct link to Apache Wayang’s Read & Write Path for Kafka topics" title="Direct link to Apache Wayang’s Read & Write Path for Kafka topics"></a></h2>
+<p>To describe the read and write paths for data in the context of the created Apache Wayang code snippet, the primary classes and interfaces we need to understand are as follows:</p>
+<p><strong>WayangContext:</strong> This class is essential for initializing the Wayang processing environment.
+It allows you to configure the execution environment and register plugins that define which platforms Wayang can use for data processing tasks, such as <em>Java.basicPlugin()</em> for local Java execution.</p>
+<p><strong>JavaPlanBuilder:</strong> This class is used to build and define the data processing pipeline (or plan) in Wayang.
+It provides a fluent API to specify the operations to be performed on the data, from reading the input to processing it and writing the output.</p>
+<h3 class="anchor anchorWithStickyNavbar_LWe7" id="read-path">Read Path<a href="https://wayang.apache.org/blog/Apache%20Kafka%20meets%20Apache%20Wayang#read-path" class="hash-link" aria-label="Direct link to Read Path" title="Direct link to Read Path"></a></h3>
+<p>The read path describes how data is ingested from a source into the Wayang processing pipeline:</p>
+<p><em>Reading from Kafka Topic:</em> The method <em>readKafkaTopic(topicName)</em> is used to ingest data from a specified Kafka topic.
+This is the starting point of the data processing pipeline, where topicName represents the name of the Kafka topic from which data is read.</p>
+<p><em>Data Tokenization and Preparation:</em> Once the data is read from Kafka, it undergoes several transformations such as Splitting, Filtering, and Mapping.
+What follows are the procedures known as Reducing, Grouping, Co-Grouping, and Counting.</p>
+<h3 class="anchor anchorWithStickyNavbar_LWe7" id="write-path">Write Path<a href="https://wayang.apache.org/blog/Apache%20Kafka%20meets%20Apache%20Wayang#write-path" class="hash-link" aria-label="Direct link to Write Path" title="Direct link to Write Path"></a></h3>
+<p><em>Writing to Kafka Topic:</em> The final step in the pipeline involves writing the processed data back to a Kafka topic using <em>.writeKafkaTopic(...)</em>.
+This method takes parameters that specify the target Kafka topic, a serialization function to format the data as strings, and additional configuration for load profile estimation, which optimizes the writing process.</p>
+<p>This read-write path provides a comprehensive flow of data from ingestion from Kafka, through various processing steps, and finally back to Kafka, showcasing a full cycle of data processing within Apache Wayang's abstracted environment and is implemented in our example program shown in <em>listing 1</em>.</p>
+<h2 class="anchor anchorWithStickyNavbar_LWe7" id="implementation-of-input--and-output-operators">Implementation of Input- and Output Operators<a href="https://wayang.apache.org/blog/Apache%20Kafka%20meets%20Apache%20Wayang#implementation-of-input--and-output-operators" class="hash-link" aria-label="Direct link to Implementation of Input- and Output Operators" title="Direct link to Implementation of Input- and Output Operators"></a></h2>
+<p>The next section shows how a new pair of operators can be implemented to extend Apache Wayang’s capabilities on the input and output side.
+We created the Kafka Source and Kafka Sink components so that our cross organizational data collaboration scenario can be implemented using data streaming infrastructure.</p>
+<p><strong>Level 1 – Wayang execution plan with abstract operators</strong></p>
+<p>The implementation of our Kafka Source and Kafka Sink components for Apache Wayang requires new methods and classes on three layers.
+First of all in the API package.
+Here we use the JavaPlanBuilder to expose the function for selecting a Kafka topic as the source to be used by client.<br>
+<!-- -->The class <em>JavaPlanBuilder</em> in package <em>org.apache.wayang.api</em> in the project <em>wayang-api/wayang-api-scala-java</em> exposes our new functionality to our external client.
+An instance of the JavaPlanBuilder is used to define the data processing pipeline.
+We use its <em>readKafkaTopic()</em> which specifies the source Kafka topic to read from, and for the write path we use the <em>writeKafkaTopic()</em> method.
+Both Methods do only trigger activities in the background.</p>
+<p>For the output side, we use the <em>DataQuantaBuilder</em> class, which offers an implementation of the writeKafkaTopic function.
+This function is designed to send processed data, referred to as DataQuanta, to a specified Kafka topic.
+Essentially, it marks the final step in a data processing sequence constructed using the Apache Wayang framework.</p>
+<p>In the DataQuanta class we implemented the methods writeKafkaTopic and writeKafkaTopicJava which use the KafkaTopicSink class.
+In this API layer we use the Scala programming language, but we utilize the Java classes, implemented in the layer below.</p>
+<p><strong>Level 2 – Wiring between Platform Abstraction and Implementation</strong></p>
+<p>The second layer builds the bridge between the WayangContext and PlanBuilders which work together with DataQuanta and the DataQuantaBuilder.</p>
+<p>Also, the mapping between the abstract components and the specific implementations are defined in this layer.</p>
+<p>Therefore, the mappings package has a class <em>Mappings</em> in which all relevant input and output operators are listed.
+We use it to register the KafkaSourceMapping and a KafkaSinkMapping for the particular platform, Java in our case.
+These classes allow the Apache Wayang framework to use the Java implementation of the KafkaTopicSource component (and KafkaTopicSink respectively).
+While the Wayang execution plan uses the higher abstractions, here on the “platform level” we have to link the specific implementation for the target platform.
+In our case this leads to a Java program running on a JVM which is set up by the Apache Wayang framework using the logical components of the execution plan.</p>
+<p>Those mappings link the real implementation of our operators the ones used in an execution plan.
+The JavaKafkaTopicSource and the JavaKafkaTopicSink extend the KafkaTopicSource and KafkaTopicSink so that the lower level implementation of those classes become available within Wayang’s Java Platform context.</p>
+<p>In this layer, the KafkaConsumer class and the KafkaProducer class are used, but both are configured and instantiated in the next layer underneath.
+All this is done in the project <em>wayang-plarforms/wayang-java</em>.</p>
+<p><strong>Layer 3 – Input/Output Connector Layer</strong></p>
+<p>The <em>KafkaTopicSource</em> and <em>KafkaTopicSink</em> classes build the third layer of our implementation.
+Both are implemented in Java programming language.
+In this layer, the real Kafka-Client logic is defined.
+Details about consumer and producers, client configuration, and schema handling have to be handled here.</p>
+<h2 class="anchor anchorWithStickyNavbar_LWe7" id="summary">Summary<a href="https://wayang.apache.org/blog/Apache%20Kafka%20meets%20Apache%20Wayang#summary" class="hash-link" aria-label="Direct link to Summary" title="Direct link to Summary"></a></h2>
+<p>Both classes in the third layer implement the Kafka client logic which is needed by the Wayang-execution plan when external data flows should be established.
+The layer above handles the mapping of the components at startup time.
+All this wiring is needed to keep Wayang open and flexible so that multiple external systems can be used in a variety of combinations and using multiple target platforms in combinations.</p>
+<h2 class="anchor anchorWithStickyNavbar_LWe7" id="outlook">Outlook<a href="https://wayang.apache.org/blog/Apache%20Kafka%20meets%20Apache%20Wayang#outlook" class="hash-link" aria-label="Direct link to Outlook" title="Direct link to Outlook"></a></h2>
+<p>The next part of the article series will cover the creation of an Kafka Source and Sink component for the Apache Spark platform, which allows our use case to scale.
+Finally, in part four we bring all puzzles together, and show the full implementation of the multi organizational data collaboration use case.</p>]]></content:encoded>
+ <category>wayang</category>
+ <category>kafka</category>
+ <category>cross organization data collaboration</category>
+ </item>
<item>
<title><![CDATA[Website updated]]></title>
<link>https://wayang.apache.org/blog/website_update</link>
diff --git a/blog/tags/cross-organization-data-collaboration/index.html b/blog/tags/cross-organization-data-collaboration/index.html
new file mode 100644
index 00000000..b525b4ab
--- /dev/null
+++ b/blog/tags/cross-organization-data-collaboration/index.html
@@ -0,0 +1,106 @@
+<!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.1.1">
+<title data-rh="true">2 posts tagged with "cross organization data collaboration" | Apache Wayang (incubating)</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://wayang.apache.org/blog/tags/cross-organization-data-collaboration"><meta data-rh="true" property="og:locale" content="en"><meta data-rh="true" name="docusa [...]
+<link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache Wayang (incubating) Atom Feed"><link rel="stylesheet" href="/assets/css/styles.ecf70413.css">
+<script src="/assets/js/runtime~main.c6c8cd99.js" defer="defer"></script>
+<script src="/assets/js/main.fa771859.js" defer="defer"></script>
+</head>
+<body class="navigation-with-keyboard">
+<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){try{return new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}}()||function(){try{return localStorage.getItem("theme")}catch(t){}}();t(null!==e?e:"light")}(),function(){try{const a=new URLSearchParams(window.location.search).entries();for(var[t,e]of a)if(t.startsWith("docusaurus-data-")){var n=t.replace("docusaurus-data-","data-");document.documentElement.se [...]
+<p>This article is the first of a four part series about federated data analysis using Apache Wayang.
+The first article starts with an introduction of a typical data colaboration scenario which will emerge in our digital future.</p>
+<p>In part two and three we will share a summary of our Apache Kafka client implementation for Apache Wayang.
+We started with the Java Platform (part 2) and the Apache Spark implementation follows (W.I.P.) in part three.</p>
+<p>The use case behind this work is an imaginary data collaboration scenario.
+We see this example and the demand for a solution already in many places.<br>
+<!-- -->For us this is motivation enough to propose a solution.
+This would also allow us to do more local data processing, and businesses can stop moving data around the world, but rather care about data locality while they expose and share specific information to others by using data federation.
+This reduces complexity of data management and cost dramatically.</p>
+<p>For this purpose, we illustrate a cross organizational data sharing scenario from the finance sector soon.
+This analysis pattern will also be relevant in the context of data analysis along supply chains, another typical example where data from many stakeholder together is needed but never managed in one place, for good reasons.</p>
+<p>Data federation can help us to unlock the hidden value of all those isolated data lakes.</p>
+<h2 class="anchor anchorWithStickyNavbar_LWe7" id="a-cross-organizational-data-sharing-scenario">A cross organizational data sharing scenario<a href="#a-cross-organizational-data-sharing-scenario" class="hash-link" aria-label="Direct link to A cross organizational data sharing scenario" title="Direct link to A cross organizational data sharing scenario"></a></h2>
+<p>Our goal is the implementation of a cross organization decentralized data processing scenario, in which protected local data should be processed in combination with public data from public sources in a collaborative manner.
+Instead of copying all data into a central data lake or a central data platform we decided to use federated analytics.
+Apache Wayang is the tool we work with.
+In our case, the public data is hosted on publicly available websites or data pods.
+A client can use the HTTP(S) protocol to read the data which is given in a well defined format.
+For simplicity we decided to use CSV format.
+When we look into the data of each participant we have a different perspective.</p>
+<p>Our processing procedure should calculate a particular metric on the <em>local data</em> of each participant.
+An example of such a metric is the average spending of all users on a particular product category per month.
+This can vary from partner to partner, hence, we want to be able to calculate a peer-group comparison so that each partner can see its own metric compared with a global average calculated from contributions by all partners.
+Such a process requires global averaging and local averaging.
+And due to governance constraints, we can’t bring all raw data together in one place.</p>
+<p>Instead, we want to use Apache Wayang for this purpose.
+We simplify the procedure and split it into two phases.
+Phase one is the process, which allows each participant to calculate the local metrics.
+This requires only local data. The second phase requires data from all collaborating partners.
+The monthly sum and counter values per partner and category are needed in one place by all other parties.
+Hence, the algorithm of the first phase stores the local results locally, and the contributions to the global results in an externally accessible Kafka topic.
+We assume this is done by each of the partners.</p>
+<p>Now we have a scenario, in which an Apache Wayang process must be able to read data from multiple Apache Kafka topics from multiple Apache Kafka clusters but finally writes into a single Kafka topic, which then can be accessed by all the participating clients.</p>
+<p><img decoding="async" loading="lazy" alt="images/image-1.png" src="/assets/images/image-1-9cc35d5aea2b867d7e5759a96bd02334.png" width="904" height="550" class="img_ev3q"></p>
+<p>The illustration shows the data flows in such a scenario.
+Jobs with red border are executed by the participants in isolation within their own data processing environments.
+But they share some of the data, using publicly accessible Kafka topics, marked by A. Job 4 is the Apache Wayang job in our focus: here we intent to read data from 3 different source systems, and write results into a fourth system (marked as B), which can be accesses by all participants again.</p>
+<p>With this in mind we want to implement an Apache Wayang application which implements the illustrated <em>Job 4</em>.
+Since as of today, there is now <em>KafkaSource</em> and <em>KafkaSink</em> available in Apache Wayang, an implementation of both will be our first step.
+Our assumption is, that in the beginning, there won’t be much data.</p>
+<p>Apache Spark is not required to cope with the load, but we expect, that in the future, a single Java application would not be able to handle our workload.
+Hence, we want to utilize the Apache Wayang abstraction over multiple processing platforms, starting with Java.
+Later, we want to switch to Apache Spark.</p></div><footer class="row docusaurus-mt-lg"><div class="col"><b>Tags:</b><ul class="tags_jXut padding--none margin-left--sm"><li class="tag_QGVx"><a class="tag_zVej tagRegular_sFm0" href="/blog/tags/wayang">wayang</a></li><li class="tag_QGVx"><a class="tag_zVej tagRegular_sFm0" href="/blog/tags/kafka">kafka</a></li><li class="tag_QGVx"><a class="tag_zVej tagRegular_sFm0" href="/blog/tags/cross-organization-data-collaboration">cross organization [...]
+<p>This article is the first of a four part series about federated data analysis using Apache Wayang.
+The first article starts with an introduction of a typical data colaboration scenario which will emerge in our digital future.</p>
+<p>In part two and three we will share a summary of our Apache Kafka client implementation for Apache Wayang.
+We started with the Java Platform (part 2) and the Apache Spark implementation follows (W.I.P.) in part three.</p>
+<p>The use case behind this work is an imaginary data collaboration scenario.
+We see this example and the demand for a solution already in many places.<br>
+<!-- -->For us this is motivation enough to propose a solution.
+This would also allow us to do more local data processing, and businesses can stop moving data around the world, but rather care about data locality while they expose and share specific information to others by using data federation.
+This reduces complexity of data management and cost dramatically.</p>
+<p>For this purpose, we illustrate a cross organizational data sharing scenario from the finance sector soon.
+This analysis pattern will also be relevant in the context of data analysis along supply chains, another typical example where data from many stakeholder together is needed but never managed in one place, for good reasons.</p>
+<p>Data federation can help us to unlock the hidden value of all those isolated data lakes.</p>
+<h2 class="anchor anchorWithStickyNavbar_LWe7" id="a-cross-organizational-data-sharing-scenario">A cross organizational data sharing scenario<a href="#a-cross-organizational-data-sharing-scenario" class="hash-link" aria-label="Direct link to A cross organizational data sharing scenario" title="Direct link to A cross organizational data sharing scenario"></a></h2>
+<p>Our goal is the implementation of a cross organization decentralized data processing scenario, in which protected local data should be processed in combination with public data from public sources in a collaborative manner.
+Instead of copying all data into a central data lake or a central data platform we decided to use federated analytics.
+Apache Wayang is the tool we work with.
+In our case, the public data is hosted on publicly available websites or data pods.
+A client can use the HTTP(S) protocol to read the data which is given in a well defined format.
+For simplicity we decided to use CSV format.
+When we look into the data of each participant we have a different perspective.</p>
+<p>Our processing procedure should calculate a particular metric on the <em>local data</em> of each participant.
+An example of such a metric is the average spending of all users on a particular product category per month.
+This can vary from partner to partner, hence, we want to be able to calculate a peer-group comparison so that each partner can see its own metric compared with a global average calculated from contributions by all partners.
+Such a process requires global averaging and local averaging.
+And due to governance constraints, we can’t bring all raw data together in one place.</p>
+<p>Instead, we want to use Apache Wayang for this purpose.
+We simplify the procedure and split it into two phases.
+Phase one is the process, which allows each participant to calculate the local metrics.
+This requires only local data. The second phase requires data from all collaborating partners.
+The monthly sum and counter values per partner and category are needed in one place by all other parties.
+Hence, the algorithm of the first phase stores the local results locally, and the contributions to the global results in an externally accessible Kafka topic.
+We assume this is done by each of the partners.</p>
+<p>Now we have a scenario, in which an Apache Wayang process must be able to read data from multiple Apache Kafka topics from multiple Apache Kafka clusters but finally writes into a single Kafka topic, which then can be accessed by all the participating clients.</p>
+<p><img decoding="async" loading="lazy" alt="images/image-1.png" src="/assets/images/image-1-9cc35d5aea2b867d7e5759a96bd02334.png" width="904" height="550" class="img_ev3q"></p>
+<p>The illustration shows the data flows in such a scenario.
+Jobs with red border are executed by the participants in isolation within their own data processing environments.
+But they share some of the data, using publicly accessible Kafka topics, marked by A. Job 4 is the Apache Wayang job in our focus: here we intent to read data from 3 different source systems, and write results into a fourth system (marked as B), which can be accesses by all participants again.</p>
+<p>With this in mind we want to implement an Apache Wayang application which implements the illustrated <em>Job 4</em>.
+Since as of today, there is now <em>KafkaSource</em> and <em>KafkaSink</em> available in Apache Wayang, an implementation of both will be our first step.
+Our assumption is, that in the beginning, there won’t be much data.</p>
+<p>Apache Spark is not required to cope with the load, but we expect, that in the future, a single Java application would not be able to handle our workload.
+Hence, we want to utilize the Apache Wayang abstraction over multiple processing platforms, starting with Java.
+Later, we want to switch to Apache Spark.</p></div><footer class="row docusaurus-mt-lg"><div class="col"><b>Tags:</b><ul class="tags_jXut padding--none margin-left--sm"><li class="tag_QGVx"><a class="tag_zVej tagRegular_sFm0" href="/blog/tags/wayang">wayang</a></li><li class="tag_QGVx"><a class="tag_zVej tagRegular_sFm0" href="/blog/tags/kafka">kafka</a></li><li class="tag_QGVx"><a class="tag_zVej tagRegular_sFm0" href="/blog/tags/cross-organization-data-collaboration">cross organization [...]
+ <p> Apache Wayang is an effort undergoing incubation at The Apache Software Foundation (ASF), sponsored by the Apache Incubator. Incubation is required of all newly accepted projects until a further review indicates that the infrastructure, communications, and decision making process have stabilized in a manner consistent with other successful ASF projects. While incubation status is not necessarily a reflection of the completeness or stability of the code, it does indicate that th [...]
+ <p>
+ Copyright © 2024 The Apache Software Foundation, Licensed under the Apache License, Version 2.0. <br>
+ Apache, the names of Apache projects, and the feather logo are either registered trademarks or trademarks of the Apache Software Foundation in the United States and/or other countries.
+ </p>
+ </div></div></div></div></footer></div>
+</body>
+</html>
\ No newline at end of file
diff --git a/blog/tags/index.html b/blog/tags/index.html
index 8c652935..b1dbd75d 100644
--- a/blog/tags/index.html
+++ b/blog/tags/index.html
@@ -5,11 +5,11 @@
<meta name="generator" content="Docusaurus v3.1.1">
<title data-rh="true">Tags | Apache Wayang (incubating)</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://wayang.apache.org/blog/tags"><meta data-rh="true" property="og:locale" content="en"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="tr [...]
<link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache Wayang (incubating) Atom Feed"><link rel="stylesheet" href="/assets/css/styles.ecf70413.css">
-<script src="/assets/js/runtime~main.c0fb4924.js" defer="defer"></script>
-<script src="/assets/js/main.bb71bd6f.js" defer="defer"></script>
+<script src="/assets/js/runtime~main.c6c8cd99.js" defer="defer"></script>
+<script src="/assets/js/main.fa771859.js" defer="defer"></script>
</head>
<body class="navigation-with-keyboard">
-<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){try{return new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}}()||function(){try{return localStorage.getItem("theme")}catch(t){}}();t(null!==e?e:"light")}(),function(){try{const a=new URLSearchParams(window.location.search).entries();for(var[t,e]of a)if(t.startsWith("docusaurus-data-")){var n=t.replace("docusaurus-data-","data-");document.documentElement.se [...]
+<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){try{return new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}}()||function(){try{return localStorage.getItem("theme")}catch(t){}}();t(null!==e?e:"light")}(),function(){try{const a=new URLSearchParams(window.location.search).entries();for(var[t,e]of a)if(t.startsWith("docusaurus-data-")){var n=t.replace("docusaurus-data-","data-");document.documentElement.se [...]
<p> Apache Wayang is an effort undergoing incubation at The Apache Software Foundation (ASF), sponsored by the Apache Incubator. Incubation is required of all newly accepted projects until a further review indicates that the infrastructure, communications, and decision making process have stabilized in a manner consistent with other successful ASF projects. While incubation status is not necessarily a reflection of the completeness or stability of the code, it does indicate that th [...]
<p>
Copyright © 2024 The Apache Software Foundation, Licensed under the Apache License, Version 2.0. <br>
diff --git a/blog/tags/kafka/index.html b/blog/tags/kafka/index.html
new file mode 100644
index 00000000..b7f53bf7
--- /dev/null
+++ b/blog/tags/kafka/index.html
@@ -0,0 +1,106 @@
+<!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.1.1">
+<title data-rh="true">2 posts tagged with "kafka" | Apache Wayang (incubating)</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://wayang.apache.org/blog/tags/kafka"><meta data-rh="true" property="og:locale" content="en"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:l [...]
+<link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache Wayang (incubating) Atom Feed"><link rel="stylesheet" href="/assets/css/styles.ecf70413.css">
+<script src="/assets/js/runtime~main.c6c8cd99.js" defer="defer"></script>
+<script src="/assets/js/main.fa771859.js" defer="defer"></script>
+</head>
+<body class="navigation-with-keyboard">
+<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){try{return new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}}()||function(){try{return localStorage.getItem("theme")}catch(t){}}();t(null!==e?e:"light")}(),function(){try{const a=new URLSearchParams(window.location.search).entries();for(var[t,e]of a)if(t.startsWith("docusaurus-data-")){var n=t.replace("docusaurus-data-","data-");document.documentElement.se [...]
+<p>This article is the first of a four part series about federated data analysis using Apache Wayang.
+The first article starts with an introduction of a typical data colaboration scenario which will emerge in our digital future.</p>
+<p>In part two and three we will share a summary of our Apache Kafka client implementation for Apache Wayang.
+We started with the Java Platform (part 2) and the Apache Spark implementation follows (W.I.P.) in part three.</p>
+<p>The use case behind this work is an imaginary data collaboration scenario.
+We see this example and the demand for a solution already in many places.<br>
+<!-- -->For us this is motivation enough to propose a solution.
+This would also allow us to do more local data processing, and businesses can stop moving data around the world, but rather care about data locality while they expose and share specific information to others by using data federation.
+This reduces complexity of data management and cost dramatically.</p>
+<p>For this purpose, we illustrate a cross organizational data sharing scenario from the finance sector soon.
+This analysis pattern will also be relevant in the context of data analysis along supply chains, another typical example where data from many stakeholder together is needed but never managed in one place, for good reasons.</p>
+<p>Data federation can help us to unlock the hidden value of all those isolated data lakes.</p>
+<h2 class="anchor anchorWithStickyNavbar_LWe7" id="a-cross-organizational-data-sharing-scenario">A cross organizational data sharing scenario<a href="#a-cross-organizational-data-sharing-scenario" class="hash-link" aria-label="Direct link to A cross organizational data sharing scenario" title="Direct link to A cross organizational data sharing scenario"></a></h2>
+<p>Our goal is the implementation of a cross organization decentralized data processing scenario, in which protected local data should be processed in combination with public data from public sources in a collaborative manner.
+Instead of copying all data into a central data lake or a central data platform we decided to use federated analytics.
+Apache Wayang is the tool we work with.
+In our case, the public data is hosted on publicly available websites or data pods.
+A client can use the HTTP(S) protocol to read the data which is given in a well defined format.
+For simplicity we decided to use CSV format.
+When we look into the data of each participant we have a different perspective.</p>
+<p>Our processing procedure should calculate a particular metric on the <em>local data</em> of each participant.
+An example of such a metric is the average spending of all users on a particular product category per month.
+This can vary from partner to partner, hence, we want to be able to calculate a peer-group comparison so that each partner can see its own metric compared with a global average calculated from contributions by all partners.
+Such a process requires global averaging and local averaging.
+And due to governance constraints, we can’t bring all raw data together in one place.</p>
+<p>Instead, we want to use Apache Wayang for this purpose.
+We simplify the procedure and split it into two phases.
+Phase one is the process, which allows each participant to calculate the local metrics.
+This requires only local data. The second phase requires data from all collaborating partners.
+The monthly sum and counter values per partner and category are needed in one place by all other parties.
+Hence, the algorithm of the first phase stores the local results locally, and the contributions to the global results in an externally accessible Kafka topic.
+We assume this is done by each of the partners.</p>
+<p>Now we have a scenario, in which an Apache Wayang process must be able to read data from multiple Apache Kafka topics from multiple Apache Kafka clusters but finally writes into a single Kafka topic, which then can be accessed by all the participating clients.</p>
+<p><img decoding="async" loading="lazy" alt="images/image-1.png" src="/assets/images/image-1-9cc35d5aea2b867d7e5759a96bd02334.png" width="904" height="550" class="img_ev3q"></p>
+<p>The illustration shows the data flows in such a scenario.
+Jobs with red border are executed by the participants in isolation within their own data processing environments.
+But they share some of the data, using publicly accessible Kafka topics, marked by A. Job 4 is the Apache Wayang job in our focus: here we intent to read data from 3 different source systems, and write results into a fourth system (marked as B), which can be accesses by all participants again.</p>
+<p>With this in mind we want to implement an Apache Wayang application which implements the illustrated <em>Job 4</em>.
+Since as of today, there is now <em>KafkaSource</em> and <em>KafkaSink</em> available in Apache Wayang, an implementation of both will be our first step.
+Our assumption is, that in the beginning, there won’t be much data.</p>
+<p>Apache Spark is not required to cope with the load, but we expect, that in the future, a single Java application would not be able to handle our workload.
+Hence, we want to utilize the Apache Wayang abstraction over multiple processing platforms, starting with Java.
+Later, we want to switch to Apache Spark.</p></div><footer class="row docusaurus-mt-lg"><div class="col"><b>Tags:</b><ul class="tags_jXut padding--none margin-left--sm"><li class="tag_QGVx"><a class="tag_zVej tagRegular_sFm0" href="/blog/tags/wayang">wayang</a></li><li class="tag_QGVx"><a class="tag_zVej tagRegular_sFm0" href="/blog/tags/kafka">kafka</a></li><li class="tag_QGVx"><a class="tag_zVej tagRegular_sFm0" href="/blog/tags/cross-organization-data-collaboration">cross organization [...]
+<p>This article is the first of a four part series about federated data analysis using Apache Wayang.
+The first article starts with an introduction of a typical data colaboration scenario which will emerge in our digital future.</p>
+<p>In part two and three we will share a summary of our Apache Kafka client implementation for Apache Wayang.
+We started with the Java Platform (part 2) and the Apache Spark implementation follows (W.I.P.) in part three.</p>
+<p>The use case behind this work is an imaginary data collaboration scenario.
+We see this example and the demand for a solution already in many places.<br>
+<!-- -->For us this is motivation enough to propose a solution.
+This would also allow us to do more local data processing, and businesses can stop moving data around the world, but rather care about data locality while they expose and share specific information to others by using data federation.
+This reduces complexity of data management and cost dramatically.</p>
+<p>For this purpose, we illustrate a cross organizational data sharing scenario from the finance sector soon.
+This analysis pattern will also be relevant in the context of data analysis along supply chains, another typical example where data from many stakeholder together is needed but never managed in one place, for good reasons.</p>
+<p>Data federation can help us to unlock the hidden value of all those isolated data lakes.</p>
+<h2 class="anchor anchorWithStickyNavbar_LWe7" id="a-cross-organizational-data-sharing-scenario">A cross organizational data sharing scenario<a href="#a-cross-organizational-data-sharing-scenario" class="hash-link" aria-label="Direct link to A cross organizational data sharing scenario" title="Direct link to A cross organizational data sharing scenario"></a></h2>
+<p>Our goal is the implementation of a cross organization decentralized data processing scenario, in which protected local data should be processed in combination with public data from public sources in a collaborative manner.
+Instead of copying all data into a central data lake or a central data platform we decided to use federated analytics.
+Apache Wayang is the tool we work with.
+In our case, the public data is hosted on publicly available websites or data pods.
+A client can use the HTTP(S) protocol to read the data which is given in a well defined format.
+For simplicity we decided to use CSV format.
+When we look into the data of each participant we have a different perspective.</p>
+<p>Our processing procedure should calculate a particular metric on the <em>local data</em> of each participant.
+An example of such a metric is the average spending of all users on a particular product category per month.
+This can vary from partner to partner, hence, we want to be able to calculate a peer-group comparison so that each partner can see its own metric compared with a global average calculated from contributions by all partners.
+Such a process requires global averaging and local averaging.
+And due to governance constraints, we can’t bring all raw data together in one place.</p>
+<p>Instead, we want to use Apache Wayang for this purpose.
+We simplify the procedure and split it into two phases.
+Phase one is the process, which allows each participant to calculate the local metrics.
+This requires only local data. The second phase requires data from all collaborating partners.
+The monthly sum and counter values per partner and category are needed in one place by all other parties.
+Hence, the algorithm of the first phase stores the local results locally, and the contributions to the global results in an externally accessible Kafka topic.
+We assume this is done by each of the partners.</p>
+<p>Now we have a scenario, in which an Apache Wayang process must be able to read data from multiple Apache Kafka topics from multiple Apache Kafka clusters but finally writes into a single Kafka topic, which then can be accessed by all the participating clients.</p>
+<p><img decoding="async" loading="lazy" alt="images/image-1.png" src="/assets/images/image-1-9cc35d5aea2b867d7e5759a96bd02334.png" width="904" height="550" class="img_ev3q"></p>
+<p>The illustration shows the data flows in such a scenario.
+Jobs with red border are executed by the participants in isolation within their own data processing environments.
+But they share some of the data, using publicly accessible Kafka topics, marked by A. Job 4 is the Apache Wayang job in our focus: here we intent to read data from 3 different source systems, and write results into a fourth system (marked as B), which can be accesses by all participants again.</p>
+<p>With this in mind we want to implement an Apache Wayang application which implements the illustrated <em>Job 4</em>.
+Since as of today, there is now <em>KafkaSource</em> and <em>KafkaSink</em> available in Apache Wayang, an implementation of both will be our first step.
+Our assumption is, that in the beginning, there won’t be much data.</p>
+<p>Apache Spark is not required to cope with the load, but we expect, that in the future, a single Java application would not be able to handle our workload.
+Hence, we want to utilize the Apache Wayang abstraction over multiple processing platforms, starting with Java.
+Later, we want to switch to Apache Spark.</p></div><footer class="row docusaurus-mt-lg"><div class="col"><b>Tags:</b><ul class="tags_jXut padding--none margin-left--sm"><li class="tag_QGVx"><a class="tag_zVej tagRegular_sFm0" href="/blog/tags/wayang">wayang</a></li><li class="tag_QGVx"><a class="tag_zVej tagRegular_sFm0" href="/blog/tags/kafka">kafka</a></li><li class="tag_QGVx"><a class="tag_zVej tagRegular_sFm0" href="/blog/tags/cross-organization-data-collaboration">cross organization [...]
+ <p> Apache Wayang is an effort undergoing incubation at The Apache Software Foundation (ASF), sponsored by the Apache Incubator. Incubation is required of all newly accepted projects until a further review indicates that the infrastructure, communications, and decision making process have stabilized in a manner consistent with other successful ASF projects. While incubation status is not necessarily a reflection of the completeness or stability of the code, it does indicate that th [...]
+ <p>
+ Copyright © 2024 The Apache Software Foundation, Licensed under the Apache License, Version 2.0. <br>
+ Apache, the names of Apache projects, and the feather logo are either registered trademarks or trademarks of the Apache Software Foundation in the United States and/or other countries.
+ </p>
+ </div></div></div></div></footer></div>
+</body>
+</html>
\ No newline at end of file
diff --git a/blog/tags/wayang/index.html b/blog/tags/wayang/index.html
index d110828d..5243282d 100644
--- a/blog/tags/wayang/index.html
+++ b/blog/tags/wayang/index.html
@@ -3,13 +3,99 @@
<head>
<meta charset="UTF-8">
<meta name="generator" content="Docusaurus v3.1.1">
-<title data-rh="true">One post tagged with "wayang" | Apache Wayang (incubating)</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://wayang.apache.org/blog/tags/wayang"><meta data-rh="true" property="og:locale" content="en"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearc [...]
+<title data-rh="true">3 posts tagged with "wayang" | Apache Wayang (incubating)</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://wayang.apache.org/blog/tags/wayang"><meta data-rh="true" property="og:locale" content="en"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch [...]
<link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache Wayang (incubating) Atom Feed"><link rel="stylesheet" href="/assets/css/styles.ecf70413.css">
-<script src="/assets/js/runtime~main.c0fb4924.js" defer="defer"></script>
-<script src="/assets/js/main.bb71bd6f.js" defer="defer"></script>
+<script src="/assets/js/runtime~main.c6c8cd99.js" defer="defer"></script>
+<script src="/assets/js/main.fa771859.js" defer="defer"></script>
</head>
<body class="navigation-with-keyboard">
-<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){try{return new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}}()||function(){try{return localStorage.getItem("theme")}catch(t){}}();t(null!==e?e:"light")}(),function(){try{const a=new URLSearchParams(window.location.search).entries();for(var[t,e]of a)if(t.startsWith("docusaurus-data-")){var n=t.replace("docusaurus-data-","data-");document.documentElement.se [...]
+<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){try{return new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}}()||function(){try{return localStorage.getItem("theme")}catch(t){}}();t(null!==e?e:"light")}(),function(){try{const a=new URLSearchParams(window.location.search).entries();for(var[t,e]of a)if(t.startsWith("docusaurus-data-")){var n=t.replace("docusaurus-data-","data-");document.documentElement.se [...]
+<p>This article is the first of a four part series about federated data analysis using Apache Wayang.
+The first article starts with an introduction of a typical data colaboration scenario which will emerge in our digital future.</p>
+<p>In part two and three we will share a summary of our Apache Kafka client implementation for Apache Wayang.
+We started with the Java Platform (part 2) and the Apache Spark implementation follows (W.I.P.) in part three.</p>
+<p>The use case behind this work is an imaginary data collaboration scenario.
+We see this example and the demand for a solution already in many places.<br>
+<!-- -->For us this is motivation enough to propose a solution.
+This would also allow us to do more local data processing, and businesses can stop moving data around the world, but rather care about data locality while they expose and share specific information to others by using data federation.
+This reduces complexity of data management and cost dramatically.</p>
+<p>For this purpose, we illustrate a cross organizational data sharing scenario from the finance sector soon.
+This analysis pattern will also be relevant in the context of data analysis along supply chains, another typical example where data from many stakeholder together is needed but never managed in one place, for good reasons.</p>
+<p>Data federation can help us to unlock the hidden value of all those isolated data lakes.</p>
+<h2 class="anchor anchorWithStickyNavbar_LWe7" id="a-cross-organizational-data-sharing-scenario">A cross organizational data sharing scenario<a href="#a-cross-organizational-data-sharing-scenario" class="hash-link" aria-label="Direct link to A cross organizational data sharing scenario" title="Direct link to A cross organizational data sharing scenario"></a></h2>
+<p>Our goal is the implementation of a cross organization decentralized data processing scenario, in which protected local data should be processed in combination with public data from public sources in a collaborative manner.
+Instead of copying all data into a central data lake or a central data platform we decided to use federated analytics.
+Apache Wayang is the tool we work with.
+In our case, the public data is hosted on publicly available websites or data pods.
+A client can use the HTTP(S) protocol to read the data which is given in a well defined format.
+For simplicity we decided to use CSV format.
+When we look into the data of each participant we have a different perspective.</p>
+<p>Our processing procedure should calculate a particular metric on the <em>local data</em> of each participant.
+An example of such a metric is the average spending of all users on a particular product category per month.
+This can vary from partner to partner, hence, we want to be able to calculate a peer-group comparison so that each partner can see its own metric compared with a global average calculated from contributions by all partners.
+Such a process requires global averaging and local averaging.
+And due to governance constraints, we can’t bring all raw data together in one place.</p>
+<p>Instead, we want to use Apache Wayang for this purpose.
+We simplify the procedure and split it into two phases.
+Phase one is the process, which allows each participant to calculate the local metrics.
+This requires only local data. The second phase requires data from all collaborating partners.
+The monthly sum and counter values per partner and category are needed in one place by all other parties.
+Hence, the algorithm of the first phase stores the local results locally, and the contributions to the global results in an externally accessible Kafka topic.
+We assume this is done by each of the partners.</p>
+<p>Now we have a scenario, in which an Apache Wayang process must be able to read data from multiple Apache Kafka topics from multiple Apache Kafka clusters but finally writes into a single Kafka topic, which then can be accessed by all the participating clients.</p>
+<p><img decoding="async" loading="lazy" alt="images/image-1.png" src="/assets/images/image-1-9cc35d5aea2b867d7e5759a96bd02334.png" width="904" height="550" class="img_ev3q"></p>
+<p>The illustration shows the data flows in such a scenario.
+Jobs with red border are executed by the participants in isolation within their own data processing environments.
+But they share some of the data, using publicly accessible Kafka topics, marked by A. Job 4 is the Apache Wayang job in our focus: here we intent to read data from 3 different source systems, and write results into a fourth system (marked as B), which can be accesses by all participants again.</p>
+<p>With this in mind we want to implement an Apache Wayang application which implements the illustrated <em>Job 4</em>.
+Since as of today, there is now <em>KafkaSource</em> and <em>KafkaSink</em> available in Apache Wayang, an implementation of both will be our first step.
+Our assumption is, that in the beginning, there won’t be much data.</p>
+<p>Apache Spark is not required to cope with the load, but we expect, that in the future, a single Java application would not be able to handle our workload.
+Hence, we want to utilize the Apache Wayang abstraction over multiple processing platforms, starting with Java.
+Later, we want to switch to Apache Spark.</p></div><footer class="row docusaurus-mt-lg"><div class="col"><b>Tags:</b><ul class="tags_jXut padding--none margin-left--sm"><li class="tag_QGVx"><a class="tag_zVej tagRegular_sFm0" href="/blog/tags/wayang">wayang</a></li><li class="tag_QGVx"><a class="tag_zVej tagRegular_sFm0" href="/blog/tags/kafka">kafka</a></li><li class="tag_QGVx"><a class="tag_zVej tagRegular_sFm0" href="/blog/tags/cross-organization-data-collaboration">cross organization [...]
+<p>This article is the first of a four part series about federated data analysis using Apache Wayang.
+The first article starts with an introduction of a typical data colaboration scenario which will emerge in our digital future.</p>
+<p>In part two and three we will share a summary of our Apache Kafka client implementation for Apache Wayang.
+We started with the Java Platform (part 2) and the Apache Spark implementation follows (W.I.P.) in part three.</p>
+<p>The use case behind this work is an imaginary data collaboration scenario.
+We see this example and the demand for a solution already in many places.<br>
+<!-- -->For us this is motivation enough to propose a solution.
+This would also allow us to do more local data processing, and businesses can stop moving data around the world, but rather care about data locality while they expose and share specific information to others by using data federation.
+This reduces complexity of data management and cost dramatically.</p>
+<p>For this purpose, we illustrate a cross organizational data sharing scenario from the finance sector soon.
+This analysis pattern will also be relevant in the context of data analysis along supply chains, another typical example where data from many stakeholder together is needed but never managed in one place, for good reasons.</p>
+<p>Data federation can help us to unlock the hidden value of all those isolated data lakes.</p>
+<h2 class="anchor anchorWithStickyNavbar_LWe7" id="a-cross-organizational-data-sharing-scenario">A cross organizational data sharing scenario<a href="#a-cross-organizational-data-sharing-scenario" class="hash-link" aria-label="Direct link to A cross organizational data sharing scenario" title="Direct link to A cross organizational data sharing scenario"></a></h2>
+<p>Our goal is the implementation of a cross organization decentralized data processing scenario, in which protected local data should be processed in combination with public data from public sources in a collaborative manner.
+Instead of copying all data into a central data lake or a central data platform we decided to use federated analytics.
+Apache Wayang is the tool we work with.
+In our case, the public data is hosted on publicly available websites or data pods.
+A client can use the HTTP(S) protocol to read the data which is given in a well defined format.
+For simplicity we decided to use CSV format.
+When we look into the data of each participant we have a different perspective.</p>
+<p>Our processing procedure should calculate a particular metric on the <em>local data</em> of each participant.
+An example of such a metric is the average spending of all users on a particular product category per month.
+This can vary from partner to partner, hence, we want to be able to calculate a peer-group comparison so that each partner can see its own metric compared with a global average calculated from contributions by all partners.
+Such a process requires global averaging and local averaging.
+And due to governance constraints, we can’t bring all raw data together in one place.</p>
+<p>Instead, we want to use Apache Wayang for this purpose.
+We simplify the procedure and split it into two phases.
+Phase one is the process, which allows each participant to calculate the local metrics.
+This requires only local data. The second phase requires data from all collaborating partners.
+The monthly sum and counter values per partner and category are needed in one place by all other parties.
+Hence, the algorithm of the first phase stores the local results locally, and the contributions to the global results in an externally accessible Kafka topic.
+We assume this is done by each of the partners.</p>
+<p>Now we have a scenario, in which an Apache Wayang process must be able to read data from multiple Apache Kafka topics from multiple Apache Kafka clusters but finally writes into a single Kafka topic, which then can be accessed by all the participating clients.</p>
+<p><img decoding="async" loading="lazy" alt="images/image-1.png" src="/assets/images/image-1-9cc35d5aea2b867d7e5759a96bd02334.png" width="904" height="550" class="img_ev3q"></p>
+<p>The illustration shows the data flows in such a scenario.
+Jobs with red border are executed by the participants in isolation within their own data processing environments.
+But they share some of the data, using publicly accessible Kafka topics, marked by A. Job 4 is the Apache Wayang job in our focus: here we intent to read data from 3 different source systems, and write results into a fourth system (marked as B), which can be accesses by all participants again.</p>
+<p>With this in mind we want to implement an Apache Wayang application which implements the illustrated <em>Job 4</em>.
+Since as of today, there is now <em>KafkaSource</em> and <em>KafkaSink</em> available in Apache Wayang, an implementation of both will be our first step.
+Our assumption is, that in the beginning, there won’t be much data.</p>
+<p>Apache Spark is not required to cope with the load, but we expect, that in the future, a single Java application would not be able to handle our workload.
+Hence, we want to utilize the Apache Wayang abstraction over multiple processing platforms, starting with Java.
+Later, we want to switch to Apache Spark.</p></div><footer class="row docusaurus-mt-lg"><div class="col"><b>Tags:</b><ul class="tags_jXut padding--none margin-left--sm"><li class="tag_QGVx"><a class="tag_zVej tagRegular_sFm0" href="/blog/tags/wayang">wayang</a></li><li class="tag_QGVx"><a class="tag_zVej tagRegular_sFm0" href="/blog/tags/kafka">kafka</a></li><li class="tag_QGVx"><a class="tag_zVej tagRegular_sFm0" href="/blog/tags/cross-organization-data-collaboration">cross organization [...]
<p> Apache Wayang is an effort undergoing incubation at The Apache Software Foundation (ASF), sponsored by the Apache Incubator. Incubation is required of all newly accepted projects until a further review indicates that the infrastructure, communications, and decision making process have stabilized in a manner consistent with other successful ASF projects. While incubation status is not necessarily a reflection of the completeness or stability of the code, it does indicate that th [...]
<p>
Copyright © 2024 The Apache Software Foundation, Licensed under the Apache License, Version 2.0. <br>
diff --git a/blog/website_update/index.html b/blog/website_update/index.html
index 0e19ef7c..3a518a9a 100644
--- a/blog/website_update/index.html
+++ b/blog/website_update/index.html
@@ -5,11 +5,11 @@
<meta name="generator" content="Docusaurus v3.1.1">
<title data-rh="true">Website updated | Apache Wayang (incubating)</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://wayang.apache.org/blog/website_update"><meta data-rh="true" property="og:locale" content="en"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docusaurus_tag" content="defa [...]
<link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache Wayang (incubating) Atom Feed"><link rel="stylesheet" href="/assets/css/styles.ecf70413.css">
-<script src="/assets/js/runtime~main.c0fb4924.js" defer="defer"></script>
-<script src="/assets/js/main.bb71bd6f.js" defer="defer"></script>
+<script src="/assets/js/runtime~main.c6c8cd99.js" defer="defer"></script>
+<script src="/assets/js/main.fa771859.js" defer="defer"></script>
</head>
<body class="navigation-with-keyboard">
-<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){try{return new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}}()||function(){try{return localStorage.getItem("theme")}catch(t){}}();t(null!==e?e:"light")}(),function(){try{const a=new URLSearchParams(window.location.search).entries();for(var[t,e]of a)if(t.startsWith("docusaurus-data-")){var n=t.replace("docusaurus-data-","data-");document.documentElement.se [...]
+<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){try{return new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}}()||function(){try{return localStorage.getItem("theme")}catch(t){}}();t(null!==e?e:"light")}(),function(){try{const a=new URLSearchParams(window.location.search).entries();for(var[t,e]of a)if(t.startsWith("docusaurus-data-")){var n=t.replace("docusaurus-data-","data-");document.documentElement.se [...]
<p>Author: <a href="https://github.com/2pk03" target="_blank" rel="noopener noreferrer">2pk03</a></p>
<p>We switched to a new CMS. That's all.</p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="cheatsheet">Cheatsheet<a href="#cheatsheet" class="hash-link" aria-label="Direct link to Cheatsheet" title="Direct link to Cheatsheet"></a></h2>
@@ -39,7 +39,7 @@
<li>Line one</li>
<li>Line two</li>
<li>Line three</li>
-</ul></div><footer class="row docusaurus-mt-lg blogPostFooterDetailsFull_mRVl"><div class="col"><b>Tags:</b><ul class="tags_jXut padding--none margin-left--sm"><li class="tag_QGVx"><a class="tag_zVej tagRegular_sFm0" href="/blog/tags/wayang">wayang</a></li></ul></div></footer></article></main><div class="col col--2"><div class="tableOfContents_bqdL thin-scrollbar"><ul class="table-of-contents table-of-contents__left-border"><li><a href="#cheatsheet" class="table-of-contents__link toc-hig [...]
+</ul></div><footer class="row docusaurus-mt-lg blogPostFooterDetailsFull_mRVl"><div class="col"><b>Tags:</b><ul class="tags_jXut padding--none margin-left--sm"><li class="tag_QGVx"><a class="tag_zVej tagRegular_sFm0" href="/blog/tags/wayang">wayang</a></li></ul></div></footer></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/Apache Kafka meets Apache Wayang"><div class="pagi [...]
<p> Apache Wayang is an effort undergoing incubation at The Apache Software Foundation (ASF), sponsored by the Apache Incubator. Incubation is required of all newly accepted projects until a further review indicates that the infrastructure, communications, and decision making process have stabilized in a manner consistent with other successful ASF projects. While incubation status is not necessarily a reflection of the completeness or stability of the code, it does indicate that th [...]
<p>
Copyright © 2024 The Apache Software Foundation, Licensed under the Apache License, Version 2.0. <br>
diff --git a/docs/community/committer/index.html b/docs/community/committer/index.html
index ab12f00b..14d5a5e9 100644
--- a/docs/community/committer/index.html
+++ b/docs/community/committer/index.html
@@ -5,8 +5,8 @@
<meta name="generator" content="Docusaurus v3.1.1">
<title data-rh="true">Becoming a committer | Apache Wayang (incubating)</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://wayang.apache.org/docs/community/committer"><meta data-rh="true" property="og:locale" content="en"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" [...]
<link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache Wayang (incubating) Atom Feed"><link rel="stylesheet" href="/assets/css/styles.ecf70413.css">
-<script src="/assets/js/runtime~main.c0fb4924.js" defer="defer"></script>
-<script src="/assets/js/main.bb71bd6f.js" defer="defer"></script>
+<script src="/assets/js/runtime~main.c6c8cd99.js" defer="defer"></script>
+<script src="/assets/js/main.fa771859.js" defer="defer"></script>
</head>
<body class="navigation-with-keyboard">
<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){try{return new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}}()||function(){try{return localStorage.getItem("theme")}catch(t){}}();t(null!==e?e:"light")}(),function(){try{const a=new URLSearchParams(window.location.search).entries();for(var[t,e]of a)if(t.startsWith("docusaurus-data-")){var n=t.replace("docusaurus-data-","data-");document.documentElement.se [...]
diff --git a/docs/community/contribute/index.html b/docs/community/contribute/index.html
index fa455f2e..fbe37e7b 100644
--- a/docs/community/contribute/index.html
+++ b/docs/community/contribute/index.html
@@ -5,8 +5,8 @@
<meta name="generator" content="Docusaurus v3.1.1">
<title data-rh="true">How to contribute | Apache Wayang (incubating)</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://wayang.apache.org/docs/community/contribute"><meta data-rh="true" property="og:locale" content="en"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" c [...]
<link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache Wayang (incubating) Atom Feed"><link rel="stylesheet" href="/assets/css/styles.ecf70413.css">
-<script src="/assets/js/runtime~main.c0fb4924.js" defer="defer"></script>
-<script src="/assets/js/main.bb71bd6f.js" defer="defer"></script>
+<script src="/assets/js/runtime~main.c6c8cd99.js" defer="defer"></script>
+<script src="/assets/js/main.fa771859.js" defer="defer"></script>
</head>
<body class="navigation-with-keyboard">
<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){try{return new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}}()||function(){try{return localStorage.getItem("theme")}catch(t){}}();t(null!==e?e:"light")}(),function(){try{const a=new URLSearchParams(window.location.search).entries();for(var[t,e]of a)if(t.startsWith("docusaurus-data-")){var n=t.replace("docusaurus-data-","data-");document.documentElement.se [...]
diff --git a/docs/community/mailinglist/index.html b/docs/community/mailinglist/index.html
index 3f390ce4..1d22c0d9 100644
--- a/docs/community/mailinglist/index.html
+++ b/docs/community/mailinglist/index.html
@@ -5,8 +5,8 @@
<meta name="generator" content="Docusaurus v3.1.1">
<title data-rh="true">Mailinglists | Apache Wayang (incubating)</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://wayang.apache.org/docs/community/mailinglist"><meta data-rh="true" property="og:locale" content="en"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" conte [...]
<link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache Wayang (incubating) Atom Feed"><link rel="stylesheet" href="/assets/css/styles.ecf70413.css">
-<script src="/assets/js/runtime~main.c0fb4924.js" defer="defer"></script>
-<script src="/assets/js/main.bb71bd6f.js" defer="defer"></script>
+<script src="/assets/js/runtime~main.c6c8cd99.js" defer="defer"></script>
+<script src="/assets/js/main.fa771859.js" defer="defer"></script>
</head>
<body class="navigation-with-keyboard">
<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){try{return new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}}()||function(){try{return localStorage.getItem("theme")}catch(t){}}();t(null!==e?e:"light")}(),function(){try{const a=new URLSearchParams(window.location.search).entries();for(var[t,e]of a)if(t.startsWith("docusaurus-data-")){var n=t.replace("docusaurus-data-","data-");document.documentElement.se [...]
diff --git a/docs/community/repositories/index.html b/docs/community/repositories/index.html
index fbbfce8b..d67bc2e8 100644
--- a/docs/community/repositories/index.html
+++ b/docs/community/repositories/index.html
@@ -5,8 +5,8 @@
<meta name="generator" content="Docusaurus v3.1.1">
<title data-rh="true">Repositories | Apache Wayang (incubating)</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://wayang.apache.org/docs/community/repositories"><meta data-rh="true" property="og:locale" content="en"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" cont [...]
<link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache Wayang (incubating) Atom Feed"><link rel="stylesheet" href="/assets/css/styles.ecf70413.css">
-<script src="/assets/js/runtime~main.c0fb4924.js" defer="defer"></script>
-<script src="/assets/js/main.bb71bd6f.js" defer="defer"></script>
+<script src="/assets/js/runtime~main.c6c8cd99.js" defer="defer"></script>
+<script src="/assets/js/main.fa771859.js" defer="defer"></script>
</head>
<body class="navigation-with-keyboard">
<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){try{return new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}}()||function(){try{return localStorage.getItem("theme")}catch(t){}}();t(null!==e?e:"light")}(),function(){try{const a=new URLSearchParams(window.location.search).entries();for(var[t,e]of a)if(t.startsWith("docusaurus-data-")){var n=t.replace("docusaurus-data-","data-");document.documentElement.se [...]
diff --git a/docs/community/team/index.html b/docs/community/team/index.html
index c4fe2457..5ee752da 100644
--- a/docs/community/team/index.html
+++ b/docs/community/team/index.html
@@ -5,8 +5,8 @@
<meta name="generator" content="Docusaurus v3.1.1">
<title data-rh="true">Team | Apache Wayang (incubating)</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://wayang.apache.org/docs/community/team"><meta data-rh="true" property="og:locale" content="en"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta d [...]
<link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache Wayang (incubating) Atom Feed"><link rel="stylesheet" href="/assets/css/styles.ecf70413.css">
-<script src="/assets/js/runtime~main.c0fb4924.js" defer="defer"></script>
-<script src="/assets/js/main.bb71bd6f.js" defer="defer"></script>
+<script src="/assets/js/runtime~main.c6c8cd99.js" defer="defer"></script>
+<script src="/assets/js/main.fa771859.js" defer="defer"></script>
</head>
<body class="navigation-with-keyboard">
<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){try{return new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}}()||function(){try{return localStorage.getItem("theme")}catch(t){}}();t(null!==e?e:"light")}(),function(){try{const a=new URLSearchParams(window.location.search).entries();for(var[t,e]of a)if(t.startsWith("docusaurus-data-")){var n=t.replace("docusaurus-data-","data-");document.documentElement.se [...]
diff --git a/docs/guide/adding-operators/index.html b/docs/guide/adding-operators/index.html
index 54621fc6..e9455046 100644
--- a/docs/guide/adding-operators/index.html
+++ b/docs/guide/adding-operators/index.html
@@ -5,8 +5,8 @@
<meta name="generator" content="Docusaurus v3.1.1">
<title data-rh="true">Adding an operator in Wayang | Apache Wayang (incubating)</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://wayang.apache.org/docs/guide/adding-operators"><meta data-rh="true" property="og:locale" content="en"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearc [...]
<link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache Wayang (incubating) Atom Feed"><link rel="stylesheet" href="/assets/css/styles.ecf70413.css">
-<script src="/assets/js/runtime~main.c0fb4924.js" defer="defer"></script>
-<script src="/assets/js/main.bb71bd6f.js" defer="defer"></script>
+<script src="/assets/js/runtime~main.c6c8cd99.js" defer="defer"></script>
+<script src="/assets/js/main.fa771859.js" defer="defer"></script>
</head>
<body class="navigation-with-keyboard">
<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){try{return new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}}()||function(){try{return localStorage.getItem("theme")}catch(t){}}();t(null!==e?e:"light")}(),function(){try{const a=new URLSearchParams(window.location.search).entries();for(var[t,e]of a)if(t.startsWith("docusaurus-data-")){var n=t.replace("docusaurus-data-","data-");document.documentElement.se [...]
diff --git a/docs/guide/api-documentation/index.html b/docs/guide/api-documentation/index.html
index 6165f3f8..7cf57c18 100644
--- a/docs/guide/api-documentation/index.html
+++ b/docs/guide/api-documentation/index.html
@@ -5,8 +5,8 @@
<meta name="generator" content="Docusaurus v3.1.1">
<title data-rh="true">API documentation | Apache Wayang (incubating)</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://wayang.apache.org/docs/guide/api-documentation"><meta data-rh="true" property="og:locale" content="en"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language [...]
<link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache Wayang (incubating) Atom Feed"><link rel="stylesheet" href="/assets/css/styles.ecf70413.css">
-<script src="/assets/js/runtime~main.c0fb4924.js" defer="defer"></script>
-<script src="/assets/js/main.bb71bd6f.js" defer="defer"></script>
+<script src="/assets/js/runtime~main.c6c8cd99.js" defer="defer"></script>
+<script src="/assets/js/main.fa771859.js" defer="defer"></script>
</head>
<body class="navigation-with-keyboard">
<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){try{return new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}}()||function(){try{return localStorage.getItem("theme")}catch(t){}}();t(null!==e?e:"light")}(),function(){try{const a=new URLSearchParams(window.location.search).entries();for(var[t,e]of a)if(t.startsWith("docusaurus-data-")){var n=t.replace("docusaurus-data-","data-");document.documentElement.se [...]
diff --git a/docs/guide/developing-in-wayang/index.html b/docs/guide/developing-in-wayang/index.html
index 8e6f405d..c372a7fb 100644
--- a/docs/guide/developing-in-wayang/index.html
+++ b/docs/guide/developing-in-wayang/index.html
@@ -5,8 +5,8 @@
<meta name="generator" content="Docusaurus v3.1.1">
<title data-rh="true">Developing in Wayang | Apache Wayang (incubating)</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://wayang.apache.org/docs/guide/developing-in-wayang"><meta data-rh="true" property="og:locale" content="en"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:la [...]
<link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache Wayang (incubating) Atom Feed"><link rel="stylesheet" href="/assets/css/styles.ecf70413.css">
-<script src="/assets/js/runtime~main.c0fb4924.js" defer="defer"></script>
-<script src="/assets/js/main.bb71bd6f.js" defer="defer"></script>
+<script src="/assets/js/runtime~main.c6c8cd99.js" defer="defer"></script>
+<script src="/assets/js/main.fa771859.js" defer="defer"></script>
</head>
<body class="navigation-with-keyboard">
<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){try{return new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}}()||function(){try{return localStorage.getItem("theme")}catch(t){}}();t(null!==e?e:"light")}(),function(){try{const a=new URLSearchParams(window.location.search).entries();for(var[t,e]of a)if(t.startsWith("docusaurus-data-")){var n=t.replace("docusaurus-data-","data-");document.documentElement.se [...]
diff --git a/docs/guide/examples/index.html b/docs/guide/examples/index.html
index 7fc8a192..fb2ca039 100644
--- a/docs/guide/examples/index.html
+++ b/docs/guide/examples/index.html
@@ -5,8 +5,8 @@
<meta name="generator" content="Docusaurus v3.1.1">
<title data-rh="true">Usage Examples | Apache Wayang (incubating)</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://wayang.apache.org/docs/guide/examples"><meta data-rh="true" property="og:locale" content="en"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="e [...]
<link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache Wayang (incubating) Atom Feed"><link rel="stylesheet" href="/assets/css/styles.ecf70413.css">
-<script src="/assets/js/runtime~main.c0fb4924.js" defer="defer"></script>
-<script src="/assets/js/main.bb71bd6f.js" defer="defer"></script>
+<script src="/assets/js/runtime~main.c6c8cd99.js" defer="defer"></script>
+<script src="/assets/js/main.fa771859.js" defer="defer"></script>
</head>
<body class="navigation-with-keyboard">
<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){try{return new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}}()||function(){try{return localStorage.getItem("theme")}catch(t){}}();t(null!==e?e:"light")}(),function(){try{const a=new URLSearchParams(window.location.search).entries();for(var[t,e]of a)if(t.startsWith("docusaurus-data-")){var n=t.replace("docusaurus-data-","data-");document.documentElement.se [...]
diff --git a/docs/guide/getting-started/index.html b/docs/guide/getting-started/index.html
index 5196750a..d195e2b1 100644
--- a/docs/guide/getting-started/index.html
+++ b/docs/guide/getting-started/index.html
@@ -5,8 +5,8 @@
<meta name="generator" content="Docusaurus v3.1.1">
<title data-rh="true">Getting started | Apache Wayang (incubating)</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://wayang.apache.org/docs/guide/getting-started"><meta data-rh="true" property="og:locale" content="en"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" co [...]
<link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache Wayang (incubating) Atom Feed"><link rel="stylesheet" href="/assets/css/styles.ecf70413.css">
-<script src="/assets/js/runtime~main.c0fb4924.js" defer="defer"></script>
-<script src="/assets/js/main.bb71bd6f.js" defer="defer"></script>
+<script src="/assets/js/runtime~main.c6c8cd99.js" defer="defer"></script>
+<script src="/assets/js/main.fa771859.js" defer="defer"></script>
</head>
<body class="navigation-with-keyboard">
<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){try{return new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}}()||function(){try{return localStorage.getItem("theme")}catch(t){}}();t(null!==e?e:"light")}(),function(){try{const a=new URLSearchParams(window.location.search).entries();for(var[t,e]of a)if(t.startsWith("docusaurus-data-")){var n=t.replace("docusaurus-data-","data-");document.documentElement.se [...]
diff --git a/docs/guide/installation/index.html b/docs/guide/installation/index.html
index aaec8b94..24c0b061 100644
--- a/docs/guide/installation/index.html
+++ b/docs/guide/installation/index.html
@@ -5,8 +5,8 @@
<meta name="generator" content="Docusaurus v3.1.1">
<title data-rh="true">How to build Wayang | Apache Wayang (incubating)</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://wayang.apache.org/docs/guide/installation"><meta data-rh="true" property="og:locale" content="en"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" c [...]
<link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache Wayang (incubating) Atom Feed"><link rel="stylesheet" href="/assets/css/styles.ecf70413.css">
-<script src="/assets/js/runtime~main.c0fb4924.js" defer="defer"></script>
-<script src="/assets/js/main.bb71bd6f.js" defer="defer"></script>
+<script src="/assets/js/runtime~main.c6c8cd99.js" defer="defer"></script>
+<script src="/assets/js/main.fa771859.js" defer="defer"></script>
</head>
<body class="navigation-with-keyboard">
<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){try{return new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}}()||function(){try{return localStorage.getItem("theme")}catch(t){}}();t(null!==e?e:"light")}(),function(){try{const a=new URLSearchParams(window.location.search).entries();for(var[t,e]of a)if(t.startsWith("docusaurus-data-")){var n=t.replace("docusaurus-data-","data-");document.documentElement.se [...]
diff --git a/docs/guide/ml4all/index.html b/docs/guide/ml4all/index.html
index c3774b40..6a148340 100644
--- a/docs/guide/ml4all/index.html
+++ b/docs/guide/ml4all/index.html
@@ -5,8 +5,8 @@
<meta name="generator" content="Docusaurus v3.1.1">
<title data-rh="true">Scalable Machine Learning | Apache Wayang (incubating)</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://wayang.apache.org/docs/guide/ml4all"><meta data-rh="true" property="og:locale" content="en"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" c [...]
<link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache Wayang (incubating) Atom Feed"><link rel="stylesheet" href="/assets/css/styles.ecf70413.css">
-<script src="/assets/js/runtime~main.c0fb4924.js" defer="defer"></script>
-<script src="/assets/js/main.bb71bd6f.js" defer="defer"></script>
+<script src="/assets/js/runtime~main.c6c8cd99.js" defer="defer"></script>
+<script src="/assets/js/main.fa771859.js" defer="defer"></script>
</head>
<body class="navigation-with-keyboard">
<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){try{return new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}}()||function(){try{return localStorage.getItem("theme")}catch(t){}}();t(null!==e?e:"light")}(),function(){try{const a=new URLSearchParams(window.location.search).entries();for(var[t,e]of a)if(t.startsWith("docusaurus-data-")){var n=t.replace("docusaurus-data-","data-");document.documentElement.se [...]
diff --git a/docs/guide/optimizer/index.html b/docs/guide/optimizer/index.html
index 1780d4eb..5226c580 100644
--- a/docs/guide/optimizer/index.html
+++ b/docs/guide/optimizer/index.html
@@ -5,8 +5,8 @@
<meta name="generator" content="Docusaurus v3.1.1">
<title data-rh="true">Data processing optimizer | Apache Wayang (incubating)</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://wayang.apache.org/docs/guide/optimizer"><meta data-rh="true" property="og:locale" content="en"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language [...]
<link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache Wayang (incubating) Atom Feed"><link rel="stylesheet" href="/assets/css/styles.ecf70413.css">
-<script src="/assets/js/runtime~main.c0fb4924.js" defer="defer"></script>
-<script src="/assets/js/main.bb71bd6f.js" defer="defer"></script>
+<script src="/assets/js/runtime~main.c6c8cd99.js" defer="defer"></script>
+<script src="/assets/js/main.fa771859.js" defer="defer"></script>
</head>
<body class="navigation-with-keyboard">
<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){try{return new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}}()||function(){try{return localStorage.getItem("theme")}catch(t){}}();t(null!==e?e:"light")}(),function(){try{const a=new URLSearchParams(window.location.search).entries();for(var[t,e]of a)if(t.startsWith("docusaurus-data-")){var n=t.replace("docusaurus-data-","data-");document.documentElement.se [...]
diff --git a/docs/introduction/about/index.html b/docs/introduction/about/index.html
index df463bfd..c836eafc 100644
--- a/docs/introduction/about/index.html
+++ b/docs/introduction/about/index.html
@@ -5,8 +5,8 @@
<meta name="generator" content="Docusaurus v3.1.1">
<title data-rh="true">What is Wayang? | Apache Wayang (incubating)</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://wayang.apache.org/docs/introduction/about"><meta data-rh="true" property="og:locale" content="en"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" conte [...]
<link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache Wayang (incubating) Atom Feed"><link rel="stylesheet" href="/assets/css/styles.ecf70413.css">
-<script src="/assets/js/runtime~main.c0fb4924.js" defer="defer"></script>
-<script src="/assets/js/main.bb71bd6f.js" defer="defer"></script>
+<script src="/assets/js/runtime~main.c6c8cd99.js" defer="defer"></script>
+<script src="/assets/js/main.fa771859.js" defer="defer"></script>
</head>
<body class="navigation-with-keyboard">
<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){try{return new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}}()||function(){try{return localStorage.getItem("theme")}catch(t){}}();t(null!==e?e:"light")}(),function(){try{const a=new URLSearchParams(window.location.search).entries();for(var[t,e]of a)if(t.startsWith("docusaurus-data-")){var n=t.replace("docusaurus-data-","data-");document.documentElement.se [...]
diff --git a/docs/introduction/benchmark/index.html b/docs/introduction/benchmark/index.html
index eb73aff8..546da78c 100644
--- a/docs/introduction/benchmark/index.html
+++ b/docs/introduction/benchmark/index.html
@@ -5,8 +5,8 @@
<meta name="generator" content="Docusaurus v3.1.1">
<title data-rh="true">Benchmarking Wayang | Apache Wayang (incubating)</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://wayang.apache.org/docs/introduction/benchmark"><meta data-rh="true" property="og:locale" content="en"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:languag [...]
<link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache Wayang (incubating) Atom Feed"><link rel="stylesheet" href="/assets/css/styles.ecf70413.css">
-<script src="/assets/js/runtime~main.c0fb4924.js" defer="defer"></script>
-<script src="/assets/js/main.bb71bd6f.js" defer="defer"></script>
+<script src="/assets/js/runtime~main.c6c8cd99.js" defer="defer"></script>
+<script src="/assets/js/main.fa771859.js" defer="defer"></script>
</head>
<body class="navigation-with-keyboard">
<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){try{return new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}}()||function(){try{return localStorage.getItem("theme")}catch(t){}}();t(null!==e?e:"light")}(),function(){try{const a=new URLSearchParams(window.location.search).entries();for(var[t,e]of a)if(t.startsWith("docusaurus-data-")){var n=t.replace("docusaurus-data-","data-");document.documentElement.se [...]
diff --git a/docs/introduction/features/index.html b/docs/introduction/features/index.html
index 71b1a2dc..46be806f 100644
--- a/docs/introduction/features/index.html
+++ b/docs/introduction/features/index.html
@@ -5,8 +5,8 @@
<meta name="generator" content="Docusaurus v3.1.1">
<title data-rh="true">Features | Apache Wayang (incubating)</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://wayang.apache.org/docs/introduction/features"><meta data-rh="true" property="og:locale" content="en"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content=" [...]
<link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache Wayang (incubating) Atom Feed"><link rel="stylesheet" href="/assets/css/styles.ecf70413.css">
-<script src="/assets/js/runtime~main.c0fb4924.js" defer="defer"></script>
-<script src="/assets/js/main.bb71bd6f.js" defer="defer"></script>
+<script src="/assets/js/runtime~main.c6c8cd99.js" defer="defer"></script>
+<script src="/assets/js/main.fa771859.js" defer="defer"></script>
</head>
<body class="navigation-with-keyboard">
<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){try{return new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}}()||function(){try{return localStorage.getItem("theme")}catch(t){}}();t(null!==e?e:"light")}(),function(){try{const a=new URLSearchParams(window.location.search).entries();for(var[t,e]of a)if(t.startsWith("docusaurus-data-")){var n=t.replace("docusaurus-data-","data-");document.documentElement.se [...]
diff --git a/docs/start/download/index.html b/docs/start/download/index.html
index c626706b..8ee4bc91 100644
--- a/docs/start/download/index.html
+++ b/docs/start/download/index.html
@@ -5,8 +5,8 @@
<meta name="generator" content="Docusaurus v3.1.1">
<title data-rh="true">Download Apache Wayang | Apache Wayang (incubating)</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://wayang.apache.org/docs/start/download"><meta data-rh="true" property="og:locale" content="en"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" co [...]
<link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache Wayang (incubating) Atom Feed"><link rel="stylesheet" href="/assets/css/styles.ecf70413.css">
-<script src="/assets/js/runtime~main.c0fb4924.js" defer="defer"></script>
-<script src="/assets/js/main.bb71bd6f.js" defer="defer"></script>
+<script src="/assets/js/runtime~main.c6c8cd99.js" defer="defer"></script>
+<script src="/assets/js/main.fa771859.js" defer="defer"></script>
</head>
<body class="navigation-with-keyboard">
<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){try{return new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}}()||function(){try{return localStorage.getItem("theme")}catch(t){}}();t(null!==e?e:"light")}(),function(){try{const a=new URLSearchParams(window.location.search).entries();for(var[t,e]of a)if(t.startsWith("docusaurus-data-")){var n=t.replace("docusaurus-data-","data-");document.documentElement.se [...]
diff --git a/index.html b/index.html
index 2f78e9e5..d072aa39 100644
--- a/index.html
+++ b/index.html
@@ -5,8 +5,8 @@
<meta name="generator" content="Docusaurus v3.1.1">
<title data-rh="true">Apache Wayang (incubating) | Apache Wayang (incubating)</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://wayang.apache.org/"><meta data-rh="true" property="og:locale" content="en"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docusaurus_tag" content="default"><me [...]
<link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache Wayang (incubating) Atom Feed"><link rel="stylesheet" href="/assets/css/styles.ecf70413.css">
-<script src="/assets/js/runtime~main.c0fb4924.js" defer="defer"></script>
-<script src="/assets/js/main.bb71bd6f.js" defer="defer"></script>
+<script src="/assets/js/runtime~main.c6c8cd99.js" defer="defer"></script>
+<script src="/assets/js/main.fa771859.js" defer="defer"></script>
</head>
<body class="navigation-with-keyboard">
<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){try{return new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}}()||function(){try{return localStorage.getItem("theme")}catch(t){}}();t(null!==e?e:"light")}(),function(){try{const a=new URLSearchParams(window.location.search).entries();for(var[t,e]of a)if(t.startsWith("docusaurus-data-")){var n=t.replace("docusaurus-data-","data-");document.documentElement.se [...]
diff --git a/lunr-index-1709549570701.json b/lunr-index-1709549570701.json
deleted file mode 100644
index edf1696d..00000000
--- a/lunr-index-1709549570701.json
+++ /dev/null
@@ -1 +0,0 @@
-{"version":"2.3.9","fields":["title","content","keywords"],"fieldVectors":[["title/0",[0,732.682,1,676.356]],["content/0",[]],["keywords/0",[]],["title/1",[2,1110.079]],["content/1",[3,6.616,4,9.596,5,5.657,6,11.665,7,11.665,8,7.104,9,11.665,10,11.665,11,10.403,12,4.12,13,9.264,14,7.104,15,11.665,16,11.665]],["keywords/1",[]],["title/2",[17,808.095,18,414.109]],["content/2",[]],["keywords/2",[]],["title/3",[19,691.329,20,287.876,21,77.225]],["content/3",[3,2.42,5,2.517,12,1.833,14,3.161, [...]
\ No newline at end of file
diff --git a/lunr-index-1709718629629.json b/lunr-index-1709718629629.json
new file mode 100644
index 00000000..9d5ed007
--- /dev/null
+++ b/lunr-index-1709718629629.json
@@ -0,0 +1 @@
+{"version":"2.3.9","fields":["title","content","keywords"],"fieldVectors":[["title/0",[0,167.422,1,302.596,2,516.393,3,49.045,4,302.596,5,318.023]],["content/0",[]],["keywords/0",[]],["title/1",[0,98.237,1,277.399,6,326.586,7,264.831,8,162.494,9,291.541,10,291.541,11,326.586]],["content/1",[0,1.853,3,1.383,7,6.731,9,7.41,10,5.5,12,5.233,13,4.853,14,7.124,15,4.411,16,2.441,17,7.841,18,7.841,19,7.612,20,6.588,21,3.356,22,4.996,23,3.575,24,6.161,25,7.124,26,5.805,27,4.58,28,7.821,29,5.5,30, [...]
\ No newline at end of file
diff --git a/lunr-index.json b/lunr-index.json
index edf1696d..9d5ed007 100644
--- a/lunr-index.json
+++ b/lunr-index.json
@@ -1 +1 @@
-{"version":"2.3.9","fields":["title","content","keywords"],"fieldVectors":[["title/0",[0,732.682,1,676.356]],["content/0",[]],["keywords/0",[]],["title/1",[2,1110.079]],["content/1",[3,6.616,4,9.596,5,5.657,6,11.665,7,11.665,8,7.104,9,11.665,10,11.665,11,10.403,12,4.12,13,9.264,14,7.104,15,11.665,16,11.665]],["keywords/1",[]],["title/2",[17,808.095,18,414.109]],["content/2",[]],["keywords/2",[]],["title/3",[19,691.329,20,287.876,21,77.225]],["content/3",[3,2.42,5,2.517,12,1.833,14,3.161, [...]
\ No newline at end of file
+{"version":"2.3.9","fields":["title","content","keywords"],"fieldVectors":[["title/0",[0,167.422,1,302.596,2,516.393,3,49.045,4,302.596,5,318.023]],["content/0",[]],["keywords/0",[]],["title/1",[0,98.237,1,277.399,6,326.586,7,264.831,8,162.494,9,291.541,10,291.541,11,326.586]],["content/1",[0,1.853,3,1.383,7,6.731,9,7.41,10,5.5,12,5.233,13,4.853,14,7.124,15,4.411,16,2.441,17,7.841,18,7.841,19,7.612,20,6.588,21,3.356,22,4.996,23,3.575,24,6.161,25,7.124,26,5.805,27,4.58,28,7.821,29,5.5,30, [...]
\ No newline at end of file
diff --git a/search-doc-1709549570701.json b/search-doc-1709549570701.json
deleted file mode 100644
index f42b2508..00000000
--- a/search-doc-1709549570701.json
+++ /dev/null
@@ -1 +0,0 @@
-{"searchDocs":[{"title":"Website updated","type":0,"sectionRef":"#","url":"/blog/website_update","content":"","keywords":"","version":null},{"title":"Cheatsheet","type":1,"pageTitle":"Website updated","url":"/blog/website_update#cheatsheet","content":" List: Line one Line one.oneLine one.two Line two Line two.oneLine two.two Line three ...... Another style for a list: Line oneLine twoLine three ","version":null,"tagName":"h2"},{"title":"Becoming a committer","type":0,"sectionRef":"#" [...]
\ No newline at end of file
diff --git a/search-doc-1709718629629.json b/search-doc-1709718629629.json
new file mode 100644
index 00000000..0610c8d7
--- /dev/null
+++ b/search-doc-1709718629629.json
@@ -0,0 +1 @@
+{"searchDocs":[{"title":"Apache Kafka meets Apache Wayang - Part 2","type":0,"sectionRef":"#","url":"/blog/Apache Kafka meets Apache Wayang","content":"","keywords":"","version":null},{"title":"Apache Wayang’s Read & Write Path for Kafka topics","type":1,"pageTitle":"Apache Kafka meets Apache Wayang - Part 2","url":"/blog/Apache Kafka meets Apache Wayang#apache-wayangs-read--write-path-for-kafka-topics","content":" To describe the read and write paths for data in the context of the crea [...]
\ No newline at end of file
diff --git a/search-doc.json b/search-doc.json
index f42b2508..0610c8d7 100644
--- a/search-doc.json
+++ b/search-doc.json
@@ -1 +1 @@
-{"searchDocs":[{"title":"Website updated","type":0,"sectionRef":"#","url":"/blog/website_update","content":"","keywords":"","version":null},{"title":"Cheatsheet","type":1,"pageTitle":"Website updated","url":"/blog/website_update#cheatsheet","content":" List: Line one Line one.oneLine one.two Line two Line two.oneLine two.two Line three ...... Another style for a list: Line oneLine twoLine three ","version":null,"tagName":"h2"},{"title":"Becoming a committer","type":0,"sectionRef":"#" [...]
\ No newline at end of file
+{"searchDocs":[{"title":"Apache Kafka meets Apache Wayang - Part 2","type":0,"sectionRef":"#","url":"/blog/Apache Kafka meets Apache Wayang","content":"","keywords":"","version":null},{"title":"Apache Wayang’s Read & Write Path for Kafka topics","type":1,"pageTitle":"Apache Kafka meets Apache Wayang - Part 2","url":"/blog/Apache Kafka meets Apache Wayang#apache-wayangs-read--write-path-for-kafka-topics","content":" To describe the read and write paths for data in the context of the crea [...]
\ No newline at end of file
diff --git a/sitemap.xml b/sitemap.xml
index 97c7dcc0..3d24067d 100644
--- a/sitemap.xml
+++ b/sitemap.xml
@@ -1 +1 @@
-<?xml version="1.0" encoding="UTF-8"?><urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9" xmlns:news="http://www.google.com/schemas/sitemap-news/0.9" xmlns:xhtml="http://www.w3.org/1999/xhtml" xmlns:image="http://www.google.com/schemas/sitemap-image/1.1" xmlns:video="http://www.google.com/schemas/sitemap-video/1.1"><url><loc>https://wayang.apache.org/blog</loc><changefreq>weekly</changefreq><priority>0.5</priority></url><url><loc>https://wayang.apache.org/blog/archive</loc><chang [...]
\ No newline at end of file
+<?xml version="1.0" encoding="UTF-8"?><urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9" xmlns:news="http://www.google.com/schemas/sitemap-news/0.9" xmlns:xhtml="http://www.w3.org/1999/xhtml" xmlns:image="http://www.google.com/schemas/sitemap-image/1.1" xmlns:video="http://www.google.com/schemas/sitemap-video/1.1"><url><loc>https://wayang.apache.org/blog</loc><changefreq>weekly</changefreq><priority>0.5</priority></url><url><loc>https://wayang.apache.org/blog/Apache%20Kafka%20me [...]
\ No newline at end of file