{"id":16803,"date":"2015-01-21T10:47:11","date_gmt":"2015-01-21T05:17:11","guid":{"rendered":"https:\/\/2thenew.today\/blog\/?p=16803"},"modified":"2015-01-21T10:47:11","modified_gmt":"2015-01-21T05:17:11","slug":"realtime-event-processing-with-esper","status":"publish","type":"post","link":"https:\/\/2thenew.today\/blog\/realtime-event-processing-with-esper\/","title":{"rendered":"Realtime Event processing with Esper"},"content":{"rendered":"<p>In one of the recent use case, we had to implement a complex event processing in real time mode. Storm is used as real time processing engine, but since It doesn&#8217;t provide batching of events therefore we took upon Esper to do the required job.<\/p>\n<p>Esper can be thought as a complex event processing (CEP) component generally used for event series analysis. Complex event processing (CEP) delivers high-speed processing of many events across all the layers identifying the most meaningful events within the event cloud, analyzing their impact, and taking subsequent action in real time.<\/p>\n<p>In this use case, we get a real time stream from Kafka, which passes through Esper for event processing.<\/p>\n<p>Steps to configure esper:<\/p>\n<ul>\n<li>Create KafkaSpout which will accept the real time streams from Kafka<\/li>\n<li>Create BeanClass which will define the fields that used in Esper for processing the data using query language.<\/li>\n<li>Create KafkaBolt which will emits the stream to the Esper bolt using bean class.<\/li>\n<li>Create EsperBolt which will accept the stream from KafkaBolt, do event processing using the query language<\/li>\n<\/ul>\n<p>Here is the source code of bean class and bolt.<\/p>\n<p>EsperTestBean<\/p>\n<p>[java]<br \/>\npublic class EsperTestBean {<\/p>\n<p>    String line;<\/p>\n<p>    public String getLine() {<br \/>\n        return line;<br \/>\n    }<\/p>\n<p>    public void setLine(String line) {<br \/>\n        this.line = line;<br \/>\n    }<\/p>\n<p>    public static EsperTestBean parse(String line) {<br \/>\n        EsperTestBean esperTestBean = new EsperTestBean();<br \/>\n        esperTestBean.setLine(line);<br \/>\n        return esperTestBean;<br \/>\n    }<br \/>\n}<br \/>\n[\/java]<\/p>\n<p>EsperBolt:<\/p>\n<p>[java]<br \/>\nimport backtype.storm.task.OutputCollector;<br \/>\nimport backtype.storm.task.TopologyContext;<br \/>\nimport backtype.storm.topology.OutputFieldsDeclarer;<br \/>\nimport backtype.storm.topology.base.BaseRichBolt;<br \/>\nimport backtype.storm.tuple.Tuple;<br \/>\nimport com.espertech.esper.client.*;<br \/>\nimport org.apache.commons.logging.Log;<br \/>\nimport org.apache.commons.logging.LogFactory;<\/p>\n<p>import java.util.List;<br \/>\nimport java.util.Map;<\/p>\n<p>public class ProcessLineEsperBolt extends BaseRichBolt {<\/p>\n<p>    private static final long serialVersionUID = 1L;<br \/>\n    private static final Log log = LogFactory.getLog(ProcessLineEsperBolt.class);<\/p>\n<p>    private OutputCollector collector;<br \/>\n    private EPServiceProvider epService;<\/p>\n<p>    @SuppressWarnings(&quot;rawtypes&quot;)<br \/>\n    @Override<br \/>\n    public void prepare(Map stormConf, TopologyContext context,<br \/>\n                        OutputCollector collector) {<br \/>\n        this.collector = collector;<br \/>\n        this.setUpEsper();<br \/>\n    }<\/p>\n<p>    private void setUpEsper() {<\/p>\n<p>        \/\/Register the BeanClass as an EventType<br \/>\n        Configuration configuration = new Configuration();<br \/>\n        configuration.addEventType(&quot;EsperTestBean&quot;, EsperTestBean.class.getName());<\/p>\n<p>        epService = EPServiceProviderManager.getDefaultProvider(configuration);<br \/>\n        epService.initialize();<\/p>\n<p>        \/\/Processing events in batch of every 1 minute using bean class fields<br \/>\n        EPStatement visitorsStatement = epService.getEPAdministrator().<br \/>\n                createEPL(&quot;select  line as found from EsperTestBean.win:time(1 min) output snapshot every 1 minute&quot;);<br \/>\n        visitorsStatement.addListener(new UpdateListener() {<\/p>\n<p>           \/\/ Listener that provides the new events and old events array.<br \/>\n            @Override<br \/>\n            public void update(EventBean[] newEvents, EventBean[] oldEvents) {<br \/>\n                if (newEvents != null) {<br \/>\n                    System.out.println(&quot;Batch Length::::::::::::::::::::::&quot; + newEvents.length);<br \/>\n                    for (EventBean e : newEvents) {<br \/>\n                        System.out.println(&quot;online &#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-line: &quot; + e.get(&quot;found&quot;));<br \/>\n                    }<br \/>\n                }<br \/>\n            }<\/p>\n<p>        });<br \/>\n    }<\/p>\n<p>    @Override<br \/>\n    public void execute(Tuple input) {<br \/>\n        List&lt;Object&gt; values = input.getValues();<br \/>\n        epService.getEPRuntime().sendEvent(values.get(0));<br \/>\n        collector.ack(input);<br \/>\n    }<\/p>\n<p>      @Override<br \/>\n    public void declareOutputFields(OutputFieldsDeclarer declarer) {<\/p>\n<p>    }<\/p>\n<p>}<br \/>\n[\/java]<\/p>\n<p>In above mentioned code, we process stream for every 1 minute. Esper provide the different type of event processing method like window, time based and many more.<\/p>\n<p>Hope this blog will help you to implement the event processing using Esper.<\/p>\n<p>For Complete Source Code: <a title=\"https:\/\/github.com\/IntelliGrape\/bigdata-poc\/tree\/master\/storm-batch-processing\" href=\"https:\/\/github.com\/IntelliGrape\/bigdata-poc\/tree\/master\/storm-batch-processing\">https:\/\/github.com\/IntelliGrape\/bigdata-poc\/tree\/master\/storm-batch-processing<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>In one of the recent use case, we had to implement a complex event processing in real time mode. Storm is used as real time processing engine, but since It doesn&#8217;t provide batching of events therefore we took upon Esper to do the required job. Esper can be thought as a complex event processing (CEP) [&hellip;]<\/p>\n","protected":false},"author":47,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"iawp_total_views":17,"footnotes":""},"categories":[1395],"tags":[1197,1602,1605,1604,1603],"class_list":["post-16803","post","type-post","status-publish","format-standard","hentry","category-big-data","tag-bigdata","tag-esper","tag-event-processing","tag-kafka","tag-storm"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 5.0.0.1 - aioseo.com -->\n\t<meta name=\"description\" content=\"In one of the recent use case, we had to implement a complex event processing in real time mode. Storm is used as real time processing engine, but since It doesn&#039;t provide batching of events therefore we took upon Esper to do the required job. Esper can be thought as a complex event processing (CEP)\" \/>\n\t<meta name=\"robots\" content=\"max-image-preview:large\" \/>\n\t<meta name=\"author\" content=\"Mohit Garg\"\/>\n\t<link rel=\"canonical\" href=\"https:\/\/2thenew.today\/blog\/realtime-event-processing-with-esper\/\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.0.1\" \/>\n\t\t<meta property=\"og:locale\" content=\"en_US\" \/>\n\t\t<meta property=\"og:site_name\" content=\"TO THE NEW BLOG\" \/>\n\t\t<meta property=\"og:type\" content=\"blog\" \/>\n\t\t<meta property=\"og:title\" content=\"Realtime Event processing with Esper | TO THE NEW Blog\" \/>\n\t\t<meta property=\"og:description\" content=\"In one of the recent use case, we had to implement a complex event processing in real time mode. Storm is used as real time processing engine, but since It doesn&#039;t provide batching of events therefore we took upon Esper to do the required job. Esper can be thought as a complex event processing (CEP)\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/2thenew.today\/blog\/realtime-event-processing-with-esper\/\" \/>\n\t\t<meta property=\"og:image\" content=\"https:\/\/2thenew.today\/blog\/wp-content\/themes\/ttn\/images\/social-logo.png\" \/>\n\t\t<meta property=\"og:image:secure_url\" content=\"https:\/\/2thenew.today\/blog\/wp-content\/themes\/ttn\/images\/social-logo.png\" \/>\n\t\t<meta name=\"twitter:card\" content=\"summary\" \/>\n\t\t<meta name=\"twitter:site\" content=\"@tothenew\" \/>\n\t\t<meta name=\"twitter:title\" content=\"Realtime Event processing with Esper | TO THE NEW Blog\" \/>\n\t\t<meta name=\"twitter:description\" content=\"In one of the recent use case, we had to implement a complex event processing in real time mode. Storm is used as real time processing engine, but since It doesn&#039;t provide batching of events therefore we took upon Esper to do the required job. Esper can be thought as a complex event processing (CEP)\" \/>\n\t\t<meta name=\"twitter:image\" content=\"https:\/\/2thenew.today\/blog\/wp-content\/themes\/ttn\/images\/social-logo.png\" \/>\n\t\t<script type=\"application\/ld+json\" class=\"aioseo-schema\">\n\t\t\t{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/www.tothenew.com\\\/blog\\\/realtime-event-processing-with-esper\\\/#article\",\"name\":\"Realtime Event processing with Esper | TO THE NEW Blog\",\"headline\":\"Realtime Event processing with Esper\",\"author\":{\"@id\":\"https:\\\/\\\/www.tothenew.com\\\/blog\\\/author\\\/mohit\\\/#author\"},\"publisher\":{\"@id\":\"https:\\\/\\\/www.tothenew.com\\\/blog\\\/#organization\"},\"datePublished\":\"2015-01-21T10:47:11+05:30\",\"dateModified\":\"2015-01-21T10:47:11+05:30\",\"inLanguage\":\"en-US\",\"commentCount\":1,\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/www.tothenew.com\\\/blog\\\/realtime-event-processing-with-esper\\\/#webpage\"},\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.tothenew.com\\\/blog\\\/realtime-event-processing-with-esper\\\/#webpage\"},\"articleSection\":\"Big Data, BigData, Esper, Event Processing, Kafka, Storm\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/www.tothenew.com\\\/blog\\\/realtime-event-processing-with-esper\\\/#breadcrumblist\",\"itemListElement\":[{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/www.tothenew.com\\\/blog#listItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/www.tothenew.com\\\/blog\",\"nextItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/www.tothenew.com\\\/blog\\\/category\\\/big-data\\\/#listItem\",\"name\":\"Big Data\"}},{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/www.tothenew.com\\\/blog\\\/category\\\/big-data\\\/#listItem\",\"position\":2,\"name\":\"Big Data\",\"item\":\"https:\\\/\\\/www.tothenew.com\\\/blog\\\/category\\\/big-data\\\/\",\"nextItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/www.tothenew.com\\\/blog\\\/realtime-event-processing-with-esper\\\/#listItem\",\"name\":\"Realtime Event processing with Esper\"},\"previousItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/www.tothenew.com\\\/blog#listItem\",\"name\":\"Home\"}},{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/www.tothenew.com\\\/blog\\\/realtime-event-processing-with-esper\\\/#listItem\",\"position\":3,\"name\":\"Realtime Event processing with Esper\",\"previousItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/www.tothenew.com\\\/blog\\\/category\\\/big-data\\\/#listItem\",\"name\":\"Big Data\"}}]},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/www.tothenew.com\\\/blog\\\/#organization\",\"name\":\"TO THE NEW Blog\",\"url\":\"https:\\\/\\\/www.tothenew.com\\\/blog\\\/\"},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/www.tothenew.com\\\/blog\\\/author\\\/mohit\\\/#author\",\"url\":\"https:\\\/\\\/www.tothenew.com\\\/blog\\\/author\\\/mohit\\\/\",\"name\":\"Mohit Garg\",\"image\":{\"@type\":\"ImageObject\",\"@id\":\"https:\\\/\\\/www.tothenew.com\\\/blog\\\/realtime-event-processing-with-esper\\\/#authorImage\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/931ccdefca3a3ec5366d4652824c2e03776befb43ae29205264bc46a3ec45d0a?s=96&d=mm&r=g\",\"width\":96,\"height\":96,\"caption\":\"Mohit Garg\"}},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/www.tothenew.com\\\/blog\\\/realtime-event-processing-with-esper\\\/#webpage\",\"url\":\"https:\\\/\\\/www.tothenew.com\\\/blog\\\/realtime-event-processing-with-esper\\\/\",\"name\":\"Realtime Event processing with Esper | TO THE NEW Blog\",\"description\":\"In one of the recent use case, we had to implement a complex event processing in real time mode. Storm is used as real time processing engine, but since It doesn't provide batching of events therefore we took upon Esper to do the required job. Esper can be thought as a complex event processing (CEP)\",\"inLanguage\":\"en-US\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.tothenew.com\\\/blog\\\/#website\"},\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.tothenew.com\\\/blog\\\/realtime-event-processing-with-esper\\\/#breadcrumblist\"},\"author\":{\"@id\":\"https:\\\/\\\/www.tothenew.com\\\/blog\\\/author\\\/mohit\\\/#author\"},\"creator\":{\"@id\":\"https:\\\/\\\/www.tothenew.com\\\/blog\\\/author\\\/mohit\\\/#author\"},\"datePublished\":\"2015-01-21T10:47:11+05:30\",\"dateModified\":\"2015-01-21T10:47:11+05:30\"},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/www.tothenew.com\\\/blog\\\/#website\",\"url\":\"https:\\\/\\\/www.tothenew.com\\\/blog\\\/\",\"name\":\"TO THE NEW Blog\",\"inLanguage\":\"en-US\",\"publisher\":{\"@id\":\"https:\\\/\\\/www.tothenew.com\\\/blog\\\/#organization\"}}]}\n\t\t<\/script>\n\t\t<!-- All in One SEO -->\n\n","aioseo_head_json":{"title":"Realtime Event processing with Esper | TO THE NEW Blog","description":"In one of the recent use case, we had to implement a complex event processing in real time mode. Storm is used as real time processing engine, but since It doesn't provide batching of events therefore we took upon Esper to do the required job. Esper can be thought as a complex event processing (CEP)","canonical_url":"https:\/\/2thenew.today\/blog\/realtime-event-processing-with-esper\/","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/2thenew.today\/blog\/realtime-event-processing-with-esper\/#article","name":"Realtime Event processing with Esper | TO THE NEW Blog","headline":"Realtime Event processing with Esper","author":{"@id":"https:\/\/2thenew.today\/blog\/author\/mohit\/#author"},"publisher":{"@id":"https:\/\/2thenew.today\/blog\/#organization"},"datePublished":"2015-01-21T10:47:11+05:30","dateModified":"2015-01-21T10:47:11+05:30","inLanguage":"en-US","commentCount":1,"mainEntityOfPage":{"@id":"https:\/\/2thenew.today\/blog\/realtime-event-processing-with-esper\/#webpage"},"isPartOf":{"@id":"https:\/\/2thenew.today\/blog\/realtime-event-processing-with-esper\/#webpage"},"articleSection":"Big Data, BigData, Esper, Event Processing, Kafka, Storm"},{"@type":"BreadcrumbList","@id":"https:\/\/2thenew.today\/blog\/realtime-event-processing-with-esper\/#breadcrumblist","itemListElement":[{"@type":"ListItem","@id":"https:\/\/2thenew.today\/blog#listItem","position":1,"name":"Home","item":"https:\/\/2thenew.today\/blog","nextItem":{"@type":"ListItem","@id":"https:\/\/2thenew.today\/blog\/category\/big-data\/#listItem","name":"Big Data"}},{"@type":"ListItem","@id":"https:\/\/2thenew.today\/blog\/category\/big-data\/#listItem","position":2,"name":"Big Data","item":"https:\/\/2thenew.today\/blog\/category\/big-data\/","nextItem":{"@type":"ListItem","@id":"https:\/\/2thenew.today\/blog\/realtime-event-processing-with-esper\/#listItem","name":"Realtime Event processing with Esper"},"previousItem":{"@type":"ListItem","@id":"https:\/\/2thenew.today\/blog#listItem","name":"Home"}},{"@type":"ListItem","@id":"https:\/\/2thenew.today\/blog\/realtime-event-processing-with-esper\/#listItem","position":3,"name":"Realtime Event processing with Esper","previousItem":{"@type":"ListItem","@id":"https:\/\/2thenew.today\/blog\/category\/big-data\/#listItem","name":"Big Data"}}]},{"@type":"Organization","@id":"https:\/\/2thenew.today\/blog\/#organization","name":"TO THE NEW Blog","url":"https:\/\/2thenew.today\/blog\/"},{"@type":"Person","@id":"https:\/\/2thenew.today\/blog\/author\/mohit\/#author","url":"https:\/\/2thenew.today\/blog\/author\/mohit\/","name":"Mohit Garg","image":{"@type":"ImageObject","@id":"https:\/\/2thenew.today\/blog\/realtime-event-processing-with-esper\/#authorImage","url":"https:\/\/secure.gravatar.com\/avatar\/931ccdefca3a3ec5366d4652824c2e03776befb43ae29205264bc46a3ec45d0a?s=96&d=mm&r=g","width":96,"height":96,"caption":"Mohit Garg"}},{"@type":"WebPage","@id":"https:\/\/2thenew.today\/blog\/realtime-event-processing-with-esper\/#webpage","url":"https:\/\/2thenew.today\/blog\/realtime-event-processing-with-esper\/","name":"Realtime Event processing with Esper | TO THE NEW Blog","description":"In one of the recent use case, we had to implement a complex event processing in real time mode. Storm is used as real time processing engine, but since It doesn't provide batching of events therefore we took upon Esper to do the required job. Esper can be thought as a complex event processing (CEP)","inLanguage":"en-US","isPartOf":{"@id":"https:\/\/2thenew.today\/blog\/#website"},"breadcrumb":{"@id":"https:\/\/2thenew.today\/blog\/realtime-event-processing-with-esper\/#breadcrumblist"},"author":{"@id":"https:\/\/2thenew.today\/blog\/author\/mohit\/#author"},"creator":{"@id":"https:\/\/2thenew.today\/blog\/author\/mohit\/#author"},"datePublished":"2015-01-21T10:47:11+05:30","dateModified":"2015-01-21T10:47:11+05:30"},{"@type":"WebSite","@id":"https:\/\/2thenew.today\/blog\/#website","url":"https:\/\/2thenew.today\/blog\/","name":"TO THE NEW Blog","inLanguage":"en-US","publisher":{"@id":"https:\/\/2thenew.today\/blog\/#organization"}}]},"og:locale":"en_US","og:site_name":"TO THE NEW BLOG","og:type":"blog","og:title":"Realtime Event processing with Esper | TO THE NEW Blog","og:description":"In one of the recent use case, we had to implement a complex event processing in real time mode. Storm is used as real time processing engine, but since It doesn't provide batching of events therefore we took upon Esper to do the required job. Esper can be thought as a complex event processing (CEP)","og:url":"https:\/\/2thenew.today\/blog\/realtime-event-processing-with-esper\/","og:image":"https:\/\/2thenew.today\/blog\/wp-content\/themes\/ttn\/images\/social-logo.png","og:image:secure_url":"https:\/\/2thenew.today\/blog\/wp-content\/themes\/ttn\/images\/social-logo.png","twitter:card":"summary","twitter:site":"@tothenew","twitter:title":"Realtime Event processing with Esper | TO THE NEW Blog","twitter:description":"In one of the recent use case, we had to implement a complex event processing in real time mode. Storm is used as real time processing engine, but since It doesn't provide batching of events therefore we took upon Esper to do the required job. Esper can be thought as a complex event processing (CEP)","twitter:image":"https:\/\/2thenew.today\/blog\/wp-content\/themes\/ttn\/images\/social-logo.png"},"aioseo_meta_data":{"post_id":"16803","title":null,"description":null,"keywords":null,"keyphrases":null,"primary_term":null,"canonical_url":null,"og_title":null,"og_description":null,"og_object_type":"default","og_image_type":"default","og_image_url":null,"og_image_width":null,"og_image_height":null,"og_image_custom_url":null,"og_image_custom_fields":null,"og_video":null,"og_custom_url":null,"og_article_section":null,"og_article_tags":null,"twitter_use_og":false,"twitter_card":"default","twitter_image_type":"default","twitter_image_url":null,"twitter_image_custom_url":null,"twitter_image_custom_fields":null,"twitter_title":null,"twitter_description":null,"schema":{"blockGraphs":[],"customGraphs":[],"default":{"data":{"Article":[],"Course":[],"Dataset":[],"FAQPage":[],"Movie":[],"Person":[],"Product":[],"ProductReview":[],"Car":[],"Recipe":[],"Service":[],"SoftwareApplication":[],"WebPage":[]},"graphName":"Article","isEnabled":true},"graphs":[]},"schema_type":null,"schema_type_options":null,"pillar_content":false,"robots_default":true,"robots_noindex":false,"robots_noarchive":false,"robots_nosnippet":false,"robots_nofollow":false,"robots_noimageindex":false,"robots_noodp":false,"robots_notranslate":false,"robots_max_snippet":null,"robots_max_videopreview":null,"robots_max_imagepreview":"large","priority":null,"frequency":null,"local_seo":null,"limit_modified_date":false,"created":"2021-04-30 02:48:05","updated":"2024-02-29 08:52:40","focus_keyword":null,"additional_keywords":null,"truseo_locale":null,"ai":null,"breadcrumb_settings":null,"seo_analyzer_scan_date":null},"aioseo_breadcrumb":"<div class=\"aioseo-breadcrumbs\"><span class=\"aioseo-breadcrumb\">\n\t\t\t<a href=\"https:\/\/2thenew.today\/blog\" title=\"Home\">Home<\/a>\n\t\t<\/span><span class=\"aioseo-breadcrumb-separator\">&raquo;<\/span><span class=\"aioseo-breadcrumb\">\n\t\t\t<a href=\"https:\/\/2thenew.today\/blog\/category\/big-data\/\" title=\"Big Data\">Big Data<\/a>\n\t\t<\/span><span class=\"aioseo-breadcrumb-separator\">&raquo;<\/span><span class=\"aioseo-breadcrumb\">\n\t\t\tRealtime Event processing with Esper\n\t\t<\/span><\/div>","aioseo_breadcrumb_json":[{"label":"Home","link":"https:\/\/2thenew.today\/blog"},{"label":"Big Data","link":"https:\/\/2thenew.today\/blog\/category\/big-data\/"},{"label":"Realtime Event processing with Esper","link":"https:\/\/2thenew.today\/blog\/realtime-event-processing-with-esper\/"}],"_links":{"self":[{"href":"https:\/\/2thenew.today\/blog\/wp-json\/wp\/v2\/posts\/16803","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/2thenew.today\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/2thenew.today\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/2thenew.today\/blog\/wp-json\/wp\/v2\/users\/47"}],"replies":[{"embeddable":true,"href":"https:\/\/2thenew.today\/blog\/wp-json\/wp\/v2\/comments?post=16803"}],"version-history":[{"count":0,"href":"https:\/\/2thenew.today\/blog\/wp-json\/wp\/v2\/posts\/16803\/revisions"}],"wp:attachment":[{"href":"https:\/\/2thenew.today\/blog\/wp-json\/wp\/v2\/media?parent=16803"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/2thenew.today\/blog\/wp-json\/wp\/v2\/categories?post=16803"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/2thenew.today\/blog\/wp-json\/wp\/v2\/tags?post=16803"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}