{"id":36323,"date":"2022-12-13T22:44:37","date_gmt":"2022-12-13T17:14:37","guid":{"rendered":"http:\/\/ismiletechnologies.com\/?p=36323"},"modified":"2022-12-26T16:46:33","modified_gmt":"2022-12-26T11:16:33","slug":"replicating-data-from-postgres-to-ms-sql-server-using-kafka","status":"publish","type":"post","link":"https:\/\/ismiletechnologies.com\/en_us\/data-science\/replicating-data-from-postgres-to-ms-sql-server-using-kafka\/","title":{"rendered":"Replicating Data from Postgres to MS SQL Server using Kafka"},"content":{"rendered":"\t\t<div data-elementor-type=\"wp-post\" data-elementor-id=\"36323\" class=\"elementor elementor-36323\" data-elementor-post-type=\"post\">\n\t\t\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-a440faf elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"a440faf\" data-element_type=\"section\" data-e-type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-cbbf48c\" data-id=\"cbbf48c\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-cfea19c elementor-widget elementor-widget-text-editor\" data-id=\"cfea19c\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t\t\t\t\t\t<p>You might have heard the expression that \u201cData is the new oil\u201d, that\u2019s because data is key for any business decision system of an organization. But then, the required data is not stored in one place like a regular &amp; vanilla RDBMS. Normally, the data remains scattered across various RDBMS &amp; other data silos. So, it\u2019s quite common to come across situations where data is siting across different kind of sources, and the DBA needs to find a solution to pull all relevant data into a centralized location for further analysis.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-2bdae9b elementor-widget elementor-widget-heading\" data-id=\"2bdae9b\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">The Challenge\u00a0\u00a0<\/h2>\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-6e417dc elementor-widget elementor-widget-text-editor\" data-id=\"6e417dc\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t\t\t\t\t\t<p>Consider a particular scenario \u2013 we have some sales data in AWS Postgres RDS Instance and that data has to be replicated into some tables in their Azure VM with MS SQL Server. But the challenge is heterogeneous replication is marked as deprecated, and it doesn\u2019t work anywhere but only between SQL Server and Oracle. No Postgres allowed in the batch. Also, native heterogeneous replication is not found on the Postgres side. We need third-party tools to achieve this or work manually in HIGH effort\u00a0 mode, creating a CDC (change data capture) mechanism through the use of triggers, and then getting data from control tables. It sounds fun to implement, but time is of the essence. Getting such a solution on ground would take quite some time. Therefore, another solution had to be used to complete this data movement.\u00a0<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-5c5aac9 elementor-widget elementor-widget-heading\" data-id=\"5c5aac9\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">A Possible Solution\u00a0\u00a0<\/h2>\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-4119ce2 elementor-widget elementor-widget-text-editor\" data-id=\"4119ce2\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t\t\t\t\t\t<p>The Big Data scenario has many tools that can achieve this objective, but they don\u2019t have the advantages that Kafka offered.\u00a0<\/p><p>Initially, Apache Kafka was designed as a message queue like app (like IBM MQ Series or even SQL Server Service Broker). The best definition of it is perhaps \u2013 \u201cApache Kafka is more like a\u00a0 community distributed event streaming technology which can handle trillions of events per day\u201d. But a streaming system must have the ability to get data from different data sources and deliver the messages on different data endpoints.\u00a0<\/p><p>There are many tools to achieve this \u2013 Azure Event Hubs, AWS Kinesis, or Kafka managed in Confluent Cloud. However, to show how things work under the hood, and since they have similar backgrounds (Apache Kafka open-source code) we have decided to show how to set up the environment from scratch without any managed services for the stream processing. So, the picture would look something like this:\u00a0<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-cd4fb41 elementor-widget elementor-widget-image\" data-id=\"cd4fb41\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<img fetchpriority=\"high\" decoding=\"async\" width=\"572\" height=\"413\" src=\"https:\/\/ismiletechnologies.com\/wp-content\/uploads\/2022\/12\/Replicating-data-using-Kafka_img1.png\" class=\"attachment-full size-full wp-image-36328\" alt=\"\" srcset=\"https:\/\/ismiletechnologies.com\/wp-content\/uploads\/2022\/12\/Replicating-data-using-Kafka_img1.png 572w, https:\/\/ismiletechnologies.com\/wp-content\/uploads\/2022\/12\/Replicating-data-using-Kafka_img1-300x217.png 300w\" sizes=\"(max-width: 572px) 100vw, 572px\" \/>\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-31cbd18 elementor-widget-divider--view-line elementor-widget elementor-widget-divider\" data-id=\"31cbd18\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"divider.default\">\n\t\t\t\t\t\t\t<div class=\"elementor-divider\">\n\t\t\t<span class=\"elementor-divider-separator\">\n\t\t\t\t\t\t<\/span>\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-8d61271 elementor-widget elementor-widget-heading\" data-id=\"8d61271\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">The basic Apache Kafka components have been enlisted here: <\/h2>\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-503a1f3 elementor-widget elementor-widget-text-editor\" data-id=\"503a1f3\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t\t\t\t\t\t<p><span style=\"color: #000000;\">Message:<\/span> This is the smallest data unit in Kafka. From the perspective of a DBA, a message is simply a row in a database table. In the Kafka, a message is an array of bytes.\u00a0<\/p><p><span style=\"color: #000000;\">Schema:<\/span> It\u2019s a structure that accompanies messages, to make them understandable by the consuming applications.\u00a0<\/p><p><span style=\"color: #000000;\">Topics:<\/span> Messages categories are Topics. In the DBA world, that is like a table. Messages are read in order from beginning to end in an append-only format.\u00a0<\/p><p><span style=\"color: #000000;\">Producers and consumers:<\/span> This idea is very similar to SQL Server Replication publishers and subscribers. However, Kafka has been provided the ability to handle multiple producers and consumers simultaneously.\u00a0<\/p><p><span style=\"color: #000000;\">Brokers and clusters:<\/span> A single Kafka server is known as \u201cbroker\u201d. It gets messages from the producers, scripts an offset to them, and helps in persisting them on disk. It also serves consumers as they request for messages. In general, in a production environment, brokers are a cluster\u2019s part.\u00a0\u00a0<\/p><p><span style=\"color: #000000;\">Connectors:<\/span> Apache Kafka has been provided with many connectors for handling consumers and producers. Different connectors are available either free of charge or on purchase.\u00a0<\/p><p>So, Kafka is the choice for the task at hand, and we\u2019re going to create the environment for the data movement from scratch.\u00a0<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-0cc30cd elementor-widget elementor-widget-heading\" data-id=\"0cc30cd\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">The Architecture<\/h2>\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-eb5751a elementor-widget elementor-widget-text-editor\" data-id=\"eb5751a\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t\t\t\t\t\t<p>To achieve the streaming functionality and ensure data flow we will use a set of tables from PostgreSQL DB as source, and a set of tables from SQL Server as destination, while Apache Kafka will be used as the \u201creplication mechanism\u201d. For connecting to Postgres, and detecting its data changes (CDC) a connector plugin is also required. Therefore, we will use Debezium as it is also an open-source and built from the ground up to go along with Kafka as easily as possible.\u00a0<\/p><p>Remember for achieving the required goal (replicating data from Postgres to SQL Server using Kafka) we can use a Kafka-as-a-service product in any of the available cloud providers. But, to fully understand that how the architecture works, and also, simply as a showcase, we have made our mind not to use any SaaS related product, nor Docker. Now, we\u2019re ready to proceed.\u00a0<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-7896a9c elementor-widget-divider--view-line elementor-widget elementor-widget-divider\" data-id=\"7896a9c\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"divider.default\">\n\t\t\t\t\t\t\t<div class=\"elementor-divider\">\n\t\t\t<span class=\"elementor-divider-separator\">\n\t\t\t\t\t\t<\/span>\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-746a397 elementor-widget elementor-widget-heading\" data-id=\"746a397\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">Get to the task:\u00a0\u00a0<\/h2>\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-641ef00 elementor-widget elementor-widget-text-editor\" data-id=\"641ef00\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t\t\t\t\t\t<p>Let\u2019s start by installing our first VM. We are using a Windows PC to do all the testing, so we are creating the VM in Hyper-V. You can use whichever hypervisor you want. We have used Red Hat Developer edition 8.5 as OS. For that we need to subscribe to the Red Hat Portal.\u00a0<\/p><p>1. We will create a VM called \u201cJupiter\u201d which will act as our Postgres and Kafka server.\u00a0<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-19cf26c elementor-widget elementor-widget-image\" data-id=\"19cf26c\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<img decoding=\"async\" width=\"571\" height=\"378\" src=\"https:\/\/ismiletechnologies.com\/wp-content\/uploads\/2022\/12\/Replicating-data-using-Kafka_img2.png\" class=\"attachment-full size-full wp-image-36329\" alt=\"\" srcset=\"https:\/\/ismiletechnologies.com\/wp-content\/uploads\/2022\/12\/Replicating-data-using-Kafka_img2.png 571w, https:\/\/ismiletechnologies.com\/wp-content\/uploads\/2022\/12\/Replicating-data-using-Kafka_img2-300x199.png 300w\" sizes=\"(max-width: 571px) 100vw, 571px\" \/>\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-25e8719 elementor-widget elementor-widget-text-editor\" data-id=\"25e8719\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t\t\t\t\t\t<p>2. <span class=\"NormalTextRun SCXW256630699 BCX0\">A<\/span><span class=\"NormalTextRun SCXW256630699 BCX0\">s far as Hyper-V is concerned<\/span><span class=\"NormalTextRun SCXW256630699 BCX0\">, it will be Gen 2<\/span><span class=\"NormalTextRun SCXW256630699 BCX0\">. <\/span><span class=\"NormalTextRun SCXW256630699 BCX0\">Ensure that you <\/span><span class=\"NormalTextRun SCXW256630699 BCX0\">allocate enough memory so<\/span><span class=\"NormalTextRun SCXW256630699 BCX0\"> that\u00a0<\/span><span class=\"NormalTextRun SCXW256630699 BCX0\"> you can <\/span><span class=\"NormalTextRun SCXW256630699 BCX0\">do proper <\/span><span class=\"NormalTextRun SCXW256630699 BCX0\">test<\/span><span class=\"NormalTextRun SCXW256630699 BCX0\">ing<\/span><span class=\"NormalTextRun SCXW256630699 BCX0\">. <\/span><span class=\"NormalTextRun SCXW256630699 BCX0\">In our case, we are setting it to <\/span><span class=\"NormalTextRun SCXW256630699 BCX0\">6 GB \u2013 dynamic, <\/span><span class=\"NormalTextRun SCXW256630699 BCX0\">which means <\/span><span class=\"NormalTextRun SCXW256630699 BCX0\">Hyper-V won\u2019t dedicate that memory entirely to the VM.<\/span><\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-db6078d elementor-widget elementor-widget-image\" data-id=\"db6078d\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<img decoding=\"async\" width=\"541\" height=\"372\" src=\"https:\/\/ismiletechnologies.com\/wp-content\/uploads\/2022\/12\/Replicating-data-using-Kafka_img3.png\" class=\"attachment-full size-full wp-image-36330\" alt=\"\" srcset=\"https:\/\/ismiletechnologies.com\/wp-content\/uploads\/2022\/12\/Replicating-data-using-Kafka_img3.png 541w, https:\/\/ismiletechnologies.com\/wp-content\/uploads\/2022\/12\/Replicating-data-using-Kafka_img3-300x206.png 300w\" sizes=\"(max-width: 541px) 100vw, 541px\" \/>\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-11c8a28 elementor-widget elementor-widget-text-editor\" data-id=\"11c8a28\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t\t\t\t\t\t<p>3. For the sake of networking, we are adding a virtual ethernet adapter which is attached to the physical nic of the host, which means your wi-fi router will assign an IP address directly to the VM.\u00a0<\/p><p>4. As we have a small data sample, the space of 60 GB is quite enough.\u00a0<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-3ca0915 elementor-widget elementor-widget-image\" data-id=\"3ca0915\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<img loading=\"lazy\" decoding=\"async\" width=\"550\" height=\"235\" src=\"https:\/\/ismiletechnologies.com\/wp-content\/uploads\/2022\/12\/Replicating-data-using-Kafka_img4.png\" class=\"attachment-full size-full wp-image-36331\" alt=\"\" srcset=\"https:\/\/ismiletechnologies.com\/wp-content\/uploads\/2022\/12\/Replicating-data-using-Kafka_img4.png 550w, https:\/\/ismiletechnologies.com\/wp-content\/uploads\/2022\/12\/Replicating-data-using-Kafka_img4-300x128.png 300w\" sizes=\"(max-width: 550px) 100vw, 550px\" \/>\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-df01dc3 elementor-widget elementor-widget-text-editor\" data-id=\"df01dc3\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t\t\t\t\t\t<p>5. Ensure to attach the Red Hat iso in this way you can install the OS shortly.\u00a0<\/p><p>6. Also ensure that you set a reasonable amount of virtual cpus, and disable Secure Boot for the time being. \u00a0<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-af3f110 elementor-widget elementor-widget-image\" data-id=\"af3f110\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<img loading=\"lazy\" decoding=\"async\" width=\"588\" height=\"352\" src=\"https:\/\/ismiletechnologies.com\/wp-content\/uploads\/2022\/12\/Replicating-data-using-Kafka_img5.png\" class=\"attachment-full size-full wp-image-36332\" alt=\"\" srcset=\"https:\/\/ismiletechnologies.com\/wp-content\/uploads\/2022\/12\/Replicating-data-using-Kafka_img5.png 588w, https:\/\/ismiletechnologies.com\/wp-content\/uploads\/2022\/12\/Replicating-data-using-Kafka_img5-300x180.png 300w\" sizes=\"(max-width: 588px) 100vw, 588px\" \/>\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-e16e291 elementor-widget elementor-widget-text-editor\" data-id=\"e16e291\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t\t\t\t\t\t<p>7. Enable all guest services.\u00a0<\/p><p>8. Now proceed to installing the OS, and Starting the VM. Select its console window and hit any key to start the install process.\u00a0<\/p><p>9. Choose the preferred installation language. \u00a0<\/p><p>10. In this screen, we need to adjust the following: Partitioning is set to Auto, Kdump is disabled, enable Network, Root Password is set, create a user. After doing all the desired settings, we will click \u2018Begin Installation\u2019.\u00a0<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-634a829 elementor-widget elementor-widget-image\" data-id=\"634a829\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<img loading=\"lazy\" decoding=\"async\" width=\"601\" height=\"505\" src=\"https:\/\/ismiletechnologies.com\/wp-content\/uploads\/2022\/12\/Replicating-data-using-Kafka_img6.png\" class=\"attachment-full size-full wp-image-36333\" alt=\"\" srcset=\"https:\/\/ismiletechnologies.com\/wp-content\/uploads\/2022\/12\/Replicating-data-using-Kafka_img6.png 601w, https:\/\/ismiletechnologies.com\/wp-content\/uploads\/2022\/12\/Replicating-data-using-Kafka_img6-300x252.png 300w\" sizes=\"(max-width: 601px) 100vw, 601px\" \/>\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-627cb0c elementor-widget elementor-widget-text-editor\" data-id=\"627cb0c\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t\t\t\t\t\t<p>11. It will take some time to complete the OS installation. Then, we will reboot.\u00a0<\/p><p>12. During the configuration phase, you will have to accept the License terms.\u00a0<\/p><p>13. After that, click \u201cFinish Configuration\u201d. \u00a0<\/p><p>14. You need to get your new VM registered with your Red Hat account, otherwise, you can\u2019t download the necessary packages for the environment to work properly. Click \u2018Register\u2019, and provide your username (NOT EMAIL) and password for your Red Hat account.\u00a0<\/p><p>15. At this stage, we can afford to ignore the next screens, and we don\u2019t need to sign on to any other online account.\u00a0<\/p><p>16. Now the GUI doesn\u2019t need to be used anymore. We can use any Terminal-like app in Windows to connect with our VM. Now get the IP address for the VM you just installed. It can be done by opening a terminal window and typing: \u201cifconfig\u201d.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-026146b elementor-widget elementor-widget-image\" data-id=\"026146b\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<img loading=\"lazy\" decoding=\"async\" width=\"545\" height=\"415\" src=\"https:\/\/ismiletechnologies.com\/wp-content\/uploads\/2022\/12\/Replicating-data-using-Kafka_img8.png\" class=\"attachment-full size-full wp-image-36327\" alt=\"\" srcset=\"https:\/\/ismiletechnologies.com\/wp-content\/uploads\/2022\/12\/Replicating-data-using-Kafka_img8.png 545w, https:\/\/ismiletechnologies.com\/wp-content\/uploads\/2022\/12\/Replicating-data-using-Kafka_img8-300x228.png 300w\" sizes=\"(max-width: 545px) 100vw, 545px\" \/>\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-e8cfc7b elementor-widget elementor-widget-text-editor\" data-id=\"e8cfc7b\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t\t\t\t\t\t<p><span lang=\"EN-US\" xml:lang=\"EN-US\" data-contrast=\"auto\">17. MobaXTerm is quite useful and has a very intuitive UI. After connecting, you\u2019ll see a Windows Explorer-like side window, and the main bash terminal where you can input the required commands.<\/span>\u00a0<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-1c7d0e9 elementor-widget elementor-widget-image\" data-id=\"1c7d0e9\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<img loading=\"lazy\" decoding=\"async\" width=\"586\" height=\"513\" src=\"https:\/\/ismiletechnologies.com\/wp-content\/uploads\/2022\/12\/Replicating-data-using-Kafka_img10.png\" class=\"attachment-full size-full wp-image-36354\" alt=\"\" srcset=\"https:\/\/ismiletechnologies.com\/wp-content\/uploads\/2022\/12\/Replicating-data-using-Kafka_img10.png 586w, https:\/\/ismiletechnologies.com\/wp-content\/uploads\/2022\/12\/Replicating-data-using-Kafka_img10-300x263.png 300w\" sizes=\"(max-width: 586px) 100vw, 586px\" \/>\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<section class=\"elementor-section elementor-inner-section elementor-element elementor-element-0e31ed8 elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"0e31ed8\" data-element_type=\"section\" data-e-type=\"section\" data-settings=\"{&quot;background_background&quot;:&quot;gradient&quot;}\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-inner-column elementor-element elementor-element-456a462\" data-id=\"456a462\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<section class=\"elementor-section elementor-inner-section elementor-element elementor-element-243738d elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"243738d\" data-element_type=\"section\" data-e-type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-33 elementor-inner-column elementor-element elementor-element-d580776\" data-id=\"d580776\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-e15e202 elementor-widget elementor-widget-heading\" data-id=\"e15e202\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">We have the most hands-on experience in the Kafka technology.<\/h2>\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-7a2c609 elementor-widget elementor-widget-text-editor\" data-id=\"7a2c609\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t\t\t\t\t\t<p>Talk to our Kafka experts &amp; experience the benefit of our methodological approach. Schedule a free assessment today.\u00a0<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t<div class=\"elementor-column elementor-col-33 elementor-inner-column elementor-element elementor-element-15567d1\" data-id=\"15567d1\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-5d48b66 elementor-align-center elementor-widget elementor-widget-lottie\" data-id=\"5d48b66\" data-element_type=\"widget\" data-e-type=\"widget\" data-settings=\"{&quot;source&quot;:&quot;external_url&quot;,&quot;source_external_url&quot;:{&quot;url&quot;:&quot;https:\\\/\\\/assets4.lottiefiles.com\\\/packages\\\/lf20_kkesf8mx.json&quot;,&quot;is_external&quot;:&quot;&quot;,&quot;nofollow&quot;:&quot;&quot;,&quot;custom_attributes&quot;:&quot;&quot;},&quot;loop&quot;:&quot;yes&quot;,&quot;play_speed&quot;:{&quot;unit&quot;:&quot;px&quot;,&quot;size&quot;:0.9,&quot;sizes&quot;:[]},&quot;lazyload&quot;:&quot;yes&quot;,&quot;link_to&quot;:&quot;none&quot;,&quot;trigger&quot;:&quot;arriving_to_viewport&quot;,&quot;viewport&quot;:{&quot;unit&quot;:&quot;%&quot;,&quot;size&quot;:&quot;&quot;,&quot;sizes&quot;:{&quot;start&quot;:0,&quot;end&quot;:100}},&quot;start_point&quot;:{&quot;unit&quot;:&quot;%&quot;,&quot;size&quot;:0,&quot;sizes&quot;:[]},&quot;end_point&quot;:{&quot;unit&quot;:&quot;%&quot;,&quot;size&quot;:100,&quot;sizes&quot;:[]},&quot;renderer&quot;:&quot;svg&quot;}\" data-widget_type=\"lottie.default\">\n\t\t\t\t\t<div class=\"e-lottie__container\"><div class=\"e-lottie__animation\"><\/div><\/div>\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t<div class=\"elementor-column elementor-col-33 elementor-inner-column elementor-element elementor-element-b2690df\" data-id=\"b2690df\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-dc76186 elementor-align-right elementor-mobile-align-left elementor-tablet-align-right elementor-widget elementor-widget-button\" data-id=\"dc76186\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"button.default\">\n\t\t\t\t\t\t\t\t\t\t<a class=\"elementor-button elementor-button-link elementor-size-xs\" href=\"#elementor-action%3Aaction%3Dpopup%3Aopen%26settings%3DeyJpZCI6IjI5OTEiLCJ0b2dnbGUiOnRydWV9\">\n\t\t\t\t\t\t<span class=\"elementor-button-content-wrapper\">\n\t\t\t\t\t\t\t\t\t<span class=\"elementor-button-text\">Start Today !<\/span>\n\t\t\t\t\t<\/span>\n\t\t\t\t\t<\/a>\n\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<\/div>\n\t\t","protected":false},"excerpt":{"rendered":"<p>You might have heard the expression that \u201cData is the new oil\u201d, that\u2019s because data is key for any business decision system of an organization. But then, the required data is not stored in one place like a regular &amp; vanilla RDBMS. Normally, the data remains scattered across various RDBMS &amp; other data silos. So, [&hellip;]<\/p>\n","protected":false},"author":3,"featured_media":36358,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[74],"tags":[],"class_list":["post-36323","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-data-science"],"_links":{"self":[{"href":"https:\/\/ismiletechnologies.com\/en_us\/wp-json\/wp\/v2\/posts\/36323","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/ismiletechnologies.com\/en_us\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/ismiletechnologies.com\/en_us\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/ismiletechnologies.com\/en_us\/wp-json\/wp\/v2\/users\/3"}],"replies":[{"embeddable":true,"href":"https:\/\/ismiletechnologies.com\/en_us\/wp-json\/wp\/v2\/comments?post=36323"}],"version-history":[{"count":20,"href":"https:\/\/ismiletechnologies.com\/en_us\/wp-json\/wp\/v2\/posts\/36323\/revisions"}],"predecessor-version":[{"id":36825,"href":"https:\/\/ismiletechnologies.com\/en_us\/wp-json\/wp\/v2\/posts\/36323\/revisions\/36825"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/ismiletechnologies.com\/en_us\/wp-json\/wp\/v2\/media\/36358"}],"wp:attachment":[{"href":"https:\/\/ismiletechnologies.com\/en_us\/wp-json\/wp\/v2\/media?parent=36323"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/ismiletechnologies.com\/en_us\/wp-json\/wp\/v2\/categories?post=36323"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/ismiletechnologies.com\/en_us\/wp-json\/wp\/v2\/tags?post=36323"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}