Added: samza/site/startup/quick-start/versioned/samza.html
URL: 
http://svn.apache.org/viewvc/samza/site/startup/quick-start/versioned/samza.html?rev=1855804&view=auto
==============================================================================
--- samza/site/startup/quick-start/versioned/samza.html (added)
+++ samza/site/startup/quick-start/versioned/samza.html Tue Mar 19 05:31:11 2019
@@ -0,0 +1,814 @@
+<!DOCTYPE html>
+<!--
+   Licensed to the Apache Software Foundation (ASF) under one or more
+   contributor license agreements.  See the NOTICE file distributed with
+   this work for additional information regarding copyright ownership.
+   The ASF licenses this file to You under the Apache License, Version 2.0
+   (the "License"); you may not use this file except in compliance with
+   the License.  You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+   Unless required by applicable law or agreed to in writing, software
+   distributed under the License is distributed on an "AS IS" BASIS,
+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+   See the License for the specific language governing permissions and
+   limitations under the License.
+-->
+<html lang="en">
+
+<head>
+  <meta http-equiv="X-UA-Compatible" content="IE=edge">
+  <meta name="viewport" content="width=device-width, initial-scale=1, 
shrink-to-fit=no">
+  <meta charset="utf-8">
+  <title>Samza - Samza Quick Start</title>
+  <link rel="apple-touch-icon-precomposed" sizes="57x57" 
href="/img/favicon/apple-touch-icon-57x57.png" />
+  <link rel="apple-touch-icon-precomposed" sizes="114x114" 
href="/img/favicon/apple-touch-icon-114x114.png" />
+  <link rel="apple-touch-icon-precomposed" sizes="72x72" 
href="/img/favicon/apple-touch-icon-72x72.png" />
+  <link rel="apple-touch-icon-precomposed" sizes="144x144" 
href="/img/favicon/apple-touch-icon-144x144.png" />
+  <link rel="apple-touch-icon-precomposed" sizes="60x60" 
href="/img/favicon/apple-touch-icon-60x60.png" />
+  <link rel="apple-touch-icon-precomposed" sizes="120x120" 
href="/img/favicon/apple-touch-icon-120x120.png" />
+  <link rel="apple-touch-icon-precomposed" sizes="76x76" 
href="/img/favicon/apple-touch-icon-76x76.png" />
+  <link rel="apple-touch-icon-precomposed" sizes="152x152" 
href="/img/favicon/apple-touch-icon-152x152.png" />
+  <link rel="icon" type="image/png" href="/img/favicon/favicon-196x196.png" 
sizes="196x196" />
+  <link rel="icon" type="image/png" href="/img/favicon/favicon-96x96.png" 
sizes="96x96" />
+  <link rel="icon" type="image/png" href="/img/favicon/favicon-32x32.png" 
sizes="32x32" />
+  <link rel="icon" type="image/png" href="/img/favicon/favicon-16x16.png" 
sizes="16x16" />
+  <link rel="icon" type="image/png" href="/img/favicon/favicon-128.png" 
sizes="128x128" />
+  <meta name="application-name" content="https://samza.apache.org"; />
+  <meta name="msapplication-TileColor" content="#FFFFFF" />
+  <meta name="msapplication-TileImage" 
content="/img/favicon/mstile-144x144.png" />
+  <meta name="msapplication-square70x70logo" 
content="/img/favicon/mstile-70x70.png" />
+  <meta name="msapplication-square150x150logo" 
content="/img/favicon/mstile-150x150.png" />
+  <meta name="msapplication-wide310x150logo" 
content="/img/favicon/mstile-310x150.png" />
+  <meta name="msapplication-square310x310logo" 
content="/img/favicon/mstile-310x310.png" />
+  <link href="/css/ionicons.min.css" rel="stylesheet">
+  <link href="/css/google-fonts.css" rel="stylesheet">
+  <link href="/css/syntax.css" rel="stylesheet"/>
+  <link rel="stylesheet" href="/css/main.new.css" />
+</head>
+
+<body class="page">
+  <!--
+   Licensed to the Apache Software Foundation (ASF) under one or more
+   contributor license agreements.  See the NOTICE file distributed with
+   this work for additional information regarding copyright ownership.
+   The ASF licenses this file to You under the Apache License, Version 2.0
+   (the "License"); you may not use this file except in compliance with
+   the License.  You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+   Unless required by applicable law or agreed to in writing, software
+   distributed under the License is distributed on an "AS IS" BASIS,
+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+   See the License for the specific language governing permissions and
+   limitations under the License.
+-->
+<div class="main-navigation" data-plugin="menu">
+  <div class="main-navigation__toggle" data-menu-closed>
+    <i class="icon ion-md-menu"></i>
+  </div>
+  <div class="main-navigation__toggle main-navigation__toggle--opened" 
data-menu-opened>
+    <i class="icon ion-md-close"></i>
+  </div>
+  <div class="main-navigation__inner">
+    <div class="main-navigation__logo">
+      <a href="/">
+        <img class="main-navigation__logo-img" src="/img/samza-logo.png" 
srcset="/img/samza-logo.png 1x, /img/[email protected] 2x"
+          alt="Samza Logo" />
+      </a>
+    </div>
+    <div class="main-navigation__items" data-menu-opened>
+      <a class="main-navigation__item" href="/">Home</a>
+      <a class="main-navigation__item" 
href="/learn/documentation/latest/core-concepts/core-concepts.html">Docs</a>
+      <a class="main-navigation__item" href="/powered-by/">Powered By</a>
+      <a class="main-navigation__item" href="/startup/download/">Downloads</a>
+      <a class="main-navigation__item" href="/blog/">Blog</a>
+      <div class="main-navigation__item main-navigation__item--group">
+        <div class="main-navigation__item-group-title">
+          Community
+          <i class="icon ion-md-arrow-dropdown"></i>
+        </div>
+        <div class="main-navigation__item-group-list">
+          <a class="main-navigation__item" 
href="/community/contact-us.html">Contact Us</a>
+          <a class="main-navigation__item" 
href="/contribute/contributors-corner.html">Contributor's Corner</a>
+          <a class="main-navigation__item" 
href="/community/committers.html">PMC Members and committers</a>
+          <a class="main-navigation__item" href="/meetups/">Talks and 
Meetups</a>
+        </div>
+      </div>
+    </div>
+  </div>
+</div>
+
+  <div class="container">
+      <div class="container__toggle">
+        <i class="icon ion-md-arrow-dropleft-circle 
container__toggle-icon"></i>
+        <i class="icon ion-md-arrow-dropright-circle container__toggle-icon 
container__toggle-icon--opened"></i>
+      </div>
+      
+      <!-- There is only one menu, but made it as a no-output collection to 
grab data only -->
+      
+        <!--
+   Licensed to the Apache Software Foundation (ASF) under one or more
+   contributor license agreements.  See the NOTICE file distributed with
+   this work for additional information regarding copyright ownership.
+   The ASF licenses this file to You under the Apache License, Version 2.0
+   (the "License"); you may not use this file except in compliance with
+   the License.  You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+   Unless required by applicable law or agreed to in writing, software
+   distributed under the License is distributed on an "AS IS" BASIS,
+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+   See the License for the specific language governing permissions and
+   limitations under the License.
+-->
+
+
+<div class="side-navigation">
+
+  
+
+    
+
+    
+    <!-- Start Group -->
+    
+    <div class="side-navigation__group side-navigation__group--has-nested" 
data-plugin="sub-menu" 
data-sub-menu-show-class="side-navigation__group--has-nested-visible">
+    
+
+    <!-- Make menu_title, and start items group if needed -->
+    
+      <div class="side-navigation__group-title">
+        <i class="side-navigation__group-title-icon icon 
ion-md-arrow-dropdown"></i>
+        Getting Started
+      </div>
+      <div class="side-navigation__group-items " data-sub-menu >
+    
+
+    <!-- Handle sub navigation items from data -->
+    
+      
+        
+      <a class="side-navigation__group-item" data-match-active="" 
href="/startup/quick-start/latest/">QuickStart</a>
+      
+        
+      <a class="side-navigation__group-item" data-match-active="" 
href="/startup/code-examples/latest/">Code Examples</a>
+      
+
+    
+
+    <!-- Handle sub nagivation from site collections -->
+    
+
+    <!-- Close sub nav group -->
+    
+      </div>
+    
+
+    <!-- Close menu group -->
+    </div>
+
+  
+
+    
+
+    
+    <!-- Start Group -->
+    
+    <div class="side-navigation__group side-navigation__group--has-nested" 
data-plugin="sub-menu" 
data-sub-menu-show-class="side-navigation__group--has-nested-visible">
+    
+
+    <!-- Make menu_title, and start items group if needed -->
+    
+      <div class="side-navigation__group-title">
+        <i class="side-navigation__group-title-icon icon 
ion-md-arrow-dropdown"></i>
+        Documentation
+      </div>
+      <div class="side-navigation__group-items 
side-navigation__group-has-submenus" data-sub-menu 
data-documentation="/learn/documentation/latest/">
+    
+
+    <!-- Handle sub navigation items from data -->
+    
+
+    <!-- Handle sub nagivation from site collections -->
+    
+
+    <!-- Close sub nav group -->
+    
+      </div>
+    
+
+    <!-- Close menu group -->
+    </div>
+
+  
+
+    
+
+    
+    <!-- Start Group -->
+    
+    <div class="side-navigation__group side-navigation__group--has-nested" 
data-plugin="sub-menu" 
data-sub-menu-show-class="side-navigation__group--has-nested-visible">
+    
+
+    <!-- Make menu_title, and start items group if needed -->
+    
+      <div class="side-navigation__group-title">
+        <i class="side-navigation__group-title-icon icon 
ion-md-arrow-dropdown"></i>
+        Releases
+      </div>
+      <div class="side-navigation__group-items " data-sub-menu >
+    
+
+    <!-- Handle sub navigation items from data -->
+    
+      
+        
+      <a class="side-navigation__group-item" data-match-active="" 
href="/releases/1.0.0">1.0.0</a>
+      
+        
+      <a class="side-navigation__group-item" data-match-active="" 
href="/releases/0.14">0.14</a>
+      
+        
+      <a class="side-navigation__group-item" data-match-active="" 
href="/releases/0.13">0.13</a>
+      
+        
+      <a class="side-navigation__group-item" data-match-active="" 
href="/releases/0.12">0.12</a>
+      
+        
+      <a class="side-navigation__group-item" data-match-active="" 
href="/releases/0.11">0.11</a>
+      
+        
+      <a class="side-navigation__group-item" data-match-active="" 
href="/releases/0.10">0.10</a>
+      
+
+    
+
+    <!-- Handle sub nagivation from site collections -->
+    
+
+    <!-- Close sub nav group -->
+    
+      </div>
+    
+
+    <!-- Close menu group -->
+    </div>
+
+  
+
+    
+
+    
+    <!-- Start Group -->
+    
+    <div class="side-navigation__group">
+    
+
+    <!-- Make menu_title, and start items group if needed -->
+    
+      <a class="side-navigation__group-title" data-plugin="top-menu" 
data-match-active="" href="/blog/">
+        Blog
+      </a>
+    
+
+    <!-- Handle sub navigation items from data -->
+    
+
+    <!-- Handle sub nagivation from site collections -->
+    
+
+    <!-- Close sub nav group -->
+    
+
+    <!-- Close menu group -->
+    </div>
+
+  
+
+    
+
+    
+    <!-- Start Group -->
+    
+    <div class="side-navigation__group side-navigation__group--has-nested" 
data-plugin="sub-menu" 
data-sub-menu-show-class="side-navigation__group--has-nested-visible">
+    
+
+    <!-- Make menu_title, and start items group if needed -->
+    
+      <div class="side-navigation__group-title">
+        <i class="side-navigation__group-title-icon icon 
ion-md-arrow-dropdown"></i>
+        Community
+      </div>
+      <div class="side-navigation__group-items " data-sub-menu >
+    
+
+    <!-- Handle sub navigation items from data -->
+    
+      
+        
+      <a class="side-navigation__group-item" data-match-active="" 
href="/community/contact-us.html">Contact Us</a>
+      
+        
+      <a class="side-navigation__group-item" data-match-active="" 
href="/contribute/contributors-corner.html">Contributor's Corner</a>
+      
+        
+      <a class="side-navigation__group-item" data-match-active="" 
href="/contribute/enhancement-proposal.html">Enhancement Proposal</a>
+      
+        
+      <a class="side-navigation__group-item" data-match-active="" 
href="/community/committers.html">PMC members & Committers</a>
+      
+        
+      <a class="side-navigation__group-item" data-match-active="" 
href="/meetups/">Talks and Meetups</a>
+      
+
+    
+
+    <!-- Handle sub nagivation from site collections -->
+    
+
+    <!-- Close sub nav group -->
+    
+      </div>
+    
+
+    <!-- Close menu group -->
+    </div>
+
+  
+
+    
+
+    
+    <!-- Start Group -->
+    
+    <div class="side-navigation__group side-navigation__group--has-nested" 
data-plugin="sub-menu" 
data-sub-menu-show-class="side-navigation__group--has-nested-visible">
+    
+
+    <!-- Make menu_title, and start items group if needed -->
+    
+      <div class="side-navigation__group-title">
+        <i class="side-navigation__group-title-icon icon 
ion-md-arrow-dropdown"></i>
+        Case Studies
+      </div>
+      <div class="side-navigation__group-items " data-sub-menu >
+    
+
+    <!-- Handle sub navigation items from data -->
+    
+      
+        
+      <a class="side-navigation__group-item" data-match-active="exact" 
href="/case-studies/">View All</a>
+      
+        
+          <hr>
+          
+
+    
+
+    <!-- Handle sub nagivation from site collections -->
+    
+
+      
+
+      
+
+      
+
+      
+        
+          
+        
+
+        
+        
+        
+
+        
+
+        
+
+        
+
+      <a class="side-navigation__group-item" href="/case-studies/ebay" 
data-match-active="">eBay</a>
+      
+        
+          
+        
+          
+        
+          
+        
+
+        
+        
+        
+
+        
+
+        
+
+        
+
+      <a class="side-navigation__group-item" href="/case-studies/tripadvisor" 
data-match-active="">TripAdvisor</a>
+      
+        
+          
+        
+
+        
+        
+        
+
+        
+
+        
+
+        
+
+      <a class="side-navigation__group-item" href="/case-studies/slack" 
data-match-active="">Slack</a>
+      
+        
+
+        
+        
+        
+
+        
+
+        
+
+        
+
+      <a class="side-navigation__group-item" href="/case-studies/optimizely" 
data-match-active="">Optimizely</a>
+      
+        
+
+        
+        
+        
+
+        
+
+        
+
+        
+
+      <a class="side-navigation__group-item" href="/case-studies/redfin" 
data-match-active="">Redfin</a>
+      
+        
+
+        
+        
+        
+
+        
+
+        
+
+        
+
+      <a class="side-navigation__group-item" href="/case-studies/linkedin" 
data-match-active="">LinkedIn</a>
+      
+        
+          
+        
+          
+        
+          
+
+    
+
+    <!-- Close sub nav group -->
+    
+      </div>
+    
+
+    <!-- Close menu group -->
+    </div>
+
+  
+
+</div>
+
+      
+      
+      <div class="section">
+        <div class="content">
+          
+          <h2>Samza Quick Start</h2>
+          
+
+          
+    
+          <!--
+   Licensed to the Apache Software Foundation (ASF) under one or more
+   contributor license agreements.  See the NOTICE file distributed with
+   this work for additional information regarding copyright ownership.
+   The ASF licenses this file to You under the Apache License, Version 2.0
+   (the "License"); you may not use this file except in compliance with
+   the License.  You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+   Unless required by applicable law or agreed to in writing, software
+   distributed under the License is distributed on an "AS IS" BASIS,
+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+   See the License for the specific language governing permissions and
+   limitations under the License.
+-->
+
+<p>In this tutorial, we will create our first Samza application - 
<code>WordCount</code>. This application will consume messages from a Kafka 
stream, tokenize them into individual words and count the frequency of each 
word.  Let us download the entire project from <a 
href="https://github.com/apache/samza-hello-samza/blob/latest/quickstart/wordcount.tar.gz";>here</a>.</p>
+
+<h3 id="setting-up-a-java-project">Setting up a Java Project</h3>
+
+<p>Observe the project structure as follows:</p>
+
+<figure class="highlight"><pre><code class="language-bash" 
data-lang="bash"><span></span>wordcount
+<span class="p">|</span>-- build.gradle
+<span class="p">|</span>-- gradle.properties
+<span class="p">|</span>-- scripts
+<span class="p">|</span>-- src
+    <span class="p">|</span>-- main
+        <span class="p">|</span>-- config
+        <span class="p">|</span>-- java
+            <span class="p">|</span>-- samzaapp
+                 <span class="p">|</span>-- 
WordCount.java</code></pre></figure>
+
+<p>You can build the project anytime by running:</p>
+
+<figure class="highlight"><pre><code class="language-bash" 
data-lang="bash"><span></span>&gt; <span class="nb">cd</span> wordcount
+&gt; gradle wrapper --gradle-version <span class="m">4</span>.9
+&gt; ./gradlew build</code></pre></figure>
+
+<h3 id="create-a-samza-streamapplication">Create a Samza StreamApplication</h3>
+
+<p>Now let’s write some code! An application written using Samza&rsquo;s <a 
href="/learn/documentation/latest/api/high-level-api.html">high-level API</a> 
implements the <a 
href="/learn/documentation/latest/api/javadocs/org/apache/samza/application/StreamApplication.html">StreamApplication</a>
 interface:</p>
+
+<figure class="highlight"><pre><code class="language-java" 
data-lang="java"><span></span><span class="kn">package</span> <span 
class="nn">samzaapp</span><span class="o">;</span>
+
+<span class="kn">import</span> <span 
class="nn">org.apache.samza.application.StreamApplication</span><span 
class="o">;</span>
+<span class="kn">import</span> <span 
class="nn">org.apache.samza.application.descriptors.StreamApplicationDescriptor</span><span
 class="o">;</span>
+
+<span class="kd">public</span> <span class="kd">class</span> <span 
class="nc">WordCount</span> <span class="kd">implements</span> <span 
class="n">StreamApplication</span> <span class="o">{</span>
+ <span class="nd">@Override</span>
+ <span class="kd">public</span> <span class="kt">void</span> <span 
class="nf">describe</span><span class="o">(</span><span 
class="n">StreamApplicationDescriptor</span> <span 
class="n">streamApplicationDescriptor</span><span class="o">)</span> <span 
class="o">{</span>
+ <span class="o">}</span>
+<span class="o">}</span></code></pre></figure>
+
+<p>The interface provides a single method named <code>describe()</code>, which 
allows us to define our inputs, the processing logic and outputs for our 
application. </p>
+
+<h3 id="describe-your-inputs-and-outputs">Describe your inputs and outputs</h3>
+
+<p>To interact with Kafka, we will first create a 
<code>KafkaSystemDescriptor</code> by providing the coordinates of the Kafka 
cluster. For each Kafka topic our application reads from, we create a 
<code>KafkaInputDescriptor</code> with the name of the topic and a serializer. 
Likewise, for each output topic, we instantiate a corresponding 
<code>KafkaOutputDescriptor</code>. </p>
+
+<figure class="highlight"><pre><code class="language-java" 
data-lang="java"><span></span><span class="kd">public</span> <span 
class="kd">class</span> <span class="nc">WordCount</span> <span 
class="kd">implements</span> <span class="n">StreamApplication</span> <span 
class="o">{</span>
+ <span class="kd">private</span> <span class="kd">static</span> <span 
class="kd">final</span> <span class="n">String</span> <span 
class="n">KAFKA_SYSTEM_NAME</span> <span class="o">=</span> <span 
class="s">&quot;kafka&quot;</span><span class="o">;</span>
+ <span class="kd">private</span> <span class="kd">static</span> <span 
class="kd">final</span> <span class="n">List</span><span 
class="o">&lt;</span><span class="n">String</span><span class="o">&gt;</span> 
<span class="n">KAFKA_CONSUMER_ZK_CONNECT</span> <span class="o">=</span> <span 
class="n">ImmutableList</span><span class="o">.</span><span 
class="na">of</span><span class="o">(</span><span 
class="s">&quot;localhost:2181&quot;</span><span class="o">);</span>
+ <span class="kd">private</span> <span class="kd">static</span> <span 
class="kd">final</span> <span class="n">List</span><span 
class="o">&lt;</span><span class="n">String</span><span class="o">&gt;</span> 
<span class="n">KAFKA_PRODUCER_BOOTSTRAP_SERVERS</span> <span 
class="o">=</span> <span class="n">ImmutableList</span><span 
class="o">.</span><span class="na">of</span><span class="o">(</span><span 
class="s">&quot;localhost:9092&quot;</span><span class="o">);</span>
+ <span class="kd">private</span> <span class="kd">static</span> <span 
class="kd">final</span> <span class="n">Map</span><span 
class="o">&lt;</span><span class="n">String</span><span class="o">,</span> 
<span class="n">String</span><span class="o">&gt;</span> <span 
class="n">KAFKA_DEFAULT_STREAM_CONFIGS</span> <span class="o">=</span> <span 
class="n">ImmutableMap</span><span class="o">.</span><span 
class="na">of</span><span class="o">(</span><span 
class="s">&quot;replication.factor&quot;</span><span class="o">,</span> <span 
class="s">&quot;1&quot;</span><span class="o">);</span>
+
+ <span class="kd">private</span> <span class="kd">static</span> <span 
class="kd">final</span> <span class="n">String</span> <span 
class="n">INPUT_STREAM_ID</span> <span class="o">=</span> <span 
class="s">&quot;sample-text&quot;</span><span class="o">;</span>
+ <span class="kd">private</span> <span class="kd">static</span> <span 
class="kd">final</span> <span class="n">String</span> <span 
class="n">OUTPUT_STREAM_ID</span> <span class="o">=</span> <span 
class="s">&quot;word-count-output&quot;</span><span class="o">;</span>
+
+ <span class="nd">@Override</span>
+ <span class="kd">public</span> <span class="kt">void</span> <span 
class="nf">describe</span><span class="o">(</span><span 
class="n">StreamApplicationDescriptor</span> <span 
class="n">streamApplicationDescriptor</span><span class="o">)</span> <span 
class="o">{</span>
+   <span class="c1">// Create a KafkaSystemDescriptor providing properties of 
the cluster</span>
+   <span class="n">KafkaSystemDescriptor</span> <span 
class="n">kafkaSystemDescriptor</span> <span class="o">=</span> <span 
class="k">new</span> <span class="n">KafkaSystemDescriptor</span><span 
class="o">(</span><span class="n">KAFKA_SYSTEM_NAME</span><span 
class="o">)</span>
+       <span class="o">.</span><span 
class="na">withConsumerZkConnect</span><span class="o">(</span><span 
class="n">KAFKA_CONSUMER_ZK_CONNECT</span><span class="o">)</span>
+       <span class="o">.</span><span 
class="na">withProducerBootstrapServers</span><span class="o">(</span><span 
class="n">KAFKA_PRODUCER_BOOTSTRAP_SERVERS</span><span class="o">)</span>
+       <span class="o">.</span><span 
class="na">withDefaultStreamConfigs</span><span class="o">(</span><span 
class="n">KAFKA_DEFAULT_STREAM_CONFIGS</span><span class="o">);</span>
+
+   <span class="c1">// For each input or output stream, create a 
KafkaInput/Output descriptor</span>
+   <span class="n">KafkaInputDescriptor</span><span class="o">&lt;</span><span 
class="n">KV</span><span class="o">&lt;</span><span 
class="n">String</span><span class="o">,</span> <span 
class="n">String</span><span class="o">&gt;&gt;</span> <span 
class="n">inputDescriptor</span> <span class="o">=</span>
+       <span class="n">kafkaSystemDescriptor</span><span 
class="o">.</span><span class="na">getInputDescriptor</span><span 
class="o">(</span><span class="n">INPUT_STREAM_ID</span><span class="o">,</span>
+           <span class="n">KVSerde</span><span class="o">.</span><span 
class="na">of</span><span class="o">(</span><span class="k">new</span> <span 
class="n">StringSerde</span><span class="o">(),</span> <span 
class="k">new</span> <span class="n">StringSerde</span><span 
class="o">()));</span>
+   <span class="n">KafkaOutputDescriptor</span><span 
class="o">&lt;</span><span class="n">KV</span><span class="o">&lt;</span><span 
class="n">String</span><span class="o">,</span> <span 
class="n">String</span><span class="o">&gt;&gt;</span> <span 
class="n">outputDescriptor</span> <span class="o">=</span>
+       <span class="n">kafkaSystemDescriptor</span><span 
class="o">.</span><span class="na">getOutputDescriptor</span><span 
class="o">(</span><span class="n">OUTPUT_STREAM_ID</span><span 
class="o">,</span>
+           <span class="n">KVSerde</span><span class="o">.</span><span 
class="na">of</span><span class="o">(</span><span class="k">new</span> <span 
class="n">StringSerde</span><span class="o">(),</span> <span 
class="k">new</span> <span class="n">StringSerde</span><span 
class="o">()));</span>
+
+   <span class="c1">// Obtain a handle to a MessageStream that you can chain 
operations on</span>
+   <span class="n">MessageStream</span><span class="o">&lt;</span><span 
class="n">KV</span><span class="o">&lt;</span><span 
class="n">String</span><span class="o">,</span> <span 
class="n">String</span><span class="o">&gt;&gt;</span> <span 
class="n">lines</span> <span class="o">=</span> <span 
class="n">streamApplicationDescriptor</span><span class="o">.</span><span 
class="na">getInputStream</span><span class="o">(</span><span 
class="n">inputDescriptor</span><span class="o">);</span>
+   <span class="n">OutputStream</span><span class="o">&lt;</span><span 
class="n">KV</span><span class="o">&lt;</span><span 
class="n">String</span><span class="o">,</span> <span 
class="n">String</span><span class="o">&gt;&gt;</span> <span 
class="n">counts</span> <span class="o">=</span> <span 
class="n">streamApplicationDescriptor</span><span class="o">.</span><span 
class="na">getOutputStream</span><span class="o">(</span><span 
class="n">outputDescriptor</span><span class="o">);</span>
+ <span class="o">}</span>
+<span class="o">}</span></code></pre></figure>
+
+<p>The above example creates a <a 
href="/learn/documentation/latest/api/javadocs/org/apache/samza/operators/MessageStream.html">MessageStream</a>
 which reads from an input topic named <code>sample-text</code>. It also 
defines an output stream that emits results to a topic named 
<code>word-count-output</code>. Next let’s add our processing logic. </p>
+
+<h3 id="add-word-count-processing-logic">Add word count processing logic</h3>
+
+<p>Kafka messages typically have a key and a value. Since we only care about 
the value here, we will apply the <code>map</code> operator on the input stream 
to extract the value. </p>
+
+<figure class="highlight"><pre><code class="language-java" 
data-lang="java"><span></span><span class="n">lines</span><span 
class="o">.</span><span class="na">map</span><span class="o">(</span><span 
class="n">kv</span> <span class="o">-&gt;</span> <span class="n">kv</span><span 
class="o">.</span><span class="na">value</span><span 
class="o">)</span></code></pre></figure>
+
+<p>Next, we will tokenize the message into individual words using the 
<code>flatmap</code> operator.</p>
+
+<figure class="highlight"><pre><code class="language-java" 
data-lang="java"><span></span><span class="o">.</span><span 
class="na">flatMap</span><span class="o">(</span><span class="n">s</span> <span 
class="o">-&gt;</span> <span class="n">Arrays</span><span 
class="o">.</span><span class="na">asList</span><span class="o">(</span><span 
class="n">s</span><span class="o">.</span><span class="na">split</span><span 
class="o">(</span><span class="s">&quot;\\W+&quot;</span><span 
class="o">)))</span></code></pre></figure>
+
+<p>We now need to group the words, aggregate their respective counts and 
periodically emit our results. For this, we will use Samza&rsquo;s 
session-windowing feature.</p>
+
+<figure class="highlight"><pre><code class="language-java" 
data-lang="java"><span></span><span class="o">.</span><span 
class="na">window</span><span class="o">(</span><span 
class="n">Windows</span><span class="o">.</span><span 
class="na">keyedSessionWindow</span><span class="o">(</span>
+   <span class="n">w</span> <span class="o">-&gt;</span> <span 
class="n">w</span><span class="o">,</span> <span class="n">Duration</span><span 
class="o">.</span><span class="na">ofSeconds</span><span 
class="o">(</span><span class="mi">5</span><span class="o">),</span> <span 
class="o">()</span> <span class="o">-&gt;</span> <span class="mi">0</span><span 
class="o">,</span> <span class="o">(</span><span class="n">m</span><span 
class="o">,</span> <span class="n">prevCount</span><span class="o">)</span> 
<span class="o">-&gt;</span> <span class="n">prevCount</span> <span 
class="o">+</span> <span class="mi">1</span><span class="o">,</span>
+   <span class="k">new</span> <span class="n">StringSerde</span><span 
class="o">(),</span> <span class="k">new</span> <span 
class="n">IntegerSerde</span><span class="o">()),</span> <span 
class="s">&quot;count&quot;</span><span class="o">)</span></code></pre></figure>
+
+<p>Let&rsquo;s walk through each of the parameters to the above 
<code>window</code> function:
+The first parameter is a &ldquo;key function&rdquo;, which defines the key to 
group messages by. In our case, we can simply use the word as the key. The 
second parameter is the windowing interval, which is set to 5 seconds. The 
third parameter is a function which provides the initial value for our 
aggregations. We can start with an initial count of zero for each word. The 
fourth parameter is an aggregation function for computing counts. The next two 
parameters specify the key and value serializers for our window. </p>
+
+<p>The output from the window operator is captured in a <a 
href="/learn/documentation/latest/api/javadocs/org/apache/samza/operators/windows/WindowPane.html">WindowPane</a>
 type, which contains the word as the key and its count as the value. We add a 
further <code>map</code> to format this into a <code>KV</code>, that we can 
send to our Kafka topic. To write our results to the output topic, we use the 
<code>sendTo</code> operator in Samza.</p>
+
+<figure class="highlight"><pre><code class="language-java" 
data-lang="java"><span></span><span class="o">.</span><span 
class="na">map</span><span class="o">(</span><span class="n">windowPane</span> 
<span class="o">-&gt;</span>
+   <span class="n">KV</span><span class="o">.</span><span 
class="na">of</span><span class="o">(</span><span 
class="n">windowPane</span><span class="o">.</span><span 
class="na">getKey</span><span class="o">().</span><span 
class="na">getKey</span><span class="o">(),</span>
+       <span class="n">windowPane</span><span class="o">.</span><span 
class="na">getKey</span><span class="o">().</span><span 
class="na">getKey</span><span class="o">()</span> <span class="o">+</span> 
<span class="s">&quot;: &quot;</span> <span class="o">+</span> <span 
class="n">windowPane</span><span class="o">.</span><span 
class="na">getMessage</span><span class="o">().</span><span 
class="na">toString</span><span class="o">()))</span>
+<span class="o">.</span><span class="na">sendTo</span><span 
class="o">(</span><span class="n">counts</span><span 
class="o">);</span></code></pre></figure>
+
+<p>The full processing logic looks like the following:</p>
+
+<figure class="highlight"><pre><code class="language-java" 
data-lang="java"><span></span><span class="n">lines</span>
+   <span class="o">.</span><span class="na">map</span><span 
class="o">(</span><span class="n">kv</span> <span class="o">-&gt;</span> <span 
class="n">kv</span><span class="o">.</span><span class="na">value</span><span 
class="o">)</span>
+   <span class="o">.</span><span class="na">flatMap</span><span 
class="o">(</span><span class="n">s</span> <span class="o">-&gt;</span> <span 
class="n">Arrays</span><span class="o">.</span><span 
class="na">asList</span><span class="o">(</span><span class="n">s</span><span 
class="o">.</span><span class="na">split</span><span class="o">(</span><span 
class="s">&quot;\\W+&quot;</span><span class="o">)))</span>
+   <span class="o">.</span><span class="na">window</span><span 
class="o">(</span><span class="n">Windows</span><span class="o">.</span><span 
class="na">keyedSessionWindow</span><span class="o">(</span>
+       <span class="n">w</span> <span class="o">-&gt;</span> <span 
class="n">w</span><span class="o">,</span> <span class="n">Duration</span><span 
class="o">.</span><span class="na">ofSeconds</span><span 
class="o">(</span><span class="mi">5</span><span class="o">),</span> <span 
class="o">()</span> <span class="o">-&gt;</span> <span class="mi">0</span><span 
class="o">,</span> <span class="o">(</span><span class="n">m</span><span 
class="o">,</span> <span class="n">prevCount</span><span class="o">)</span> 
<span class="o">-&gt;</span> <span class="n">prevCount</span> <span 
class="o">+</span> <span class="mi">1</span><span class="o">,</span>
+       <span class="k">new</span> <span class="n">StringSerde</span><span 
class="o">(),</span> <span class="k">new</span> <span 
class="n">IntegerSerde</span><span class="o">()),</span> <span 
class="s">&quot;count&quot;</span><span class="o">)</span>
+   <span class="o">.</span><span class="na">map</span><span 
class="o">(</span><span class="n">windowPane</span> <span class="o">-&gt;</span>
+       <span class="n">KV</span><span class="o">.</span><span 
class="na">of</span><span class="o">(</span><span 
class="n">windowPane</span><span class="o">.</span><span 
class="na">getKey</span><span class="o">().</span><span 
class="na">getKey</span><span class="o">(),</span>
+           <span class="n">windowPane</span><span class="o">.</span><span 
class="na">getKey</span><span class="o">().</span><span 
class="na">getKey</span><span class="o">()</span> <span class="o">+</span> 
<span class="s">&quot;: &quot;</span> <span class="o">+</span> <span 
class="n">windowPane</span><span class="o">.</span><span 
class="na">getMessage</span><span class="o">().</span><span 
class="na">toString</span><span class="o">()))</span>
+   <span class="o">.</span><span class="na">sendTo</span><span 
class="o">(</span><span class="n">counts</span><span 
class="o">);</span></code></pre></figure>
+
+<h3 id="configure-your-application">Configure your application</h3>
+
+<p>In this section, we will configure our word count example to run locally in 
a single JVM. Let us add a file named “word-count.properties” under the 
config folder. </p>
+
+<figure class="highlight"><pre><code class="language-jproperties" 
data-lang="jproperties"><span></span><span class="na">job.name</span><span 
class="o">=</span><span class="s">word-count</span>
+<span class="c"># Use a PassthroughJobCoordinator since there is no 
coordination needed</span>
+<span class="na">job.coordinator.factory</span><span class="o">=</span><span 
class="s">org.apache.samza.standalone.PassthroughJobCoordinatorFactory</span>
+<span class="na">job.coordination.utils.factory</span><span 
class="o">=</span><span 
class="s">org.apache.samza.standalone.PassthroughCoordinationUtilsFactory</span>
+
+<span class="na">job.changelog.system</span><span class="o">=</span><span 
class="s">kafka</span>
+
+<span class="c"># Use a single container to process all of the data</span>
+<span class="na">task.name.grouper.factory</span><span class="o">=</span><span 
class="s">org.apache.samza.container.grouper.task.SingleContainerGrouperFactory</span>
+<span class="na">processor.id</span><span class="o">=</span><span 
class="s">0</span>
+
+<span class="c"># Read from the beginning of the topic</span>
+<span class="na">systems.kafka.default.stream.samza.offset.default</span><span 
class="o">=</span><span class="s">oldest</span></code></pre></figure>
+
+<p>For more details on Samza&rsquo;s configs, feel free to check out the 
latest <a 
href="/learn/documentation/latest/jobs/configuration-table.html">configuration 
reference</a>.</p>
+
+<h3 id="run-your-application">Run your application</h3>
+
+<p>We are ready to add a <code>main()</code> function to the 
<code>WordCount</code> class. It parses the command-line arguments and 
instantiates a <code>LocalApplicationRunner</code> to execute the application 
locally.</p>
+
+<figure class="highlight"><pre><code class="language-java" 
data-lang="java"><span></span><span class="kd">public</span> <span 
class="kd">static</span> <span class="kt">void</span> <span 
class="nf">main</span><span class="o">(</span><span 
class="n">String</span><span class="o">[]</span> <span 
class="n">args</span><span class="o">)</span> <span class="o">{</span>
+ <span class="n">CommandLine</span> <span class="n">cmdLine</span> <span 
class="o">=</span> <span class="k">new</span> <span 
class="n">CommandLine</span><span class="o">();</span>
+ <span class="n">OptionSet</span> <span class="n">options</span> <span 
class="o">=</span> <span class="n">cmdLine</span><span class="o">.</span><span 
class="na">parser</span><span class="o">().</span><span 
class="na">parse</span><span class="o">(</span><span class="n">args</span><span 
class="o">);</span>
+ <span class="n">Config</span> <span class="n">config</span> <span 
class="o">=</span> <span class="n">cmdLine</span><span class="o">.</span><span 
class="na">loadConfig</span><span class="o">(</span><span 
class="n">options</span><span class="o">);</span>
+ <span class="n">LocalApplicationRunner</span> <span class="n">runner</span> 
<span class="o">=</span> <span class="k">new</span> <span 
class="n">LocalApplicationRunner</span><span class="o">(</span><span 
class="k">new</span> <span class="n">WordCount</span><span class="o">(),</span> 
<span class="n">config</span><span class="o">);</span>
+ <span class="n">runner</span><span class="o">.</span><span 
class="na">run</span><span class="o">();</span>
+ <span class="n">runner</span><span class="o">.</span><span 
class="na">waitForFinish</span><span class="o">();</span>
+<span class="o">}</span></code></pre></figure>
+
+<p>Before running <code>main()</code>, we will create our input Kafka topic 
and populate it with sample data. You can download the scripts to interact with 
Kafka along with the sample data from <a 
href="https://github.com/apache/samza-hello-samza/blob/latest/quickstart/wordcount.tar.gz";>here</a>.</p>
+
+<figure class="highlight"><pre><code class="language-bash" 
data-lang="bash"><span></span>&gt; ./scripts/grid install zookeeper <span 
class="o">&amp;&amp;</span> ./scripts/grid start zookeeper
+&gt; ./scripts/grid install kafka <span class="o">&amp;&amp;</span> 
./scripts/grid start kafka</code></pre></figure>
+
+<figure class="highlight"><pre><code class="language-bash" 
data-lang="bash"><span></span>&gt; ./deploy/kafka/bin/kafka-topics.sh --create 
--zookeeper localhost:2181 --topic sample-text --partition <span 
class="m">1</span> --replication-factor <span class="m">1</span>
+&gt; ./deploy/kafka/bin/kafka-console-producer.sh --topic sample-text --broker 
localhost:9092 &lt; ./sample-text.txt</code></pre></figure>
+
+<p>Let’s kick off our application and use gradle to run it. Alternately, you 
can also run it directly from your IDE, with the same program arguments.</p>
+
+<figure class="highlight"><pre><code class="language-bash" 
data-lang="bash"><span></span>&gt; <span class="nb">export</span> <span 
class="nv">BASE_DIR</span><span class="o">=</span><span 
class="sb">`</span><span class="nb">pwd</span><span class="sb">`</span>
+&gt; ./gradlew run --args<span class="o">=</span><span 
class="s2">&quot;--config-factory=org.apache.samza.config.factories.PropertiesConfigFactory
 --config-path=file://</span><span class="nv">$BASE_DIR</span><span 
class="s2">/src/main/config/word-count.properties&quot;</span></code></pre></figure>
+
+<p>The application will output to a Kafka topic named 
&ldquo;word-count-output&rdquo;. We will now fire up a Kafka consumer to read 
from this topic:</p>
+
+<figure class="highlight"><pre><code class="language-bash" 
data-lang="bash"><span></span>&gt;  
./deploy/kafka/bin/kafka-console-consumer.sh --topic word-count-output 
--zookeeper localhost:2181 --from-beginning</code></pre></figure>
+
+<p>It will show the counts for each word like the following:</p>
+
+<figure class="highlight"><pre><code class="language-bash" 
data-lang="bash"><span></span>well: <span class="m">4</span>
+complaining: <span class="m">1</span>
+die: <span class="m">3</span>
+but: <span class="m">22</span>
+not: <span class="m">50</span>
+truly: <span class="m">5</span>
+murmuring: <span class="m">1</span>
+satisfied: <span class="m">3</span>
+the: <span class="m">120</span>
+thy: <span class="m">8</span>
+gods: <span class="m">8</span>
+thankful: <span class="m">1</span>
+and: <span class="m">243</span>
+from: <span class="m">16</span></code></pre></figure>
+
+<p>Congratulations! You&rsquo;ve successfully run your first Samza 
application.</p>
+
+<h3 id="more-examples"><a href="/startup/code-examples/latest">More Examples 
&gt;&gt;</a></h3>
+
+           
+        </div>
+      </div>
+
+  </div>
+  
+
+  <!-- footer starts here -->
+
+  <!--
+   Licensed to the Apache Software Foundation (ASF) under one or more
+   contributor license agreements.  See the NOTICE file distributed with
+   this work for additional information regarding copyright ownership.
+   The ASF licenses this file to You under the Apache License, Version 2.0
+   (the "License"); you may not use this file except in compliance with
+   the License.  You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+   Unless required by applicable law or agreed to in writing, software
+   distributed under the License is distributed on an "AS IS" BASIS,
+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+   See the License for the specific language governing permissions and
+   limitations under the License.
+-->
+
+<footer>
+  <div class="footer-inner">
+    <div class="side-by-side">
+      <div>
+        <div class="footer__heading">Learn More</div>
+        <div class="footer__items">
+          <a class="footer__item" href="/meetups/">Meetups</a>
+          <a class="footer__item" href="/blog/">Blog</a>
+          <a class="footer__item" 
href="/learn/documentation/latest/introduction/background.html">About</a>
+        </div>
+      </div>
+      <div>
+        <div class="footer__heading">Community</div>
+        <div class="footer__items">
+          <a class="footer__item" href="/community/contact-us.html">Contact 
Us</a>
+          <a class="footer__item" 
href="/contribute/contributors-corner.html">Contributors' Corner</a>
+          <a class="footer__item" href="/community/committers.html">PMC 
members and committers</a>
+          <a class="footer__item" href="/powered-by/">Powered By</a>
+        </div>
+      </div>
+
+      <div>
+        <div class="quick-links">
+          <a class="quick-link" href="/startup/download" target="_blank">
+            <i class="icon ion-md-download"></i>
+          </a>
+          <a class="quick-link" 
href="https://git-wip-us.apache.org/repos/asf?p=samza.git;a=tree"; 
target="_blank">
+            <i class="icon ion-md-code"></i>
+          </a>
+          <a class="quick-link" href="https://twitter.com/samzastream"; 
target="_blank">
+            <i class="icon ion-logo-twitter"></i>
+          </a>
+        </div>
+
+        <p>
+          <script>document.write(new Date().getFullYear());</script> &copy; 
samza.apache.org</p>
+      </div>
+
+    </div>
+  </div>
+
+</footer>
+
+
+<script>
+  var tryFile = function (url, cb) {
+    var myRequest = new Request(url);
+    fetch(myRequest).then((response, cb) => {
+      console.log(response.status); // returns 200
+      cb(response.status != 404);
+    });
+  }
+
+  tryFile(window.location.pathname, function (status) {
+    // do something with the status
+    console.log(status);
+  });
+</script>
+
+
+<!-- Google Analytics -->
+<script>
+  (function (i, s, o, g, r, a, m) {
+    i['GoogleAnalyticsObject'] = r; i[r] = i[r] || function () {
+      (i[r].q = i[r].q || []).push(arguments)
+    }, i[r].l = 1 * new Date(); a = s.createElement(o),
+      m = s.getElementsByTagName(o)[0]; a.async = 1; a.src = g; 
m.parentNode.insertBefore(a, m)
+  })(window, document, 'script', '//www.google-analytics.com/analytics.js', 
'ga');
+
+  ga('create', 'UA-43122768-1', 'apache.org');
+  ga('send', 'pageview');
+
+</script>
+<script src="/js/main.new.js"></script>
+
+</body>
+
+</html>
\ No newline at end of file

Modified: samza/site/talks/index.html
URL: 
http://svn.apache.org/viewvc/samza/site/talks/index.html?rev=1855804&r1=1855803&r2=1855804&view=diff
==============================================================================
--- samza/site/talks/index.html (original)
+++ samza/site/talks/index.html Tue Mar 19 05:31:11 2019
@@ -81,7 +81,7 @@
     </div>
     <div class="main-navigation__items" data-menu-opened>
       <a class="main-navigation__item" href="/">Home</a>
-      <a class="main-navigation__item" 
href="/learn/documentation/1.0.0/core-concepts/core-concepts.html">Docs</a>
+      <a class="main-navigation__item" 
href="/learn/documentation/latest/core-concepts/core-concepts.html">Docs</a>
       <a class="main-navigation__item" href="/powered-by/">Powered By</a>
       <a class="main-navigation__item" href="/startup/download/">Downloads</a>
       <a class="main-navigation__item" href="/blog/">Blog</a>
@@ -152,10 +152,10 @@
     
       
         
-      <a class="side-navigation__group-item" data-match-active="" 
href="/startup/quick-start/1.0.0/">QuickStart</a>
+      <a class="side-navigation__group-item" data-match-active="" 
href="/startup/quick-start/latest/">QuickStart</a>
       
         
-      <a class="side-navigation__group-item" data-match-active="" 
href="/startup/code-examples/1.0.0/">Code Examples</a>
+      <a class="side-navigation__group-item" data-match-active="" 
href="/startup/code-examples/latest/">Code Examples</a>
       
 
     
@@ -187,7 +187,7 @@
         <i class="side-navigation__group-title-icon icon 
ion-md-arrow-dropdown"></i>
         Documentation
       </div>
-      <div class="side-navigation__group-items 
side-navigation__group-has-submenus" data-sub-menu 
data-documentation="/learn/documentation/1.0.0/">
+      <div class="side-navigation__group-items 
side-navigation__group-has-submenus" data-sub-menu 
data-documentation="/learn/documentation/latest/">
     
 
     <!-- Handle sub navigation items from data -->
@@ -781,7 +781,7 @@
         <div class="footer__items">
           <a class="footer__item" href="/meetups/">Meetups</a>
           <a class="footer__item" href="/blog/">Blog</a>
-          <a class="footer__item" 
href="/learn/documentation/1.0.0/introduction/background.html">About</a>
+          <a class="footer__item" 
href="/learn/documentation/latest/introduction/background.html">About</a>
         </div>
       </div>
       <div>


Reply via email to