{"id":63334,"date":"2017-01-23T22:00:14","date_gmt":"2017-01-23T20:00:14","guid":{"rendered":"https:\/\/www.javacodegeeks.com\/?p=63334"},"modified":"2017-01-23T14:52:43","modified_gmt":"2017-01-23T12:52:43","slug":"getting-started-kafka-rest-proxy-mapr-streams","status":"publish","type":"post","link":"https:\/\/www.javacodegeeks.com\/2017\/01\/getting-started-kafka-rest-proxy-mapr-streams.html","title":{"rendered":"Getting Started With Kafka REST Proxy for MapR Streams"},"content":{"rendered":"<h2>Introduction<\/h2>\n<p>MapR Ecosystem Package 2.0 (MEP) is coming with some new features related to MapR Streams:<\/p>\n<ul>\n<li><a href=\"http:\/\/maprdocs.mapr.com\/home\/Kafka\/kafkaREST.html\">Kafka REST Proxy for MapR Streams<\/a> provides a RESTful interface to MapR Streams and Kafka clusters to consume and product messages and to perform administrative operations.<\/li>\n<li><a href=\"http:\/\/maprdocs.mapr.com\/home\/Kafka\/kafkaConnect.html\">Kafka Connect for MapR Streams<\/a> is a utility for streaming data between MapR Streams and Apache Kafka and other storage systems.<\/li>\n<\/ul>\n<p>MapR Ecosystem Packs (MEPs) are a way to deliver ecosystem upgrades decoupled from core upgrades &#8211; allowing you to upgrade your tooling independently of your Converged Data Platform. You can lean more about MEP 2.0 in <a href=\"https:\/\/www.mapr.com\/blog\/announcing-mapr-ecosystem-pack-mep-20\">this article<\/a>.<\/p>\n<p>In this blog we describe how to use the REST Proxy to publish and consume messages to\/from MapR Streams. The REST Proxy is a great addition to the MapR Converged Data Platform allowing any programming language to use MapR Streams.<\/p>\n<p>The Kafka REST Proxy provided with the MapR Streams tools, can be used with MapR Streams (default), but also used in a hybrid mode with Apache Kafka. In this article we will focus on MapR Streams. &lt;!&#8211; more &#8211;&gt;<\/p>\n<h2>Prerequisites<\/h2>\n<ul>\n<li>MapR Converged Data Platform 5.2 with MEP 2.0\n<ul>\n<li>with MapR Streams Tools<\/li>\n<\/ul>\n<\/li>\n<li>curl, wget or any HTTP\/REST Client tool<\/li>\n<\/ul>\n<h2>Create the MapR Streams and Topic<\/h2>\n<p>A stream is a collection of topics that you can manage as a group by:<\/p>\n<ol>\n<li>Setting security policies that apply to all topics in that stream<\/li>\n<li>Setting a default number of partitions for each new topic that is created in the stream<\/li>\n<li>Set a time-to-live for messages in every topic in the stream<\/li>\n<\/ol>\n<p>You can find more information about MapR Streams concepts in the <a href=\"http:\/\/maprdocs.mapr.com\/home\/MapR_Streams\/mapr_streams.html\">documentation<\/a>.<\/p>\n<p>On your Mapr Cluster or Sandbox, run the following commands:<\/p>\n<pre class=\"brush:java\">$ maprcli stream create -path \/apps\/iot-stream -produceperm p -consumeperm p -topicperm p\r\n\r\n$ maprcli stream topic create -path \/apps\/iot-stream -topic sensor-json -partitions 3\r\n\r\n$ maprcli stream topic create -path \/apps\/iot-stream -topic sensor-binary -partitions 3<\/pre>\n<h2>Start Kafka Console Producers and Consumers<\/h2>\n<p>Open two terminal windows and run the consumer Kafka utilities using the following commands:<\/p>\n<h3>Consumer<\/h3>\n<ul>\n<li>Topic sensor-json<\/li>\n<\/ul>\n<pre class=\"brush:java\">$ \/opt\/mapr\/kafka\/kafka-0.9.0\/bin\/kafka-console-consumer.sh --new-consumer --bootstrap-server this.will.be.ignored:9092 --topic \/apps\/iot-stream:sensor-json<\/pre>\n<ul>\n<li>Topic sensor-binary<\/li>\n<\/ul>\n<pre class=\"brush:java\">$ \/opt\/mapr\/kafka\/kafka-0.9.0\/bin\/kafka-console-consumer.sh --new-consumer --bootstrap-server this.will.be.ignored:9092 --topic \/apps\/iot-stream:sensor-binary<\/pre>\n<p>This two terminal windows will allow you to see the messages posted on the different topics<\/p>\n<h2>Using Kafka REST Proxy<\/h2>\n<h3>Inspect Topic Metadata<\/h3>\n<p>The endpoint <code>\/topics\/[topic_name]<\/code> allows you to get some informations about the topic. In MapR Streams, topics are part of a <em>stream<\/em> identified by a path; to use the topic using the REST API you have to use the full path, and encode it in the URL; for example:<\/p>\n<ul>\n<li><code>\/apps\/iot-stream:sensor-json<\/code> will be encoded with <code>%2Fapps%2Fiot-stream%3Asensor-json<\/code><\/li>\n<\/ul>\n<p>Run the following command, to get information about the <code>sensor-json<\/code> topic<\/p>\n<pre class=\"brush:java\">$ curl -X GET  http:\/\/localhost:8082\/topics\/%2Fapps%2Fiot-stream%3Asensor-json<\/pre>\n<p>Note: For simplicity reason I am running the command from the node where the Kafka REST proxy is running, so it is possible to use <code>localhost<\/code>.<\/p>\n<p>You can print JSON in a pretty way, by adding a Python command such as :<\/p>\n<pre class=\"brush:java\">$ curl -X GET  http:\/\/localhost:8082\/topics\/%2Fapps%2Fiot-stream%3Asensor-json | python -m json.tool<\/pre>\n<p><strong>Default Stream<\/strong><\/p>\n<p>As mentioned above, the Stream path is part of the topic name you have to use in the command; however it is possible to configure the MapR Kafka REST Proxy to use a default stream. For this you should add the following property in the <code>\/opt\/mapr\/kafka-rest\/kafka-rest-2.0.1\/config\/kafka-rest.properties<\/code> file:<div style=\"display:inline-block; margin: 15px 0;\"> <div id=\"adngin-JavaCodeGeeks_incontent_video-0\" style=\"display:inline-block;\"><\/div> <\/div><\/p>\n<ul>\n<li><code>streams.default.stream=\/apps\/iot-stream<\/code>When you change the Kafka REST proxy configuration, you must restart the service using maprcli or MCS.The main reason to use the <code>streams.default.stream<\/code> properties is to simplify the URLs used by the application for example\n<ul>\n<li>with <code>streams.default.stream<\/code> you can use <code>curl -X GET http:\/\/localhost:8082\/topics\/<\/code><\/li>\n<li>without this configuration, or if you want to use a specific stream you must specify it in the URL <code>http:\/\/localhost:8082\/topics\/%2Fapps%2Fiot-stream%3Asensor-json<\/code><\/li>\n<\/ul>\n<p>In this article, all the URLs contains the encoded stream name, like that you can start using the Kafka REST proxy without changind the configuration and also use it with different streams.<\/li>\n<\/ul>\n<h3>Publishing Messages<\/h3>\n<p>The Kafka REST Proxy for MapR Streams allows application to publish messages to MapR Streams. Messages could be send as JSON or Binary content (base64 encoding).<\/p>\n<p><strong>To send a JSON Message:<\/strong><\/p>\n<ul>\n<li>the query should be a HTTP <code>POST<\/code><\/li>\n<li>the Content-Type should be : <code>application\/vnd.kafka.json.v1+json<\/code><\/li>\n<li>the Body:<\/li>\n<\/ul>\n<pre class=\"brush:java\">{\r\n  \"records\":\r\n  [\r\n    {\r\n      \"value\":\r\n      {\r\n        \"temp\" : 10 ,\r\n        \"speed\" : 40 ,\r\n        \"direction\" : \"NW\"\r\n        }  \r\n      }\r\n  ]\r\n}<\/pre>\n<p>The complete request is:<\/p>\n<pre class=\"brush:java\">curl -X POST -H \"Content-Type: application\/vnd.kafka.json.v1+json\" \\\r\n  --data '{\"records\":[{\"value\": {\"temp\" : 10 , \"speed\" : 40 , \"direction\" : \"NW\"}  }]}' \\\r\n  http:\/\/localhost:8082\/topics\/%2Fapps%2Fiot-stream%3Asensor-json<\/pre>\n<p>You should see the message printed in the terminal window where the <code>\/apps\/iot-stream:sensor-json<\/code> consumer is running.<\/p>\n<p><strong>To send a binary Message:<\/strong><\/p>\n<ul>\n<li>the query should be a HTTP <code>POST<\/code><\/li>\n<li>the Content-Type should be : <code>application\/vnd.kafka.binary.v1+json<\/code><\/li>\n<li>the Body:<\/li>\n<\/ul>\n<pre class=\"brush:java\">{\r\n  \"records\":\r\n  [\r\n    {\r\n      \"value\":\"SGVsbG8gV29ybGQ=\"\r\n    }\r\n  ]\r\n}<\/pre>\n<p>Note that <code>SGVsbG8gV29ybGQ=<\/code> is the string &#8220;Hello World&#8221; encoded in Base64.<\/p>\n<p>The complete request is:<\/p>\n<pre class=\"brush:java\">curl -X POST -H \"Content-Type: application\/vnd.kafka.binary.v1+json\" \\\r\n  --data '{\"records\":[{\"value\":\"SGVsbG8gV29ybGQ=\"}]}' \\\r\n  http:\/\/localhost:8082\/topics\/%2Fapps%2Fiot-stream%3Asensor-binary<\/pre>\n<p>You should see the message printed in the terminal window where the <code>\/apps\/iot-stream:sensor-binary<\/code> consumer is running.<\/p>\n<p><strong>Sending multiple messages<\/strong><\/p>\n<p>The <code>records<\/code> field of the HTTP Body allows you to send multiple messages for example you can send:<\/p>\n<pre class=\"brush:java\">curl -X POST -H \"Content-Type: application\/vnd.kafka.json.v1+json\" \\\r\n  --data '{\"records\":[{\"value\": {\"temp\" : 12 , \"speed\" : 42 , \"direction\" : \"NW\"}  }, {\"value\": {\"temp\" : 10 , \"speed\" : 37 , \"direction\" : \"N\"}  } ]}' \\\r\n  http:\/\/localhost:8082\/topics\/%2Fapps%2Fiot-stream%3Asensor-json<\/pre>\n<p>This command will send 2 messages, and increment the offset by 2. You can do the same with binary content, just add new element in the JSON array; for example:<\/p>\n<pre class=\"brush:java\">curl -X POST -H \"Content-Type: application\/vnd.kafka.binary.v1+json\" \\\r\n  --data '{\"records\":[{\"value\":\"SGVsbG8gV29ybGQ=\"}, {\"value\":\"Qm9uam91cg==\"}]}' \\\r\n  http:\/\/localhost:8082\/topics\/%2Fapps%2Fiot-stream%3Asensor-binary<\/pre>\n<p>As you probably know, it is possible to set a key to a message to be sure that all the messages with the same key will arrive in the same partition. For this, add the <code>key<\/code> attribute to the message as follow:<\/p>\n<pre class=\"brush:java\">{\r\n  \"records\":\r\n  [\r\n    {\r\n      \"key\": \"K001\",\r\n      \"value\":\r\n      {\r\n        \"temp\" : 10 ,\r\n        \"speed\" : 40 ,\r\n        \"direction\" : \"NW\"\r\n        }  \r\n      }\r\n  ]\r\n}<\/pre>\n<p>Now that you know how to post messages to MapR Stream topics usinf the REST Proxy, let&#8217;s see how to consume the messages.<\/p>\n<h3>Consuming Messages<\/h3>\n<p>The REST proxy can also be used to consume messages from topics; for this you need to:<\/p>\n<ol>\n<li>Create a consumer instance.<\/li>\n<li>Use this URL returned by the first call to read message.<\/li>\n<li>Delete the consumer instanced if needed.<\/li>\n<\/ol>\n<p><strong>Creating the consumer instance<\/strong><\/p>\n<p>The following request creates the consumer instance:<\/p>\n<pre class=\"brush:java\">curl -X POST -H \"Content-Type: application\/vnd.kafka.v1+json\" \\\r\n      --data '{\"name\": \"iot_json_consumer\", \"format\": \"json\", \"auto.offset.reset\": \"earliest\"}' \\\r\n      http:\/\/localhost:8082\/consumers\/%2Fapps%2Fiot-stream%3Asensor-json<\/pre>\n<p>The response from the server looks like:<\/p>\n<pre class=\"brush:java\">{\r\n  \"instance_id\":\"iot_json_consumer\",\r\n  \"base_uri\":\"http:\/\/localhost:8082\/consumers\/%2Fapps%2Fiot-stream%3Asensor-json\/instances\/iot_json_consumer\"\r\n}<\/pre>\n<p>Note that we have used the <code>\/consumers\/[topic_name]<\/code> to create the consumer.<\/p>\n<p>The <code>base_uri<\/code> will be used by the subsequent requests to get the messages from the topic. Like any MapR Streams\/Kafka consumer the <code>auto.offset.reset<\/code> defines its behavior. In this example the value is set to <code>earliest<\/code>, this means that the consumer will read the messages from the beginning. You can find more information about the consumer configuration in the <a href=\"http:\/\/maprdocs.mapr.com\/home\/MapR_Streams\/configuration_parameters_for_consumers.html\">MapR Streams documentation<\/a>.<\/p>\n<p><strong>Consuming the messages<\/strong><\/p>\n<p>To consume the messages, just add the Mapr Streams topic to the URL of the consumer isntance.<\/p>\n<p>The following request consumes the messages from the topic:<\/p>\n<pre class=\"brush:java\">curl -X GET -H \"Accept: application\/vnd.kafka.json.v1+json\" \\\r\nhttp:\/\/localhost:8082\/consumers\/%2Fapps%2Fiot-stream%3Asensor-json\/instances\/iot_json_consumer\/topics\/%2Fapps%2Fiot-stream%3Asensor-json<\/pre>\n<p>This call returns the messages in a JSON document:<\/p>\n<pre class=\"brush:java\">[\r\n  {\"key\":null,\"value\":{\"temp\":10,\"speed\":40,\"direction\":\"NW\"},\"topic\":\"\/apps\/iot-stream:sensor-json\",\"partition\":1,\"offset\":1},\r\n  {\"key\":null,\"value\":{\"temp\":12,\"speed\":42,\"direction\":\"NW\"},\"topic\":\"\/apps\/iot-stream:sensor-json\",\"partition\":1,\"offset\":2},\r\n  {\"key\":null,\"value\":{\"temp\":10,\"speed\":37,\"direction\":\"N\"},\"topic\":\"\/apps\/iot-stream:sensor-json\",\"partition\":1,\"offset\":3}\r\n]<\/pre>\n<p>Each call to the API returns the new messages published, based on the offset of the last call.<\/p>\n<p>Note that the Consumer will be destroyed:<\/p>\n<ul>\n<li>after some idle time set by the <code>consumer.instance.timeout.ms<\/code> (default value set to 300000ms \/ 5 minutes)<\/li>\n<li>where it is destroyed using a REST API call (see below).<\/li>\n<\/ul>\n<h3>Consuming binary format messages<\/h3>\n<p>The approach is the same if you need to consume binary messages, you need to change the format and accept header.<\/p>\n<p>Call this URL to create a consumer instance for the binary topic:<\/p>\n<pre class=\"brush:java\">curl -X POST -H \"Content-Type: application\/vnd.kafka.v1+json\" \\\r\n      --data '{\"name\": \"iot_binary_consumer\", \"format\": \"binary\", \"auto.offset.reset\": \"earliest\"}' \\\r\n      http:\/\/localhost:8082\/consumers\/%2Fapps%2Fiot-stream%3Asensor-binary<\/pre>\n<p>Then consume messages, the accept header is set to <code>application\/vnd.kafka.binary.v1+json<\/code>:<\/p>\n<pre class=\"brush:java\">curl -X GET -H \"Accept: application\/vnd.kafka.binary.v1+json\" \\\r\nhttp:\/\/localhost:8082\/consumers\/%2Fapps%2Fiot-stream%3Asensor-binary\/instances\/iot_binary_consumer\/topics\/%2Fapps%2Fiot-stream%3Asensor-binary<\/pre>\n<p>This call returns the messages in a JSON document, and the value is encoded in Base64<\/p>\n<pre class=\"brush:java\">[\r\n  {\"key\":null,\"value\":\"SGVsbG8gV29ybGQ=\",\"topic\":\"\/apps\/iot-stream:sensor-binary\",\"partition\":1,\"offset\":1},\r\n  {\"key\":null,\"value\":\"Qm9uam91cg==\",\"topic\":\"\/apps\/iot-stream:sensor-binary\",\"partition\":1,\"offset\":2}\r\n]<\/pre>\n<h3>Delete consumer instances<\/h3>\n<p>As mentioned before the consumer will be destroyed automatically based on the <code>consumer.instance.timeout.ms<\/code> configuration of the REST Proxy; it is also possible to destroyed the instance using the consumer instance URI and an HTTP DELETE call, as follow:<\/p>\n<pre class=\"brush:java\">curl -X DELETE http:\/\/localhost:8082\/consumers\/%2Fapps%2Fiot-stream%3Asensor-binary\/instances\/iot_binary_consumer<\/pre>\n<h2>Conclusion<\/h2>\n<p>In this article you have learned how to use the Kafka REST Proxy for MapR Streams that allow any application to use messages published in the MapR Converged Data Platform.<\/p>\n<p>You can find more information about the Kafka REST Proxy in the <a href=\"http:\/\/maprdocs.mapr.com\/home\/Kafka\/REST-proxy.html\">MapR documentation<\/a> and the following resources:<\/p>\n<ul>\n<li><a href=\"https:\/\/www.mapr.com\/blog\/getting-started-sample-programs-mapr-streams\">Getting Started with MapR Streams<\/a><\/li>\n<li><a href=\"https:\/\/www.mapr.com\/streaming-architecture-using-apache-kafka-mapr-streams\">&#8220;Streaming Architecture: New Designs Using Apache Kafka and MapR Streams&#8221; ebook by Ted Dunning and Ellen Friedman<\/a><\/li>\n<\/ul>\n<div class=\"attribution\">\n<table>\n<tbody>\n<tr>\n<td><span class=\"reference\">Reference: <\/span><\/td>\n<td><a href=\"http:\/\/tugdualgrall.blogspot.com\/2017\/01\/getting-started-with-kafka-rest-proxy.html\">Getting Started With Kafka REST Proxy for MapR Streams<\/a> from our <a href=\"http:\/\/www.javacodegeeks.com\/join-us\/jcg\/\">JCG partner<\/a> Tugdual Grall at the <a href=\"http:\/\/tugdualgrall.blogspot.com\/\">Tug&#8217;s Blog<\/a> blog.<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n","protected":false},"excerpt":{"rendered":"<p>Introduction MapR Ecosystem Package 2.0 (MEP) is coming with some new features related to MapR Streams: Kafka REST Proxy for MapR Streams provides a RESTful interface to MapR Streams and Kafka clusters to consume and product messages and to perform administrative operations. Kafka Connect for MapR Streams is a utility for streaming data between MapR &hellip;<\/p>\n","protected":false},"author":211,"featured_media":112,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[8],"tags":[940,1257,54],"class_list":["post-63334","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-enterprise-java","tag-apache-kafka","tag-mapr","tag-restful-web-services"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.5 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Getting Started With Kafka REST Proxy for MapR Streams - Java Code Geeks<\/title>\n<meta name=\"description\" content=\"Introduction MapR Ecosystem Package 2.0 (MEP) is coming with some new features related to MapR Streams: Kafka REST Proxy for MapR Streams provides a\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.javacodegeeks.com\/2017\/01\/getting-started-kafka-rest-proxy-mapr-streams.html\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Getting Started With Kafka REST Proxy for MapR Streams - Java Code Geeks\" \/>\n<meta property=\"og:description\" content=\"Introduction MapR Ecosystem Package 2.0 (MEP) is coming with some new features related to MapR Streams: Kafka REST Proxy for MapR Streams provides a\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.javacodegeeks.com\/2017\/01\/getting-started-kafka-rest-proxy-mapr-streams.html\" \/>\n<meta property=\"og:site_name\" content=\"Java Code Geeks\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/javacodegeeks\" \/>\n<meta property=\"article:author\" content=\"https:\/\/www.facebook.com\/tgrall\" \/>\n<meta property=\"article:published_time\" content=\"2017-01-23T20:00:14+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2012\/10\/enterprise-java-logo.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"150\" \/>\n\t<meta property=\"og:image:height\" content=\"150\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"Tugdual Grall\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@http:\/\/twitter.com\/tgrall\" \/>\n<meta name=\"twitter:site\" content=\"@javacodegeeks\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Tugdual Grall\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"9 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/2017\\\/01\\\/getting-started-kafka-rest-proxy-mapr-streams.html#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/2017\\\/01\\\/getting-started-kafka-rest-proxy-mapr-streams.html\"},\"author\":{\"name\":\"Tugdual Grall\",\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/#\\\/schema\\\/person\\\/b52921fffd460d1dd6c706aab3408681\"},\"headline\":\"Getting Started With Kafka REST Proxy for MapR Streams\",\"datePublished\":\"2017-01-23T20:00:14+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/2017\\\/01\\\/getting-started-kafka-rest-proxy-mapr-streams.html\"},\"wordCount\":1209,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/#organization\"},\"image\":{\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/2017\\\/01\\\/getting-started-kafka-rest-proxy-mapr-streams.html#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.javacodegeeks.com\\\/wp-content\\\/uploads\\\/2012\\\/10\\\/enterprise-java-logo.jpg\",\"keywords\":[\"Apache Kafka\",\"MapR\",\"RESTful Web Services\"],\"articleSection\":[\"Enterprise Java\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/www.javacodegeeks.com\\\/2017\\\/01\\\/getting-started-kafka-rest-proxy-mapr-streams.html#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/2017\\\/01\\\/getting-started-kafka-rest-proxy-mapr-streams.html\",\"url\":\"https:\\\/\\\/www.javacodegeeks.com\\\/2017\\\/01\\\/getting-started-kafka-rest-proxy-mapr-streams.html\",\"name\":\"Getting Started With Kafka REST Proxy for MapR Streams - Java Code Geeks\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/2017\\\/01\\\/getting-started-kafka-rest-proxy-mapr-streams.html#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/2017\\\/01\\\/getting-started-kafka-rest-proxy-mapr-streams.html#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.javacodegeeks.com\\\/wp-content\\\/uploads\\\/2012\\\/10\\\/enterprise-java-logo.jpg\",\"datePublished\":\"2017-01-23T20:00:14+00:00\",\"description\":\"Introduction MapR Ecosystem Package 2.0 (MEP) is coming with some new features related to MapR Streams: Kafka REST Proxy for MapR Streams provides a\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/2017\\\/01\\\/getting-started-kafka-rest-proxy-mapr-streams.html#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/www.javacodegeeks.com\\\/2017\\\/01\\\/getting-started-kafka-rest-proxy-mapr-streams.html\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/2017\\\/01\\\/getting-started-kafka-rest-proxy-mapr-streams.html#primaryimage\",\"url\":\"https:\\\/\\\/www.javacodegeeks.com\\\/wp-content\\\/uploads\\\/2012\\\/10\\\/enterprise-java-logo.jpg\",\"contentUrl\":\"https:\\\/\\\/www.javacodegeeks.com\\\/wp-content\\\/uploads\\\/2012\\\/10\\\/enterprise-java-logo.jpg\",\"width\":150,\"height\":150,\"caption\":\"java-interview-questions-answers\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/2017\\\/01\\\/getting-started-kafka-rest-proxy-mapr-streams.html#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/www.javacodegeeks.com\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Java\",\"item\":\"https:\\\/\\\/www.javacodegeeks.com\\\/category\\\/java\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Enterprise Java\",\"item\":\"https:\\\/\\\/www.javacodegeeks.com\\\/category\\\/java\\\/enterprise-java\"},{\"@type\":\"ListItem\",\"position\":4,\"name\":\"Getting Started With Kafka REST Proxy for MapR Streams\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/#website\",\"url\":\"https:\\\/\\\/www.javacodegeeks.com\\\/\",\"name\":\"Java Code Geeks\",\"description\":\"Java Developers Resource Center\",\"publisher\":{\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/#organization\"},\"alternateName\":\"JCG\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/www.javacodegeeks.com\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/#organization\",\"name\":\"Exelixis Media P.C.\",\"url\":\"https:\\\/\\\/www.javacodegeeks.com\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/#\\\/schema\\\/logo\\\/image\\\/\",\"url\":\"https:\\\/\\\/www.javacodegeeks.com\\\/wp-content\\\/uploads\\\/2022\\\/06\\\/exelixis-logo.png\",\"contentUrl\":\"https:\\\/\\\/www.javacodegeeks.com\\\/wp-content\\\/uploads\\\/2022\\\/06\\\/exelixis-logo.png\",\"width\":864,\"height\":246,\"caption\":\"Exelixis Media P.C.\"},\"image\":{\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/#\\\/schema\\\/logo\\\/image\\\/\"},\"sameAs\":[\"https:\\\/\\\/www.facebook.com\\\/javacodegeeks\",\"https:\\\/\\\/x.com\\\/javacodegeeks\"]},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/#\\\/schema\\\/person\\\/b52921fffd460d1dd6c706aab3408681\",\"name\":\"Tugdual Grall\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/af1b68cee45f3bf495c2cd03b3a14abbb56b53dcad9ef92afc7d387842ef9d72?s=96&d=mm&r=g\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/af1b68cee45f3bf495c2cd03b3a14abbb56b53dcad9ef92afc7d387842ef9d72?s=96&d=mm&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/af1b68cee45f3bf495c2cd03b3a14abbb56b53dcad9ef92afc7d387842ef9d72?s=96&d=mm&r=g\",\"caption\":\"Tugdual Grall\"},\"description\":\"Tugdual Grall, an open source advocate and a passionate developer, is a Chief Technical Evangelist EMEA at MapR. He currently works with the European developer communities to ease MapR, Hadoop, and NoSQL adoption. Before joining MapR, Tug was Technical Evangelist at MongoDB and Couchbase. Tug has also worked as CTO at eXo Platform and JavaEE product manager, and software engineer at Oracle. Tugdual is Co-Founder of the Nantes JUG (Java User Group) that holds since 2008 monthly meeting about Java ecosystem. Tugdual also writes a blog available at http:\\\/\\\/tgrall.github.io\\\/\",\"sameAs\":[\"http:\\\/\\\/tgrall.github.io\\\/\",\"https:\\\/\\\/www.facebook.com\\\/tgrall\",\"http:\\\/\\\/www.linkedin.com\\\/in\\\/tugdualgrall\",\"https:\\\/\\\/x.com\\\/http:\\\/\\\/twitter.com\\\/tgrall\"],\"url\":\"https:\\\/\\\/www.javacodegeeks.com\\\/author\\\/tugdual-grall\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Getting Started With Kafka REST Proxy for MapR Streams - Java Code Geeks","description":"Introduction MapR Ecosystem Package 2.0 (MEP) is coming with some new features related to MapR Streams: Kafka REST Proxy for MapR Streams provides a","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.javacodegeeks.com\/2017\/01\/getting-started-kafka-rest-proxy-mapr-streams.html","og_locale":"en_US","og_type":"article","og_title":"Getting Started With Kafka REST Proxy for MapR Streams - Java Code Geeks","og_description":"Introduction MapR Ecosystem Package 2.0 (MEP) is coming with some new features related to MapR Streams: Kafka REST Proxy for MapR Streams provides a","og_url":"https:\/\/www.javacodegeeks.com\/2017\/01\/getting-started-kafka-rest-proxy-mapr-streams.html","og_site_name":"Java Code Geeks","article_publisher":"https:\/\/www.facebook.com\/javacodegeeks","article_author":"https:\/\/www.facebook.com\/tgrall","article_published_time":"2017-01-23T20:00:14+00:00","og_image":[{"width":150,"height":150,"url":"https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2012\/10\/enterprise-java-logo.jpg","type":"image\/jpeg"}],"author":"Tugdual Grall","twitter_card":"summary_large_image","twitter_creator":"@http:\/\/twitter.com\/tgrall","twitter_site":"@javacodegeeks","twitter_misc":{"Written by":"Tugdual Grall","Est. reading time":"9 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.javacodegeeks.com\/2017\/01\/getting-started-kafka-rest-proxy-mapr-streams.html#article","isPartOf":{"@id":"https:\/\/www.javacodegeeks.com\/2017\/01\/getting-started-kafka-rest-proxy-mapr-streams.html"},"author":{"name":"Tugdual Grall","@id":"https:\/\/www.javacodegeeks.com\/#\/schema\/person\/b52921fffd460d1dd6c706aab3408681"},"headline":"Getting Started With Kafka REST Proxy for MapR Streams","datePublished":"2017-01-23T20:00:14+00:00","mainEntityOfPage":{"@id":"https:\/\/www.javacodegeeks.com\/2017\/01\/getting-started-kafka-rest-proxy-mapr-streams.html"},"wordCount":1209,"commentCount":0,"publisher":{"@id":"https:\/\/www.javacodegeeks.com\/#organization"},"image":{"@id":"https:\/\/www.javacodegeeks.com\/2017\/01\/getting-started-kafka-rest-proxy-mapr-streams.html#primaryimage"},"thumbnailUrl":"https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2012\/10\/enterprise-java-logo.jpg","keywords":["Apache Kafka","MapR","RESTful Web Services"],"articleSection":["Enterprise Java"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.javacodegeeks.com\/2017\/01\/getting-started-kafka-rest-proxy-mapr-streams.html#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.javacodegeeks.com\/2017\/01\/getting-started-kafka-rest-proxy-mapr-streams.html","url":"https:\/\/www.javacodegeeks.com\/2017\/01\/getting-started-kafka-rest-proxy-mapr-streams.html","name":"Getting Started With Kafka REST Proxy for MapR Streams - Java Code Geeks","isPartOf":{"@id":"https:\/\/www.javacodegeeks.com\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.javacodegeeks.com\/2017\/01\/getting-started-kafka-rest-proxy-mapr-streams.html#primaryimage"},"image":{"@id":"https:\/\/www.javacodegeeks.com\/2017\/01\/getting-started-kafka-rest-proxy-mapr-streams.html#primaryimage"},"thumbnailUrl":"https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2012\/10\/enterprise-java-logo.jpg","datePublished":"2017-01-23T20:00:14+00:00","description":"Introduction MapR Ecosystem Package 2.0 (MEP) is coming with some new features related to MapR Streams: Kafka REST Proxy for MapR Streams provides a","breadcrumb":{"@id":"https:\/\/www.javacodegeeks.com\/2017\/01\/getting-started-kafka-rest-proxy-mapr-streams.html#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.javacodegeeks.com\/2017\/01\/getting-started-kafka-rest-proxy-mapr-streams.html"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.javacodegeeks.com\/2017\/01\/getting-started-kafka-rest-proxy-mapr-streams.html#primaryimage","url":"https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2012\/10\/enterprise-java-logo.jpg","contentUrl":"https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2012\/10\/enterprise-java-logo.jpg","width":150,"height":150,"caption":"java-interview-questions-answers"},{"@type":"BreadcrumbList","@id":"https:\/\/www.javacodegeeks.com\/2017\/01\/getting-started-kafka-rest-proxy-mapr-streams.html#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.javacodegeeks.com\/"},{"@type":"ListItem","position":2,"name":"Java","item":"https:\/\/www.javacodegeeks.com\/category\/java"},{"@type":"ListItem","position":3,"name":"Enterprise Java","item":"https:\/\/www.javacodegeeks.com\/category\/java\/enterprise-java"},{"@type":"ListItem","position":4,"name":"Getting Started With Kafka REST Proxy for MapR Streams"}]},{"@type":"WebSite","@id":"https:\/\/www.javacodegeeks.com\/#website","url":"https:\/\/www.javacodegeeks.com\/","name":"Java Code Geeks","description":"Java Developers Resource Center","publisher":{"@id":"https:\/\/www.javacodegeeks.com\/#organization"},"alternateName":"JCG","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.javacodegeeks.com\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/www.javacodegeeks.com\/#organization","name":"Exelixis Media P.C.","url":"https:\/\/www.javacodegeeks.com\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.javacodegeeks.com\/#\/schema\/logo\/image\/","url":"https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2022\/06\/exelixis-logo.png","contentUrl":"https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2022\/06\/exelixis-logo.png","width":864,"height":246,"caption":"Exelixis Media P.C."},"image":{"@id":"https:\/\/www.javacodegeeks.com\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/javacodegeeks","https:\/\/x.com\/javacodegeeks"]},{"@type":"Person","@id":"https:\/\/www.javacodegeeks.com\/#\/schema\/person\/b52921fffd460d1dd6c706aab3408681","name":"Tugdual Grall","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/secure.gravatar.com\/avatar\/af1b68cee45f3bf495c2cd03b3a14abbb56b53dcad9ef92afc7d387842ef9d72?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/af1b68cee45f3bf495c2cd03b3a14abbb56b53dcad9ef92afc7d387842ef9d72?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/af1b68cee45f3bf495c2cd03b3a14abbb56b53dcad9ef92afc7d387842ef9d72?s=96&d=mm&r=g","caption":"Tugdual Grall"},"description":"Tugdual Grall, an open source advocate and a passionate developer, is a Chief Technical Evangelist EMEA at MapR. He currently works with the European developer communities to ease MapR, Hadoop, and NoSQL adoption. Before joining MapR, Tug was Technical Evangelist at MongoDB and Couchbase. Tug has also worked as CTO at eXo Platform and JavaEE product manager, and software engineer at Oracle. Tugdual is Co-Founder of the Nantes JUG (Java User Group) that holds since 2008 monthly meeting about Java ecosystem. Tugdual also writes a blog available at http:\/\/tgrall.github.io\/","sameAs":["http:\/\/tgrall.github.io\/","https:\/\/www.facebook.com\/tgrall","http:\/\/www.linkedin.com\/in\/tugdualgrall","https:\/\/x.com\/http:\/\/twitter.com\/tgrall"],"url":"https:\/\/www.javacodegeeks.com\/author\/tugdual-grall"}]}},"_links":{"self":[{"href":"https:\/\/www.javacodegeeks.com\/wp-json\/wp\/v2\/posts\/63334","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.javacodegeeks.com\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.javacodegeeks.com\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.javacodegeeks.com\/wp-json\/wp\/v2\/users\/211"}],"replies":[{"embeddable":true,"href":"https:\/\/www.javacodegeeks.com\/wp-json\/wp\/v2\/comments?post=63334"}],"version-history":[{"count":0,"href":"https:\/\/www.javacodegeeks.com\/wp-json\/wp\/v2\/posts\/63334\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.javacodegeeks.com\/wp-json\/wp\/v2\/media\/112"}],"wp:attachment":[{"href":"https:\/\/www.javacodegeeks.com\/wp-json\/wp\/v2\/media?parent=63334"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.javacodegeeks.com\/wp-json\/wp\/v2\/categories?post=63334"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.javacodegeeks.com\/wp-json\/wp\/v2\/tags?post=63334"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}