{"id":1064,"date":"2021-04-02T13:00:09","date_gmt":"2021-04-02T12:00:09","guid":{"rendered":"http:\/\/www.igfasouza.com\/blog\/?p=1064"},"modified":"2021-04-26T14:34:34","modified_gmt":"2021-04-26T13:34:34","slug":"kraft-aka-kip-500-and-raspberry-pi","status":"publish","type":"post","link":"http:\/\/www.igfasouza.com\/blog\/kraft-aka-kip-500-and-raspberry-pi\/","title":{"rendered":"KRaft aka KIP-500 and Raspberry PI"},"content":{"rendered":"<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-1065\" src=\"http:\/\/www.igfasouza.com\/blog\/wp-content\/uploads\/2021\/04\/kafka-current-proposed-1024x445.png\" alt=\"\" width=\"1024\" height=\"445\" srcset=\"http:\/\/www.igfasouza.com\/blog\/wp-content\/uploads\/2021\/04\/kafka-current-proposed-1024x445.png 1024w, http:\/\/www.igfasouza.com\/blog\/wp-content\/uploads\/2021\/04\/kafka-current-proposed-1024x445-300x130.png 300w, http:\/\/www.igfasouza.com\/blog\/wp-content\/uploads\/2021\/04\/kafka-current-proposed-1024x445-768x334.png 768w, http:\/\/www.igfasouza.com\/blog\/wp-content\/uploads\/2021\/04\/kafka-current-proposed-1024x445-624x271.png 624w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/p>\n<p><b>How goes the battle?<\/b><\/p>\n<p>It is now possible to run Apache Kafka without Apache ZooKeeper! KRaft <a href=\"https:\/\/www.confluent.io\/blog\/kafka-without-zookeeper-a-sneak-peek\/\" target=\"_blank\" rel=\"noopener\">(aka KIP-500)<\/a> mode Early Access Release is available to <a href=\"https:\/\/github.com\/apache\/kafka\/blob\/6d1d68617ecd023b787f54aafc24a4232663428d\/config\/kraft\/README.md\" target=\"_blank\" rel=\"noopener\">download<\/a>.<\/p>\n<p>This is another blog about Kafka and Raspberry PI, where I want to show how I did a simple KRaft test.<\/p>\n<p>If you\u2019re not familiar with Kafka, I suggest you have a look at my previous post <a href=\"http:\/\/www.igfasouza.com\/blog\/what-is-kafka\/\" target=\"_blank\" rel=\"noopener\">What is Kafka<\/a> and I suggest you check my blog about how I created a <a href=\"http:\/\/www.igfasouza.com\/blog\/raspberry-pi-kafka-cluster\/\" target=\"_blank\" rel=\"noopener\">Raspberry PI Kafka cluster<\/a>.<\/p>\n<p style=\"margin: 5px;\">First, let&#8217;s download the new beta Kafka version.<\/p>\n<div class=\"codecolorer-container bash blackboard\" style=\"overflow:auto;white-space:nowrap;\"><table cellspacing=\"0\" cellpadding=\"0\"><tbody><tr><td class=\"line-numbers\"><div>1<br \/><\/div><\/td><td><div class=\"bash codecolorer\"><span class=\"kw2\">wget<\/span> https:<span class=\"sy0\">\/\/<\/span>github.com<span class=\"sy0\">\/<\/span>apache<span class=\"sy0\">\/<\/span>kafka<span class=\"sy0\">\/<\/span>archive<span class=\"sy0\">\/<\/span>refs<span class=\"sy0\">\/<\/span>tags<span class=\"sy0\">\/<\/span>2.8.0-rc0.zip<\/div><\/td><\/tr><\/tbody><\/table><\/div>\n<p style=\"margin: 5px;\">You can follow the GitHub readme. The first step is to generate an ID for your new cluster, using the kafka-storage tool<\/p>\n<div class=\"codecolorer-container bash blackboard\" style=\"overflow:auto;white-space:nowrap;\"><table cellspacing=\"0\" cellpadding=\"0\"><tbody><tr><td class=\"line-numbers\"><div>1<br \/><\/div><\/td><td><div class=\"bash codecolorer\">.<span class=\"sy0\">\/<\/span>bin<span class=\"sy0\">\/<\/span>kafka-storage.sh random-uuid<\/div><\/td><\/tr><\/tbody><\/table><\/div>\n<p style=\"margin: 5px;\">Format your storage directories.<\/p>\n<div class=\"codecolorer-container bash blackboard\" style=\"overflow:auto;white-space:nowrap;\"><table cellspacing=\"0\" cellpadding=\"0\"><tbody><tr><td class=\"line-numbers\"><div>1<br \/><\/div><\/td><td><div class=\"bash codecolorer\">.<span class=\"sy0\">\/<\/span>bin<span class=\"sy0\">\/<\/span>kafka-storage.sh format <span class=\"re5\">-t<\/span> &nbsp;<span class=\"re5\">-c<\/span> .<span class=\"sy0\">\/<\/span>config<span class=\"sy0\">\/<\/span>kraft<span class=\"sy0\">\/<\/span>server.properties<\/div><\/td><\/tr><\/tbody><\/table><\/div>\n<p style=\"margin: 5px;\">Start the Kafka server on each node.<\/p>\n<div class=\"codecolorer-container bash blackboard\" style=\"overflow:auto;white-space:nowrap;\"><table cellspacing=\"0\" cellpadding=\"0\"><tbody><tr><td class=\"line-numbers\"><div>1<br \/><\/div><\/td><td><div class=\"bash codecolorer\">.<span class=\"sy0\">\/<\/span>bin<span class=\"sy0\">\/<\/span>kafka-server-start.sh .<span class=\"sy0\">\/<\/span>config<span class=\"sy0\">\/<\/span>kraft<span class=\"sy0\">\/<\/span>server.properties<\/div><\/td><\/tr><\/tbody><\/table><\/div>\n<p style=\"margin: 5px;\">Create a topic.<\/p>\n<div class=\"codecolorer-container bash blackboard\" style=\"overflow:auto;white-space:nowrap;\"><table cellspacing=\"0\" cellpadding=\"0\"><tbody><tr><td class=\"line-numbers\"><div>1<br \/><\/div><\/td><td><div class=\"bash codecolorer\">.<span class=\"sy0\">\/<\/span>bin<span class=\"sy0\">\/<\/span>kafka-topics.sh <span class=\"re5\">--create<\/span> <span class=\"re5\">--topic<\/span> igor <span class=\"re5\">--partitions<\/span> <span class=\"nu0\">1<\/span> <span class=\"re5\">--replication-factor<\/span> <span class=\"nu0\">1<\/span> <span class=\"re5\">--bootstrap-server<\/span> localhost:<span class=\"nu0\">9092<\/span><\/div><\/td><\/tr><\/tbody><\/table><\/div>\n<p style=\"margin: 5px;\">Producer<\/p>\n<div class=\"codecolorer-container bash blackboard\" style=\"overflow:auto;white-space:nowrap;\"><table cellspacing=\"0\" cellpadding=\"0\"><tbody><tr><td class=\"line-numbers\"><div>1<br \/><\/div><\/td><td><div class=\"bash codecolorer\">kafka-console-producer.sh <span class=\"re5\">--broker-list<\/span> localhost:<span class=\"nu0\">9092<\/span> <span class=\"re5\">--topic<\/span> igor<\/div><\/td><\/tr><\/tbody><\/table><\/div>\n<p style=\"margin: 5px;\">Consumer<\/p>\n<div class=\"codecolorer-container bash blackboard\" style=\"overflow:auto;white-space:nowrap;\"><table cellspacing=\"0\" cellpadding=\"0\"><tbody><tr><td class=\"line-numbers\"><div>1<br \/><\/div><\/td><td><div class=\"bash codecolorer\">kafka-console-consumer.sh <span class=\"re5\">--bootstrap-server<\/span> localhost:<span class=\"nu0\">9092<\/span> <span class=\"re5\">--topic<\/span> igor <span class=\"re5\">--from-beginning<\/span><\/div><\/td><\/tr><\/tbody><\/table><\/div>\n<p style=\"margin: 5px;\">Depending on each Raspberry Pi version you are using you will need to change the <em>bin\/kafka-server-start.sh<\/em> with<\/p>\n<div class=\"codecolorer-container bash blackboard\" style=\"overflow:auto;white-space:nowrap;\"><table cellspacing=\"0\" cellpadding=\"0\"><tbody><tr><td class=\"line-numbers\"><div>1<br \/><\/div><\/td><td><div class=\"bash codecolorer\"><span class=\"kw3\">export<\/span> <span class=\"re2\">KAFKA_HEAP_OPTS<\/span>=<span class=\"st0\">&quot;-Xmx256M -Xms128M&quot;<\/span><\/div><\/td><\/tr><\/tbody><\/table><\/div>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-large wp-image-1066\" src=\"http:\/\/www.igfasouza.com\/blog\/wp-content\/uploads\/2021\/04\/kafka-1024x583.jpg\" alt=\"\" width=\"625\" height=\"356\" srcset=\"http:\/\/www.igfasouza.com\/blog\/wp-content\/uploads\/2021\/04\/kafka-1024x583.jpg 1024w, http:\/\/www.igfasouza.com\/blog\/wp-content\/uploads\/2021\/04\/kafka-300x171.jpg 300w, http:\/\/www.igfasouza.com\/blog\/wp-content\/uploads\/2021\/04\/kafka-768x437.jpg 768w, http:\/\/www.igfasouza.com\/blog\/wp-content\/uploads\/2021\/04\/kafka-624x355.jpg 624w, http:\/\/www.igfasouza.com\/blog\/wp-content\/uploads\/2021\/04\/kafka.jpg 2048w\" sizes=\"auto, (max-width: 625px) 100vw, 625px\" \/><br \/>\n<small>Picture 1: Terminal Logs<\/small><\/p>\n<p>And that is it. Now you are ready to play with Kafka without Apache ZooKeeper on your Raspberry PI.<\/p>\n<p>I came up with the idea to use a simple REST interface application to produce and consume Kafka data.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-large wp-image-1067\" src=\"http:\/\/www.igfasouza.com\/blog\/wp-content\/uploads\/2021\/04\/Screenshot-2021-04-02-at-10.44.48-1024x691.png\" alt=\"\" width=\"625\" height=\"422\" srcset=\"http:\/\/www.igfasouza.com\/blog\/wp-content\/uploads\/2021\/04\/Screenshot-2021-04-02-at-10.44.48-1024x691.png 1024w, http:\/\/www.igfasouza.com\/blog\/wp-content\/uploads\/2021\/04\/Screenshot-2021-04-02-at-10.44.48-300x202.png 300w, http:\/\/www.igfasouza.com\/blog\/wp-content\/uploads\/2021\/04\/Screenshot-2021-04-02-at-10.44.48-768x518.png 768w, http:\/\/www.igfasouza.com\/blog\/wp-content\/uploads\/2021\/04\/Screenshot-2021-04-02-at-10.44.48-624x421.png 624w, http:\/\/www.igfasouza.com\/blog\/wp-content\/uploads\/2021\/04\/Screenshot-2021-04-02-at-10.44.48.png 1302w\" sizes=\"auto, (max-width: 625px) 100vw, 625px\" \/><br \/>\n<small>Picture 2: Kafka REST application. Created with excalidraw.com<\/small><\/p>\n<p>It can be any webapp, it can use Quarkus, Micronaur, Spring or any other framework and I can run in a simple Raspberry PI zero. With that, I can integrate everything in my house with the Raspberry PI Kafka cluster.<\/p>\n<p>KRaft is in Early Access and is not a production-ready product, but is perfect to test with Raspberry PI at home. No Zookeeper means less memory, less disk space and fewer steps to configure your cluster.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>How goes the battle? It is now possible to run Apache Kafka without Apache ZooKeeper! KRaft (aka KIP-500) mode Early Access Release is available to download. This is another blog about Kafka and Raspberry PI, where I want to show&hellip; <a href=\"http:\/\/www.igfasouza.com\/blog\/kraft-aka-kip-500-and-raspberry-pi\/\" class=\"more-link\">Continue Reading <span class=\"meta-nav\">&rarr;<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":1065,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[25],"tags":[7],"class_list":["post-1064","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-kafka","tag-kafka"],"_links":{"self":[{"href":"http:\/\/www.igfasouza.com\/blog\/wp-json\/wp\/v2\/posts\/1064","targetHints":{"allow":["GET"]}}],"collection":[{"href":"http:\/\/www.igfasouza.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/www.igfasouza.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/www.igfasouza.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"http:\/\/www.igfasouza.com\/blog\/wp-json\/wp\/v2\/comments?post=1064"}],"version-history":[{"count":6,"href":"http:\/\/www.igfasouza.com\/blog\/wp-json\/wp\/v2\/posts\/1064\/revisions"}],"predecessor-version":[{"id":1110,"href":"http:\/\/www.igfasouza.com\/blog\/wp-json\/wp\/v2\/posts\/1064\/revisions\/1110"}],"wp:featuredmedia":[{"embeddable":true,"href":"http:\/\/www.igfasouza.com\/blog\/wp-json\/wp\/v2\/media\/1065"}],"wp:attachment":[{"href":"http:\/\/www.igfasouza.com\/blog\/wp-json\/wp\/v2\/media?parent=1064"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/www.igfasouza.com\/blog\/wp-json\/wp\/v2\/categories?post=1064"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/www.igfasouza.com\/blog\/wp-json\/wp\/v2\/tags?post=1064"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}