

{"id":14790,"date":"2018-05-22T07:01:14","date_gmt":"2018-05-22T07:01:14","guid":{"rendered":"https:\/\/data-flair.training\/blogs\/?p=14790"},"modified":"2018-05-22T07:01:14","modified_gmt":"2018-05-22T07:01:14","slug":"storm-kafka-integration","status":"publish","type":"post","link":"https:\/\/data-flair.training\/blogs\/storm-kafka-integration\/","title":{"rendered":"Storm Kafka Integration With Configurations and Code"},"content":{"rendered":"<p><span style=\"font-weight: 400\">In this <strong>Kafka Tutorial<\/strong>, we will learn the concept of Storm Kafka Integration. Also, we will discuss Storm architecture, Storm Cluster in this Kafka Storm integration tutorial.<\/span><\/p>\n<p><span style=\"font-weight: 400\"> So, in order to make easier for Kafka developers to ingest and publish data streams from Storm topologies, we perform Storm Kafka Integration.\u00a0<\/span><\/p>\n<p>So, let&#8217;s begin Kafka Storm Integration tutorial.<\/p>\n<h2><span style=\"font-weight: 400\">What is Storm?<\/span><\/h2>\n<p><span style=\"font-weight: 400\">Apache Storm is an open source, distributed, reliable, and fault-tolerant system. There are various use cases of Storm, like real-time analytics, online <strong>machine learning<\/strong>, continuous computation, and Extract Transformation Load (ETL) paradigm.<\/span><\/p>\n<p><span style=\"font-weight: 400\">However, for streaming data processing, there are several components that work together, such as:<\/span><\/p>\n<ul>\n<li style=\"font-weight: 400\"><strong>Spout<\/strong><\/li>\n<\/ul>\n<p><span style=\"font-weight: 400\">The spout is a source of the stream, which is a continuous stream of log data.<\/span><\/p>\n<ul>\n<li style=\"font-weight: 400\"><strong>Bolt<\/strong><\/li>\n<\/ul>\n<p><span style=\"font-weight: 400\">Further, spout passes the data to a component, what we call the bolt. Basically, bolt consumes any number of input streams, does some processing, and possibly emits new streams.<\/span><\/p>\n<p><span style=\"font-weight: 400\">Below diagram describes spout and bolt in the Storm Architecture:<\/span><\/p>\n<div id=\"attachment_14791\" style=\"width: 1210px\" class=\"wp-caption aligncenter\"><a href=\"https:\/\/data-flair.training\/blogs\/wp-content\/uploads\/sites\/2\/2018\/04\/Storm.png\"><img loading=\"lazy\" decoding=\"async\" aria-describedby=\"caption-attachment-14791\" class=\"wp-image-14791 size-full\" src=\"https:\/\/data-flair.training\/blogs\/wp-content\/uploads\/sites\/2\/2018\/04\/Storm.png\" alt=\"Storm Kafka Integration- Apache Storm Architecture\" width=\"1200\" height=\"628\" srcset=\"https:\/\/data-flair.training\/blogs\/wp-content\/uploads\/sites\/2\/2018\/04\/Storm.png 1200w, https:\/\/data-flair.training\/blogs\/wp-content\/uploads\/sites\/2\/2018\/04\/Storm-150x79.png 150w, https:\/\/data-flair.training\/blogs\/wp-content\/uploads\/sites\/2\/2018\/04\/Storm-300x157.png 300w, https:\/\/data-flair.training\/blogs\/wp-content\/uploads\/sites\/2\/2018\/04\/Storm-768x402.png 768w, https:\/\/data-flair.training\/blogs\/wp-content\/uploads\/sites\/2\/2018\/04\/Storm-1024x536.png 1024w\" sizes=\"auto, (max-width: 1200px) 100vw, 1200px\" \/><\/a><p id=\"caption-attachment-14791\" class=\"wp-caption-text\">Storm Kafka Integration- Apache Storm Architecture<\/p><\/div>\n<p><span style=\"font-weight: 400\">However, let\u2019s suppose a Storm cluster to be a chain of bolt components. Here, each bolt performs some kind of transformation on the data streamed by the spout.<\/span><\/p>\n<p><span style=\"font-weight: 400\">Moreover, jobs refer to as topologies, in the Storm cluster. Although, these topologies run forever. Afterward, topologies (graphs of computation) are created, for real-time computation on Storm. So, how data will flow from spouts through bolts, topologies will define it.<\/span><\/p>\n<h2><span style=\"font-weight: 400\">What is Storm Kafka Integration?<\/span><\/h2>\n<p><span style=\"font-weight: 400\">Generally, both Kafka and Storm complement each other. So, we can say their powerful cooperation enables real-time streaming analytics for fast-moving<strong> big data<\/strong>. <\/span><\/p>\n<p><span style=\"font-weight: 400\">Hence, in order to make easier for developers to ingest and publish data streams from Storm topologies, we perform Kafka &#8211; Storm integration.<\/span><\/p>\n<div id=\"attachment_14915\" style=\"width: 1210px\" class=\"wp-caption aligncenter\"><a href=\"https:\/\/data-flair.training\/blogs\/wp-content\/uploads\/sites\/2\/2018\/05\/Introduction-to-Kafka-Storm-01-1.jpg\"><img loading=\"lazy\" decoding=\"async\" aria-describedby=\"caption-attachment-14915\" class=\"wp-image-14915 size-full\" src=\"https:\/\/data-flair.training\/blogs\/wp-content\/uploads\/sites\/2\/2018\/05\/Introduction-to-Kafka-Storm-01-1.jpg\" alt=\"Storm Kafka Integration\" width=\"1200\" height=\"628\" srcset=\"https:\/\/data-flair.training\/blogs\/wp-content\/uploads\/sites\/2\/2018\/05\/Introduction-to-Kafka-Storm-01-1.jpg 1200w, https:\/\/data-flair.training\/blogs\/wp-content\/uploads\/sites\/2\/2018\/05\/Introduction-to-Kafka-Storm-01-1-150x79.jpg 150w, https:\/\/data-flair.training\/blogs\/wp-content\/uploads\/sites\/2\/2018\/05\/Introduction-to-Kafka-Storm-01-1-300x157.jpg 300w, https:\/\/data-flair.training\/blogs\/wp-content\/uploads\/sites\/2\/2018\/05\/Introduction-to-Kafka-Storm-01-1-768x402.jpg 768w, https:\/\/data-flair.training\/blogs\/wp-content\/uploads\/sites\/2\/2018\/05\/Introduction-to-Kafka-Storm-01-1-1024x536.jpg 1024w\" sizes=\"auto, (max-width: 1200px) 100vw, 1200px\" \/><\/a><p id=\"caption-attachment-14915\" class=\"wp-caption-text\">Apache Storm Kafka Integration &#8211; Storm Cluster with Kafka Broker<\/p><\/div>\n<p>Below diagram describes the high-level integration view of what a Kafka Storm integration working model will look like:<\/p>\n<div id=\"attachment_14792\" style=\"width: 1210px\" class=\"wp-caption aligncenter\"><a href=\"https:\/\/data-flair.training\/blogs\/wp-content\/uploads\/sites\/2\/2018\/04\/Storm-Cluster.png\"><img loading=\"lazy\" decoding=\"async\" aria-describedby=\"caption-attachment-14792\" class=\"wp-image-14792 size-full\" src=\"https:\/\/data-flair.training\/blogs\/wp-content\/uploads\/sites\/2\/2018\/04\/Storm-Cluster.png\" alt=\"Storm Kafka Integration- The Working model of Kafka Storm\" width=\"1200\" height=\"628\" srcset=\"https:\/\/data-flair.training\/blogs\/wp-content\/uploads\/sites\/2\/2018\/04\/Storm-Cluster.png 1200w, https:\/\/data-flair.training\/blogs\/wp-content\/uploads\/sites\/2\/2018\/04\/Storm-Cluster-150x79.png 150w, https:\/\/data-flair.training\/blogs\/wp-content\/uploads\/sites\/2\/2018\/04\/Storm-Cluster-300x157.png 300w, https:\/\/data-flair.training\/blogs\/wp-content\/uploads\/sites\/2\/2018\/04\/Storm-Cluster-768x402.png 768w, https:\/\/data-flair.training\/blogs\/wp-content\/uploads\/sites\/2\/2018\/04\/Storm-Cluster-1024x536.png 1024w\" sizes=\"auto, (max-width: 1200px) 100vw, 1200px\" \/><\/a><p id=\"caption-attachment-14792\" class=\"wp-caption-text\">Storm Kafka Integration- The Working model of Kafka Storm<\/p><\/div>\n<h3>a. Using KafkaSpout<\/h3>\n<p><span style=\"font-weight: 400\">Basically, a regular spout implementation that reads from a <strong>Kafka cluster<\/strong> is KafkaSpout. Its basic usage is:<\/span><\/p>\n<pre class=\"EnlighterJSRAW\">SpoutConfig spoutConfig = new SpoutConfig(\n ImmutableList.of(\"kafkahost1\", \"kafkahost2\"), \/\/ list of Kafka brokers\n 8, \/\/ number of partitions per host\n \"clicks\", \/\/ topic to read from\n \"\/kafkastorm\", \/\/ the root path in Zookeeper for the spout to store the consumer offsets\n \"discovery\"); \/\/ an id for this consumer for storing the consumer offsets in Zookeeper\nKafkaSpout kafkaSpout = new KafkaSpout(spoutConfig);\n<\/pre>\n<p><span style=\"font-family: Verdana, Geneva, sans-serif\">However, with a static list of brokers and a fixed number of partitions per host, the spout is parameterized.<\/span><br \/>\nAlso, it stores the state of the offsets its consumed in Zookeeper. Moreover, to store the offsets and an id for this particular spout, the spout is parameterized with the root path.\u00a0Hence, offsets for partitions will be stored in these paths, where &#8220;0&#8221;, &#8220;1&#8221; are ids for the partitions:<\/p>\n<pre class=\"EnlighterJSRAW\">{root path}\/{id}\/0\n{root path}\/{id}\/1\n{root path}\/{id}\/2\n{root path}\/{id}\/3\n\u2026<\/pre>\n<p>Make sure the offsets will be stored in the same Zookeeper cluster that Storm uses, by default. Also, we can override this via our spout config like this:<\/p>\n<pre class=\"EnlighterJSRAW\">spoutConfig.zkServers = ImmutableList.of(\"otherserver.com\");\nspoutConfig.zkPort = 2191;<\/pre>\n<p>The ability to force the spout to rewind to a previous offset is shown by the following configuration.\u00a0We can do forceStartOffsetTime on the spout config, like so:<\/p>\n<pre class=\"EnlighterJSRAW\">spoutConfig.forceStartOffsetTime(-2);<\/pre>\n<p>That will choose the latest offset written around that timestamp to start consuming. Also, we can force the spout to always start from the latest offset by passing in -1, and we can force it to start from the earliest offset by passing in -2.<\/p>\n<h4>i. Parameters for connecting to Kafka Cluster<\/h4>\n<p><span style=\"font-weight: 400\">In addition, KafkaSpout is a regular spout implementation that reads the data from a Kafka cluster. Moreover, in order to connect to the Kafka cluster, it requires the following parameters:<\/span><br \/>\na. List of Kafka brokers<br \/>\nb. The number of partitions per host<br \/>\nc.\u00a0A topic name used to pull the message.<br \/>\nd. Root path in ZooKeeper, where Spout stores the consumer offset<br \/>\ne. ID for the consumer required for storing the consumer offset in ZooKeeper<br \/>\nBelow <strong>code<\/strong> sample shows the KafkaSpout class instance initialization with the previous parameters:<\/p>\n<pre class=\"EnlighterJSRAW\">Copy\nSpoutConfig spoutConfig = new SpoutConfig(\n ImmutableList.of(\"localhost:9092\", \"localhost:9093\"),\n 2,\n \" othertopic\",\n \"\/kafkastorm\",\n \"consumID\");\nKafkaSpout kafkaSpout = new KafkaSpout(spoutConfig);<\/pre>\n<p>Moreover, to store the states of the message offset and segment consumption tracking if it is consumed, the Kafka Spout uses ZooKeeper.<\/p>\n<p>At the root path specified for the ZooKeeper, these offsets are stored. Also, for storing the message offset, Storm uses its own ZooKeeper cluster, by default. However, by setting other ZooKeeper clusters we can use in Spout configuration.<\/p>\n<p>To specify how Spout fetches messages from a Kafka cluster by setting properties, Kafka Spout also offers an option,\u00a0like buffer sizes and timeouts.<\/p>\n<p>It is very important to note that in order to run Kafka with Storm, it is a requirement to\u00a0set up both Storm and Kafka clusters and\u00a0also it should be in running state.<\/p>\n<p>So, this was all about Storm Kafka Integration. Hope you like our explanation.<\/p>\n<h2><span style=\"font-weight: 400\">Conclusion<\/span><\/h2>\n<p><span style=\"font-weight: 400\">Hence, In this Storm Kafka integration tutorial, we have seen the concept of Storm Kafka Integration. Here, we discussed a brief introduction to Apache Storm, Storm Architecture, Storm Cluster. <\/span><\/p>\n<p><span style=\"font-weight: 400\">Lastly, we discussed implementation using KafkaSpout. In the next article, we will see Kafka-Spark Integration. Keep visiting at Data Flair. Furthermore, if you have any query, feel free to ask in the comment section.<\/span><\/p>\n","protected":false},"excerpt":{"rendered":"<p>In this Kafka Tutorial, we will learn the concept of Storm Kafka Integration. Also, we will discuss Storm architecture, Storm Cluster in this Kafka Storm integration tutorial. So, in order to make easier for&#46;&#46;&#46;<\/p>\n","protected":false},"author":5,"featured_media":73722,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[9],"tags":[976,2828,7946,7947,7988,13206,13871,13872,13873,13874,13875,15597,15991],"class_list":["post-14790","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-kafka","tag-apache-storm","tag-components-of-storm","tag-kafka-spout","tag-kafka-storm-interagatin","tag-kafkaspout","tag-spout-config","tag-storm","tag-storm-architecture","tag-storm-cluster","tag-storm-components","tag-storm-kafka-integration","tag-what-is-apache-storm","tag-what-is-storm"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.8 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Storm Kafka Integration With Configurations and Code - DataFlair<\/title>\n<meta name=\"description\" content=\"Storm Kafka Integration,introduction to storm,Kafka Spout,Parameters for connecting with Kafka Clusters,implementation using Kafka Spout,Components of Storm\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/data-flair.training\/blogs\/storm-kafka-integration\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Storm Kafka Integration With Configurations and Code - DataFlair\" \/>\n<meta property=\"og:description\" content=\"Storm Kafka Integration,introduction to storm,Kafka Spout,Parameters for connecting with Kafka Clusters,implementation using Kafka Spout,Components of Storm\" \/>\n<meta property=\"og:url\" content=\"https:\/\/data-flair.training\/blogs\/storm-kafka-integration\/\" \/>\n<meta property=\"og:site_name\" content=\"DataFlair\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/DataFlairWS\/\" \/>\n<meta property=\"article:published_time\" content=\"2018-05-22T07:01:14+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/data-flair.training\/blogs\/wp-content\/uploads\/sites\/2\/2018\/05\/storm-kafka-integration.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"802\" \/>\n\t<meta property=\"og:image:height\" content=\"420\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"DataFlair Team\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@DataFlairWS\" \/>\n<meta name=\"twitter:site\" content=\"@DataFlairWS\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"DataFlair Team\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"5 minutes\" \/>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Storm Kafka Integration With Configurations and Code - DataFlair","description":"Storm Kafka Integration,introduction to storm,Kafka Spout,Parameters for connecting with Kafka Clusters,implementation using Kafka Spout,Components of Storm","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:\/\/data-flair.training\/blogs\/storm-kafka-integration\/","og_locale":"en_US","og_type":"article","og_title":"Storm Kafka Integration With Configurations and Code - DataFlair","og_description":"Storm Kafka Integration,introduction to storm,Kafka Spout,Parameters for connecting with Kafka Clusters,implementation using Kafka Spout,Components of Storm","og_url":"https:\/\/data-flair.training\/blogs\/storm-kafka-integration\/","og_site_name":"DataFlair","article_publisher":"https:\/\/www.facebook.com\/DataFlairWS\/","article_published_time":"2018-05-22T07:01:14+00:00","og_image":[{"width":802,"height":420,"url":"https:\/\/data-flair.training\/blogs\/wp-content\/uploads\/sites\/2\/2018\/05\/storm-kafka-integration.jpg","type":"image\/jpeg"}],"author":"DataFlair Team","twitter_card":"summary_large_image","twitter_creator":"@DataFlairWS","twitter_site":"@DataFlairWS","twitter_misc":{"Written by":"DataFlair Team","Est. reading time":"5 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/data-flair.training\/blogs\/storm-kafka-integration\/#article","isPartOf":{"@id":"https:\/\/data-flair.training\/blogs\/storm-kafka-integration\/"},"author":{"name":"DataFlair Team","@id":"https:\/\/data-flair.training\/blogs\/#\/schema\/person\/7f83c342f5d1632d6f7b4b0b0f447823"},"headline":"Storm Kafka Integration With Configurations and Code","datePublished":"2018-05-22T07:01:14+00:00","mainEntityOfPage":{"@id":"https:\/\/data-flair.training\/blogs\/storm-kafka-integration\/"},"wordCount":833,"commentCount":1,"publisher":{"@id":"https:\/\/data-flair.training\/blogs\/#organization"},"image":{"@id":"https:\/\/data-flair.training\/blogs\/storm-kafka-integration\/#primaryimage"},"thumbnailUrl":"https:\/\/data-flair.training\/blogs\/wp-content\/uploads\/sites\/2\/2018\/05\/storm-kafka-integration.jpg","keywords":["apache storm","components of Storm","Kafka Spout","Kafka storm interagatin","KafkaSpout","spout config","storm","storm architecture","storm cluster","storm components","storm kafka integration","What is Apache Storm","what is storm"],"articleSection":["Apache Kafka Tutorials"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/data-flair.training\/blogs\/storm-kafka-integration\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/data-flair.training\/blogs\/storm-kafka-integration\/","url":"https:\/\/data-flair.training\/blogs\/storm-kafka-integration\/","name":"Storm Kafka Integration With Configurations and Code - DataFlair","isPartOf":{"@id":"https:\/\/data-flair.training\/blogs\/#website"},"primaryImageOfPage":{"@id":"https:\/\/data-flair.training\/blogs\/storm-kafka-integration\/#primaryimage"},"image":{"@id":"https:\/\/data-flair.training\/blogs\/storm-kafka-integration\/#primaryimage"},"thumbnailUrl":"https:\/\/data-flair.training\/blogs\/wp-content\/uploads\/sites\/2\/2018\/05\/storm-kafka-integration.jpg","datePublished":"2018-05-22T07:01:14+00:00","description":"Storm Kafka Integration,introduction to storm,Kafka Spout,Parameters for connecting with Kafka Clusters,implementation using Kafka Spout,Components of Storm","breadcrumb":{"@id":"https:\/\/data-flair.training\/blogs\/storm-kafka-integration\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/data-flair.training\/blogs\/storm-kafka-integration\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/data-flair.training\/blogs\/storm-kafka-integration\/#primaryimage","url":"https:\/\/data-flair.training\/blogs\/wp-content\/uploads\/sites\/2\/2018\/05\/storm-kafka-integration.jpg","contentUrl":"https:\/\/data-flair.training\/blogs\/wp-content\/uploads\/sites\/2\/2018\/05\/storm-kafka-integration.jpg","width":802,"height":420,"caption":"storm kafka integration configurations & code"},{"@type":"BreadcrumbList","@id":"https:\/\/data-flair.training\/blogs\/storm-kafka-integration\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Blog Home","item":"https:\/\/data-flair.training\/blogs\/"},{"@type":"ListItem","position":2,"name":"Apache Kafka Tutorials","item":"https:\/\/data-flair.training\/blogs\/category\/kafka\/"},{"@type":"ListItem","position":3,"name":"Storm Kafka Integration With Configurations and Code"}]},{"@type":"WebSite","@id":"https:\/\/data-flair.training\/blogs\/#website","url":"https:\/\/data-flair.training\/blogs\/","name":"DataFlair","description":"Learn Today. Lead Tomorrow.","publisher":{"@id":"https:\/\/data-flair.training\/blogs\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/data-flair.training\/blogs\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/data-flair.training\/blogs\/#organization","name":"DataFlair","url":"https:\/\/data-flair.training\/blogs\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/data-flair.training\/blogs\/#\/schema\/logo\/image\/","url":"https:\/\/data-flair.training\/blogs\/wp-content\/uploads\/sites\/2\/2016\/07\/Data-Flair.png","contentUrl":"https:\/\/data-flair.training\/blogs\/wp-content\/uploads\/sites\/2\/2016\/07\/Data-Flair.png","width":106,"height":48,"caption":"DataFlair"},"image":{"@id":"https:\/\/data-flair.training\/blogs\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/DataFlairWS\/","https:\/\/x.com\/DataFlairWS","https:\/\/www.linkedin.com\/company\/dataflair-web-services-pvt-ltd\/","https:\/\/www.youtube.com\/user\/DataFlairWS"]},{"@type":"Person","@id":"https:\/\/data-flair.training\/blogs\/#\/schema\/person\/7f83c342f5d1632d6f7b4b0b0f447823","name":"DataFlair Team","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/secure.gravatar.com\/avatar\/4cf3a74600d131330b8c481d519afd1574093ed89f6d3396a95393ad223eb7cd?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/4cf3a74600d131330b8c481d519afd1574093ed89f6d3396a95393ad223eb7cd?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/4cf3a74600d131330b8c481d519afd1574093ed89f6d3396a95393ad223eb7cd?s=96&d=mm&r=g","caption":"DataFlair Team"},"description":"DataFlair Team creates expert-level guides on programming, Java, Python, C++, DSA, AI, ML, data Science, Android, Flutter, MERN, Web Development, and technology. Our goal is to empower learners with easy-to-understand content. Explore our resources for career growth and practical learning.","url":"https:\/\/data-flair.training\/blogs\/author\/dfteam1\/"}]}},"amp_enabled":true,"_links":{"self":[{"href":"https:\/\/data-flair.training\/blogs\/wp-json\/wp\/v2\/posts\/14790","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/data-flair.training\/blogs\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/data-flair.training\/blogs\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/data-flair.training\/blogs\/wp-json\/wp\/v2\/users\/5"}],"replies":[{"embeddable":true,"href":"https:\/\/data-flair.training\/blogs\/wp-json\/wp\/v2\/comments?post=14790"}],"version-history":[{"count":0,"href":"https:\/\/data-flair.training\/blogs\/wp-json\/wp\/v2\/posts\/14790\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/data-flair.training\/blogs\/wp-json\/wp\/v2\/media\/73722"}],"wp:attachment":[{"href":"https:\/\/data-flair.training\/blogs\/wp-json\/wp\/v2\/media?parent=14790"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/data-flair.training\/blogs\/wp-json\/wp\/v2\/categories?post=14790"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/data-flair.training\/blogs\/wp-json\/wp\/v2\/tags?post=14790"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}