CINXE.COM
Going realtime with Kafka and Samza at Improve Digital
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" lang="en-US" xml:lang="en-US"> <head profile="http://gmpg.org/xfn/11"> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><script type="text/javascript">(window.NREUM||(NREUM={})).loader_config={licenseKey:"18df73b2f0",applicationID:"22366760"};window.NREUM||(NREUM={}),__nr_require=function(e,t,n){function r(n){if(!t[n]){var i=t[n]={exports:{}};e[n][0].call(i.exports,function(t){var i=e[n][1][t];return r(i||t)},i,i.exports)}return t[n].exports}if("function"==typeof __nr_require)return __nr_require;for(var i=0;i<n.length;i++)r(n[i]);return r}({1:[function(e,t,n){function r(){}function i(e,t,n){return function(){return o(e,[u.now()].concat(c(arguments)),t?null:this,n),t?void 0:this}}var o=e("handle"),a=e(6),c=e(7),f=e("ee").get("tracer"),u=e("loader"),s=NREUM;"undefined"==typeof window.newrelic&&(newrelic=s);var d=["setPageViewName","setCustomAttribute","setErrorHandler","finished","addToTrace","inlineHit","addRelease"],p="api-",l=p+"ixn-";a(d,function(e,t){s[t]=i(p+t,!0,"api")}),s.addPageAction=i(p+"addPageAction",!0),s.setCurrentRouteName=i(p+"routeName",!0),t.exports=newrelic,s.interaction=function(){return(new r).get()};var m=r.prototype={createTracer:function(e,t){var n={},r=this,i="function"==typeof t;return o(l+"tracer",[u.now(),e,n],r),function(){if(f.emit((i?"":"no-")+"fn-start",[u.now(),r,i],n),i)try{return t.apply(this,arguments)}catch(e){throw f.emit("fn-err",[arguments,this,e],n),e}finally{f.emit("fn-end",[u.now()],n)}}}};a("actionText,setName,setAttribute,save,ignore,onEnd,getContext,end,get".split(","),function(e,t){m[t]=i(l+t)}),newrelic.noticeError=function(e,t){"string"==typeof e&&(e=new Error(e)),o("err",[e,u.now(),!1,t])}},{}],2:[function(e,t,n){function r(){return c.exists&&performance.now?Math.round(performance.now()):(o=Math.max((new Date).getTime(),o))-a}function i(){return o}var o=(new Date).getTime(),a=o,c=e(8);t.exports=r,t.exports.offset=a,t.exports.getLastTimestamp=i},{}],3:[function(e,t,n){function r(e,t){var n=e.getEntries();n.forEach(function(e){"first-paint"===e.name?d("timing",["fp",Math.floor(e.startTime)]):"first-contentful-paint"===e.name&&d("timing",["fcp",Math.floor(e.startTime)])})}function i(e,t){var n=e.getEntries();n.length>0&&d("lcp",[n[n.length-1]])}function o(e){e.getEntries().forEach(function(e){e.hadRecentInput||d("cls",[e])})}function a(e){if(e instanceof m&&!g){var t=Math.round(e.timeStamp),n={type:e.type};t<=p.now()?n.fid=p.now()-t:t>p.offset&&t<=Date.now()?(t-=p.offset,n.fid=p.now()-t):t=p.now(),g=!0,d("timing",["fi",t,n])}}function c(e){d("pageHide",[p.now(),e])}if(!("init"in NREUM&&"page_view_timing"in NREUM.init&&"enabled"in NREUM.init.page_view_timing&&NREUM.init.page_view_timing.enabled===!1)){var f,u,s,d=e("handle"),p=e("loader"),l=e(5),m=NREUM.o.EV;if("PerformanceObserver"in window&&"function"==typeof window.PerformanceObserver){f=new PerformanceObserver(r);try{f.observe({entryTypes:["paint"]})}catch(v){}u=new PerformanceObserver(i);try{u.observe({entryTypes:["largest-contentful-paint"]})}catch(v){}s=new PerformanceObserver(o);try{s.observe({type:"layout-shift",buffered:!0})}catch(v){}}if("addEventListener"in document){var g=!1,y=["click","keydown","mousedown","pointerdown","touchstart"];y.forEach(function(e){document.addEventListener(e,a,!1)})}l(c)}},{}],4:[function(e,t,n){function r(e,t){if(!i)return!1;if(e!==i)return!1;if(!t)return!0;if(!o)return!1;for(var n=o.split("."),r=t.split("."),a=0;a<r.length;a++)if(r[a]!==n[a])return!1;return!0}var i=null,o=null,a=/Version\/(\S+)\s+Safari/;if(navigator.userAgent){var c=navigator.userAgent,f=c.match(a);f&&c.indexOf("Chrome")===-1&&c.indexOf("Chromium")===-1&&(i="Safari",o=f[1])}t.exports={agent:i,version:o,match:r}},{}],5:[function(e,t,n){function r(e){function t(){e(a&&document[a]?document[a]:document[i]?"hidden":"visible")}"addEventListener"in document&&o&&document.addEventListener(o,t,!1)}t.exports=r;var i,o,a;"undefined"!=typeof document.hidden?(i="hidden",o="visibilitychange",a="visibilityState"):"undefined"!=typeof document.msHidden?(i="msHidden",o="msvisibilitychange"):"undefined"!=typeof document.webkitHidden&&(i="webkitHidden",o="webkitvisibilitychange",a="webkitVisibilityState")},{}],6:[function(e,t,n){function r(e,t){var n=[],r="",o=0;for(r in e)i.call(e,r)&&(n[o]=t(r,e[r]),o+=1);return n}var i=Object.prototype.hasOwnProperty;t.exports=r},{}],7:[function(e,t,n){function r(e,t,n){t||(t=0),"undefined"==typeof n&&(n=e?e.length:0);for(var r=-1,i=n-t||0,o=Array(i<0?0:i);++r<i;)o[r]=e[t+r];return o}t.exports=r},{}],8:[function(e,t,n){t.exports={exists:"undefined"!=typeof window.performance&&window.performance.timing&&"undefined"!=typeof window.performance.timing.navigationStart}},{}],ee:[function(e,t,n){function r(){}function i(e){function t(e){return e&&e instanceof r?e:e?f(e,c,o):o()}function n(n,r,i,o){if(!p.aborted||o){e&&e(n,r,i);for(var a=t(i),c=v(n),f=c.length,u=0;u<f;u++)c[u].apply(a,r);var d=s[w[n]];return d&&d.push([b,n,r,a]),a}}function l(e,t){h[e]=v(e).concat(t)}function m(e,t){var n=h[e];if(n)for(var r=0;r<n.length;r++)n[r]===t&&n.splice(r,1)}function v(e){return h[e]||[]}function g(e){return d[e]=d[e]||i(n)}function y(e,t){u(e,function(e,n){t=t||"feature",w[n]=t,t in s||(s[t]=[])})}var h={},w={},b={on:l,addEventListener:l,removeEventListener:m,emit:n,get:g,listeners:v,context:t,buffer:y,abort:a,aborted:!1};return b}function o(){return new r}function a(){(s.api||s.feature)&&(p.aborted=!0,s=p.backlog={})}var c="nr@context",f=e("gos"),u=e(6),s={},d={},p=t.exports=i();p.backlog=s},{}],gos:[function(e,t,n){function r(e,t,n){if(i.call(e,t))return e[t];var r=n();if(Object.defineProperty&&Object.keys)try{return Object.defineProperty(e,t,{value:r,writable:!0,enumerable:!1}),r}catch(o){}return e[t]=r,r}var i=Object.prototype.hasOwnProperty;t.exports=r},{}],handle:[function(e,t,n){function r(e,t,n,r){i.buffer([e],r),i.emit(e,t,n)}var i=e("ee").get("handle");t.exports=r,r.ee=i},{}],id:[function(e,t,n){function r(e){var t=typeof e;return!e||"object"!==t&&"function"!==t?-1:e===window?0:a(e,o,function(){return i++})}var i=1,o="nr@id",a=e("gos");t.exports=r},{}],loader:[function(e,t,n){function r(){if(!E++){var e=b.info=NREUM.info,t=p.getElementsByTagName("script")[0];if(setTimeout(u.abort,3e4),!(e&&e.licenseKey&&e.applicationID&&t))return u.abort();f(h,function(t,n){e[t]||(e[t]=n)});var n=a();c("mark",["onload",n+b.offset],null,"api"),c("timing",["load",n]);var r=p.createElement("script");r.src="https://"+e.agent,t.parentNode.insertBefore(r,t)}}function i(){"complete"===p.readyState&&o()}function o(){c("mark",["domContent",a()+b.offset],null,"api")}var a=e(2),c=e("handle"),f=e(6),u=e("ee"),s=e(4),d=window,p=d.document,l="addEventListener",m="attachEvent",v=d.XMLHttpRequest,g=v&&v.prototype;NREUM.o={ST:setTimeout,SI:d.setImmediate,CT:clearTimeout,XHR:v,REQ:d.Request,EV:d.Event,PR:d.Promise,MO:d.MutationObserver};var y=""+location,h={beacon:"bam.nr-data.net",errorBeacon:"bam.nr-data.net",agent:"js-agent.newrelic.com/nr-1184.min.js"},w=v&&g&&g[l]&&!/CriOS/.test(navigator.userAgent),b=t.exports={offset:a.getLastTimestamp(),now:a,origin:y,features:{},xhrWrappable:w,userAgent:s};e(1),e(3),p[l]?(p[l]("DOMContentLoaded",o,!1),d[l]("load",r,!1)):(p[m]("onreadystatechange",i),d[m]("onload",r)),c("mark",["firstbyte",a.getLastTimestamp()],null,"api");var E=0},{}],"wrap-function":[function(e,t,n){function r(e){return!(e&&e instanceof Function&&e.apply&&!e[a])}var i=e("ee"),o=e(7),a="nr@original",c=Object.prototype.hasOwnProperty,f=!1;t.exports=function(e,t){function n(e,t,n,i){function nrWrapper(){var r,a,c,f;try{a=this,r=o(arguments),c="function"==typeof n?n(r,a):n||{}}catch(u){p([u,"",[r,a,i],c])}s(t+"start",[r,a,i],c);try{return f=e.apply(a,r)}catch(d){throw s(t+"err",[r,a,d],c),d}finally{s(t+"end",[r,a,f],c)}}return r(e)?e:(t||(t=""),nrWrapper[a]=e,d(e,nrWrapper),nrWrapper)}function u(e,t,i,o){i||(i="");var a,c,f,u="-"===i.charAt(0);for(f=0;f<t.length;f++)c=t[f],a=e[c],r(a)||(e[c]=n(a,u?c+i:i,o,c))}function s(n,r,i){if(!f||t){var o=f;f=!0;try{e.emit(n,r,i,t)}catch(a){p([a,n,r,i])}f=o}}function d(e,t){if(Object.defineProperty&&Object.keys)try{var n=Object.keys(e);return n.forEach(function(n){Object.defineProperty(t,n,{get:function(){return e[n]},set:function(t){return e[n]=t,t}})}),t}catch(r){p([r])}for(var i in e)c.call(e,i)&&(t[i]=e[i]);return t}function p(t){try{e.emit("internal-error",t)}catch(n){}}return e||(e=i),n.inPlace=u,n.flag=a,n}},{}]},{},["loader"]);</script> <title>Going realtime with Kafka and Samza at Improve Digital</title> <meta name="robots" content="noodp,noydir" /> <meta name="viewport" content="width=device-width, initial-scale=1.0"/><link rel='dns-prefetch' href='//static.zeroturnaround.com' /> <link rel='dns-prefetch' href='' /> <link rel='dns-prefetch' href='//s.w.org' /> <link rel="alternate" type="application/rss+xml" title="GeekOUT EE 2015 » Feed" href="/feed/" /> <link rel="alternate" type="application/rss+xml" title="GeekOUT EE 2015 » Comments Feed" href="/comments/feed/" /> <link rel="canonical" href="/schedule/kafka-ans-samza/" /> <script type="text/javascript"> window._wpemojiSettings = {"baseUrl":"https:\/\/s.w.org\/images\/core\/emoji\/12.0.0-1\/72x72\/","ext":".png","svgUrl":"https:\/\/s.w.org\/images\/core\/emoji\/12.0.0-1\/svg\/","svgExt":".svg","source":{"concatemoji":"https:\/\/2015.geekout.ee\/wp-includes\/js\/wp-emoji-release.min.js?ver=5.2.2"}}; !function(a,b,c){function d(a,b){var c=String.fromCharCode;l.clearRect(0,0,k.width,k.height),l.fillText(c.apply(this,a),0,0);var d=k.toDataURL();l.clearRect(0,0,k.width,k.height),l.fillText(c.apply(this,b),0,0);var e=k.toDataURL();return d===e}function e(a){var b;if(!l||!l.fillText)return!1;switch(l.textBaseline="top",l.font="600 32px Arial",a){case"flag":return!(b=d([55356,56826,55356,56819],[55356,56826,8203,55356,56819]))&&(b=d([55356,57332,56128,56423,56128,56418,56128,56421,56128,56430,56128,56423,56128,56447],[55356,57332,8203,56128,56423,8203,56128,56418,8203,56128,56421,8203,56128,56430,8203,56128,56423,8203,56128,56447]),!b);case"emoji":return b=d([55357,56424,55356,57342,8205,55358,56605,8205,55357,56424,55356,57340],[55357,56424,55356,57342,8203,55358,56605,8203,55357,56424,55356,57340]),!b}return!1}function f(a){var c=b.createElement("script");c.src=a,c.defer=c.type="text/javascript",b.getElementsByTagName("head")[0].appendChild(c)}var g,h,i,j,k=b.createElement("canvas"),l=k.getContext&&k.getContext("2d");for(j=Array("flag","emoji"),c.supports={everything:!0,everythingExceptFlag:!0},i=0;i<j.length;i++)c.supports[j[i]]=e(j[i]),c.supports.everything=c.supports.everything&&c.supports[j[i]],"flag"!==j[i]&&(c.supports.everythingExceptFlag=c.supports.everythingExceptFlag&&c.supports[j[i]]);c.supports.everythingExceptFlag=c.supports.everythingExceptFlag&&!c.supports.flag,c.DOMReady=!1,c.readyCallback=function(){c.DOMReady=!0},c.supports.everything||(h=function(){c.readyCallback()},b.addEventListener?(b.addEventListener("DOMContentLoaded",h,!1),a.addEventListener("load",h,!1)):(a.attachEvent("onload",h),b.attachEvent("onreadystatechange",function(){"complete"===b.readyState&&c.readyCallback()})),g=c.source||{},g.concatemoji?f(g.concatemoji):g.wpemoji&&g.twemoji&&(f(g.twemoji),f(g.wpemoji)))}(window,document,window._wpemojiSettings); </script> <style type="text/css"> img.wp-smiley, img.emoji { display: inline !important; border: none !important; box-shadow: none !important; height: 1em !important; width: 1em !important; margin: 0 .07em !important; vertical-align: -0.1em !important; background: none !important; padding: 0 !important; } </style> <link rel='stylesheet' id='child-theme-css' href='/wp-content/themes/event-manager/style.css?ver=2.4.2' type='text/css' media='all' /> <link rel='stylesheet' id='wp-block-library-css' href='/wp-includes/css/dist/block-library/style.min.css?ver=5.2.2' type='text/css' media='all' /> <link rel='stylesheet' id='rs-plugin-settings-css' href='/wp-content/plugins/revslider/public/assets/css/settings.css?ver=5.4.5.2' type='text/css' media='all' /> <style id='rs-plugin-settings-inline-css' type='text/css'> #rs-demo-id {} </style> <script type='text/javascript' src='/wp-includes/js/jquery/jquery.js?ver=1.12.4-wp'></script> <script type='text/javascript' src='/wp-includes/js/jquery/jquery-migrate.min.js?ver=1.4.1'></script> <script type='text/javascript' src='/wp-content/plugins/revslider/public/assets/js/jquery.themepunch.tools.min.js?ver=5.4.5.2'></script> <script type='text/javascript' src='/wp-content/plugins/revslider/public/assets/js/jquery.themepunch.revolution.min.js?ver=5.4.5.2'></script> <!--[if lt IE 9]> <script type='text/javascript' src='/wp-content/themes/genesis/lib/js/html5shiv.min.js?ver=3.7.3'></script> <![endif]--> <link rel='https://api.w.org/' href='/wp-json/' /> <link rel="EditURI" type="application/rsd+xml" title="RSD" href="/xmlrpc.php?rsd" /> <link rel="alternate" type="application/json+oembed" href="/wp-json/oembed/1.0/embed?url=https%3A%2F%2F%2Fschedule%2Fkafka-ans-samza%2F" /> <style> code { color: #EEB151; } #geekout-header-logo { text-align: center; margin-bottom: 1em; } #header { min-height: 0; } #header #title { line-height: 0; margin: 0; padding: 0; height: auto; } .home #inner { padding-top: 1em; } #home-rotator { background: #bbb; margin: 0 auto 2em; height: 200px; max-width: 1200px; width: 100%; } #event-information { padding-top: 0; } #event-information .register .subtitle { margin-top: -1em; vertical-align: top; } @media only screen and (min-width: 760px) { #header #title-area #title { background-position: center !important; height: 250px; margin: .2em 0 0 0; } #geekout-header-logo { position: absolute; left: 50%; margin-left: -500px; } .menu-primary { padding-left: 280px; } .sessions.by-grouping .group { padding-bottom: 5em; } .sessions .parallel-tracks { margin-left: 11em; flex-direction: row; } .sessions .parallel-tracks.tracks-2 .session { width: 50%; } .sessions .parallel-tracks.tracks-3 .session { width: 33%; } .sessions .parallel-tracks .session { display: inline-block; padding: 0; vertical-align: top; width: 100%; } .sessions .parallel-tracks .session .right { clear: both; } .sessions .parallel-tracks .session.track-1 .left h3 { position: absolute; left: 0; } } @media only screen and (max-width: 759px) { .sessions .parallel-tracks { flex-direction: column; } .sessions .session { border-bottom: 1px solid rgba(0,0,0,.05); } .sessions .session .left { position: absolute; left: 0; } } #home-middle.widget-area .textwidget { padding: 0; } #header ul.nav li a.sf-with-ul, #header ul.menu li a.sf-with-ul, #nav li a.sf-with-ul, #subnav li a.sf-with-ul { padding-right: 0; } #event-information .register .title { font-size: 26px; } .wp-caption { margin: 1em 0; } li a .sf-sub-indicator { background: none !important; } .sessions .parallel-tracks { display: flex; padding-left: 6em; position: relative; } .sessions .parallel-tracks.zebra-0 { background-color: rgba(0, 0, 0, 0.05); } .sessions .parallel-tracks .session .left h3 { display: none; } .sessions .parallel-tracks .session.track-1 .left h3 { display: block; } .sessions .parallel-tracks .session .left, .sessions .parallel-tracks .session .right { float: left; border-bottom: none; margin: 0; width: auto; } .sessions .parallel-tracks .session .left > *, .sessions .parallel-tracks .session .right { padding: 10px; } .sessions .parallel-tracks .session .left h3 { margin-bottom: -15px; } .session.track-1 {order:1} .session.track-2 {order:2} .session.track-3 {order:3} </style> <style> .no-js img.lazyload { display: none; } figure.wp-block-image img.lazyloading { min-width: 150px; } .lazyload, .lazyloading { opacity: 0; } .lazyloaded { opacity: 1; transition: opacity 400ms; transition-delay: 0ms; } </style> <link rel="icon" href="/wp-content/uploads/2014/08/favicon.ico" /> <link rel="pingback" href="/xmlrpc.php" /> <style type="text/css">#header #title-area #title { background: url(/wp-content/uploads/sites/8/2015/03/GeekOut-soldout-web-header-1.png) no-repeat; }</style><style type="text/css">.header-image #title, .header-image #title a {text-indent: -9999em;}</style><meta name="generator" content="Powered by Slider Revolution 5.4.5.2 - responsive, Mobile-Friendly Slider Plugin for WordPress with comfortable drag and drop interface." /> <script type="text/javascript">function setREVStartSize(e){ try{ var i=jQuery(window).width(),t=9999,r=0,n=0,l=0,f=0,s=0,h=0; if(e.responsiveLevels&&(jQuery.each(e.responsiveLevels,function(e,f){f>i&&(t=r=f,l=e),i>f&&f>r&&(r=f,n=e)}),t>r&&(l=n)),f=e.gridheight[l]||e.gridheight[0]||e.gridheight,s=e.gridwidth[l]||e.gridwidth[0]||e.gridwidth,h=i/s,h=h>1?1:h,f=Math.round(h*f),"fullscreen"==e.sliderLayout){var u=(e.c.width(),jQuery(window).height());if(void 0!=e.fullScreenOffsetContainer){var c=e.fullScreenOffsetContainer.split(",");if (c) jQuery.each(c,function(e,i){u=jQuery(i).length>0?u-jQuery(i).outerHeight(!0):u}),e.fullScreenOffset.split("%").length>1&&void 0!=e.fullScreenOffset&&e.fullScreenOffset.length>0?u-=jQuery(window).height()*parseInt(e.fullScreenOffset,0)/100:void 0!=e.fullScreenOffset&&e.fullScreenOffset.length>0&&(u-=parseInt(e.fullScreenOffset,0))}f=u}else void 0!=e.minHeight&&f<e.minHeight&&(f=e.minHeight);e.c.closest(".rev_slider_wrapper").css({height:f}) }catch(d){console.log("Failure at Presize of Slider:"+d)} };</script> </head> <body class="sc-sessions-template-default single single-sc-sessions postid-111 ztwp slug-kafka-ans-samza custom-header header-image header-full-width content-sidebar"><div id="wrap"> <div class="logo" id="geekout-header-logo"> <a title="GeekOUT EE 2015" href="/"> <div class="logo_geekout" style="background:url('//static.zeroturnaround.com/img/logos/logo_geekout.png') no-repeat; background-size:contain; max-width:100%; width:164px; height:40px; margin-top:11px;"></div> </a> </div> <div id="nav"><div class="wrap"><ul id="menu-main-menu" class="menu genesis-nav-menu menu-primary"><li id="menu-item-21" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-21"><a href="/speakers/">Speakers</a></li> <li id="menu-item-17" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-17"><a href="/schedule/">Schedule</a></li> <li id="menu-item-16" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-16"><a href="/info/">Info</a></li> <li id="menu-item-266" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-266"><a href="/videos/">Videos</a></li> <li id="menu-item-46" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-46"><a href="/contacts/">Contacts</a></li> </ul></div></div><div id="header"><div class="wrap"><div id="title-area"><p id="title"><a href="/">GeekOUT EE 2015</a></p></div></div></div><div id="event-information"><div class="wrap"><div class="one-third first"><div class="date"> <span class="icon">23</span> <span class="title">June 11-12, 2015</span> <span class="subtitle">Starting at 09:00am</span> </div></div><div class="one-third"><div class="location"> <span class="icon"></span><a class="title" href="https://www.google.com/maps/place/Salme+12,+10413+Tallinn,+Estonia/@59.4449685,24.729673,18z/">Tallinn, Estonia</a> <span class="subtitle">Salme Kultuurikeskus</span> </div></div><div class="one-third"><a class="register" href="/registration"> <span class="subtitle"></span> <span class="title">Sold out </span> </a></div><div class="clearfix"></div></div></div><div id="inner"><div id="content-sidebar-wrap"><div id="content" class="hfeed"><div class="post-111 sc-sessions type-sc-sessions status-publish hentry sc-session-grouping-day-2 entry"><h1 class="entry-title">Going realtime with Kafka and Samza at Improve Digital</h1> <div class="entry-content"><p>by <a href="/speakers/garry-turkington/">Garry Turkington</a> </p><div style="font-style:italic"><p>Friday, 12 June 2015 11:30 @ Room 1</p> </div><p>At Improve Digital we capture significant data volumes that we have traditionally processed with batch-based tools on Hadoop. But as demands for reduced latency between data generation and availability grew we looked to start processing data in near-realtime. We have adopted Apache Kafka as our central system for data collection and distribution. Atop this we use Apache Samza to implement stream-based processing.</p> <p>This presentation will introduce Kafka and Samza within the context of our adoption of the technologies. We will discuss the architectural challenges and opportunities brought about by incorporating Kafka and Samza and how we integrate them with our broader infrastructure. We will also look at some of our specific use cases – particularly streaming aggregation, alerting and machine learning – and describe some of the algorithmic approaches we have adopted.</p> </div></div></div><div id="sidebar" class="sidebar widget-area"><div id="text-3" class="widget widget_text"><div class="widget-wrap"> <div class="textwidget"><a class="twitter-timeline" href="https://twitter.com/GeekOutEE" data-widget-id="344836070640328704">Tweets by @GeekOutEE</a> <script>!function(d,s,id){var js,fjs=d.getElementsByTagName(s)[0],p=/^http:/.test(d.location)?'http':'https';if(!d.getElementById(id)){js=d.createElement(s);js.id=id;js.src=p+"://platform.twitter.com/widgets.js";fjs.parentNode.insertBefore(js,fjs);}}(document,"script","twitter-wjs");</script></div> </div></div> </div></div></div><div id="footer-widgets" class="footer-widgets"><div class="wrap"><div class="footer-widgets-1 widget-area"><div id="connect-widget-2" class="widget widget_connect"><div class="widget-wrap"><p><a href="https://twitter.com/GeekOutEE" class="btn-twitter">Twitter</a> <a href="https://www.facebook.com/GeekOut.ee" class="btn-facebook">Facebook</a> </p></div></div> </div></div></div><div id="footer" class="footer"><div class="wrap"><div class="creds"><p><p>© 2015 Geekout EE. All rights reserved.</p> </p></div></div></div></div><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-2470006-12', 'geekout.ee'); ga('send', 'pageview'); </script><script type='text/javascript'> window.lazySizesConfig = window.lazySizesConfig || {}; window.lazySizesConfig.lazyClass = 'lazyload'; window.lazySizesConfig.loadingClass = 'lazyloading'; window.lazySizesConfig.loadedClass = 'lazyloaded'; lazySizesConfig.loadMode = 1; </script> <script type='text/javascript' src='/wp-content/plugins/wp-smushit/app/assets/js/smush-lazy-load.min.js?ver=3.2.4'></script> <script type='text/javascript'> lazySizes.init(); </script> <script type='text/javascript' src='/wp-includes/js/wp-embed.min.js?ver=5.2.2'></script> <script type="text/javascript">window.NREUM||(NREUM={});NREUM.info={"beacon":"bam.nr-data.net","licenseKey":"18df73b2f0","applicationID":"22366760","transactionName":"NVAGZBFVXxACBkdRCQwaJVMXXV4NTBZaVgEOUElDABlCBhAWWlcIEQ==","queueTime":0,"applicationTime":117,"atts":"GRcFEllPTB4=","errorBeacon":"bam.nr-data.net","agent":""}</script></body></html> <!-- Performance optimized by W3 Total Cache. Learn more: https://www.w3-edge.com/products/ Served from: old.jrebel.com @ 2020-10-24 06:47:03 by W3 Total Cache -->