{"id":31657,"date":"2018-03-16T18:21:31","date_gmt":"2018-03-16T15:21:31","guid":{"rendered":"https:\/\/www.altoros.com\/blog\/?p=31657"},"modified":"2020-06-18T20:29:02","modified_gmt":"2020-06-18T17:29:02","slug":"multi-cluster-deployment-options-for-apache-kafka-pros-and-cons","status":"publish","type":"post","link":"https:\/\/www.altoros.com\/blog\/multi-cluster-deployment-options-for-apache-kafka-pros-and-cons\/","title":{"rendered":"Multi-Cluster Deployment Options for Apache Kafka: Pros and Cons"},"content":{"rendered":"<div id=\"ez-toc-container\" class=\"ez-toc-v2_0_79_2 counter-hierarchy ez-toc-counter ez-toc-transparent ez-toc-container-direction\">\n<div class=\"ez-toc-title-container\">\n<p class=\"ez-toc-title\" style=\"cursor:inherit\">Table of Contents<\/p>\n<span class=\"ez-toc-title-toggle\"><a href=\"#\" class=\"ez-toc-pull-right ez-toc-btn ez-toc-btn-xs ez-toc-btn-default ez-toc-toggle\" aria-label=\"Toggle Table of Content\"><span class=\"ez-toc-js-icon-con\"><span class=\"\"><span class=\"eztoc-hide\" style=\"display:none;\">Toggle<\/span><span class=\"ez-toc-icon-toggle-span\"><svg style=\"fill: #999;color:#999\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" class=\"list-377408\" width=\"20px\" height=\"20px\" viewBox=\"0 0 24 24\" fill=\"none\"><path d=\"M6 6H4v2h2V6zm14 0H8v2h12V6zM4 11h2v2H4v-2zm16 0H8v2h12v-2zM4 16h2v2H4v-2zm16 0H8v2h12v-2z\" fill=\"currentColor\"><\/path><\/svg><svg style=\"fill: #999;color:#999\" class=\"arrow-unsorted-368013\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"10px\" height=\"10px\" viewBox=\"0 0 24 24\" version=\"1.2\" baseProfile=\"tiny\"><path d=\"M18.2 9.3l-6.2-6.3-6.2 6.3c-.2.2-.3.4-.3.7s.1.5.3.7c.2.2.4.3.7.3h11c.3 0 .5-.1.7-.3.2-.2.3-.5.3-.7s-.1-.5-.3-.7zM5.8 14.7l6.2 6.3 6.2-6.3c.2-.2.3-.5.3-.7s-.1-.5-.3-.7c-.2-.2-.4-.3-.7-.3h-11c-.3 0-.5.1-.7.3-.2.2-.3.5-.3.7s.1.5.3.7z\"\/><\/svg><\/span><\/span><\/span><\/a><\/span><\/div>\n<nav><ul class='ez-toc-list ez-toc-list-level-1 ' ><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-1\" href=\"https:\/\/www.altoros.com\/blog\/multi-cluster-deployment-options-for-apache-kafka-pros-and-cons\/#Enabling_multi-cluster_deployments_in_Apache_Kafka\" >Enabling multi-cluster deployments in Apache Kafka<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-2\" href=\"https:\/\/www.altoros.com\/blog\/multi-cluster-deployment-options-for-apache-kafka-pros-and-cons\/#A_stretched_cluster\" >A stretched cluster<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-3\" href=\"https:\/\/www.altoros.com\/blog\/multi-cluster-deployment-options-for-apache-kafka-pros-and-cons\/#An_active-active_cluster\" >An active-active cluster<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-4\" href=\"https:\/\/www.altoros.com\/blog\/multi-cluster-deployment-options-for-apache-kafka-pros-and-cons\/#An_active-passive_cluster\" >An active-passive cluster<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-5\" href=\"https:\/\/www.altoros.com\/blog\/multi-cluster-deployment-options-for-apache-kafka-pros-and-cons\/#Why_considering_an_active-active_cluster_model\" >Why considering an active-active cluster model?<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-6\" href=\"https:\/\/www.altoros.com\/blog\/multi-cluster-deployment-options-for-apache-kafka-pros-and-cons\/#Summing_it_up\" >Summing it up<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-7\" href=\"https:\/\/www.altoros.com\/blog\/multi-cluster-deployment-options-for-apache-kafka-pros-and-cons\/#Further_reading\" >Further reading<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-8\" href=\"https:\/\/www.altoros.com\/blog\/multi-cluster-deployment-options-for-apache-kafka-pros-and-cons\/#About_the_author\" >About the author<\/a><\/li><\/ul><\/nav><\/div>\n<h3><span class=\"ez-toc-section\" id=\"Enabling_multi-cluster_deployments_in_Apache_Kafka\"><\/span>Enabling multi-cluster deployments in Apache Kafka<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>Comprehensive enterprise-grade software systems should meet a number of requirements, such as linear scalability, efficiency, integrity, low time to consistency, high level of security, high availability, fault tolerance, etc.<\/p>\n<p><a href=\"https:\/\/www.altoros.com\/blog\/wp-content\/uploads\/2018\/03\/apache-kafka-logo.png\"><img decoding=\"async\" src=\"https:\/\/www.altoros.com\/blog\/wp-content\/uploads\/2018\/03\/apache-kafka-logo-1024x1024.png\" alt=\"\" width=\"135\"  class=\"alignright size-large wp-image-31672\" \/><\/a><\/p>\n<p><a href=\"https:\/\/kafka.apache.org\/\" rel=\"noopener noreferrer\" target=\"_blank\">Apache Kafka<\/a> is a distributed messaging system, which allows for achieving almost all the above-listed requirements out of the box. However, this proves true only for a single cluster. By default, Apache Kafka doesn&#8217;t have data center awareness, so it&#8217;s rather challenging to deploy it in multiple data centers. Meanwhile, such a type of deployment is crucial as it significantly improves fault tolerance and availability.<\/p>\n<p>Below, we explore three potential multi-cluster deployment models\u2014a <em>stretched cluster<\/em>, an <em>active-active cluster<\/em>, and an <em>active-passive cluster<\/em>\u2014in Apache Kafka, as well as detail and reason the option our team sees as an optimal one.<\/p>\n<p>&nbsp;<\/p>\n<h3><span class=\"ez-toc-section\" id=\"A_stretched_cluster\"><\/span>A stretched cluster<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>A <em>stretched cluster<\/em> is a single logical cluster comprising several physical ones. Replicas are evenly distributed between physical clusters using the rack awareness feature of Apache Kafka, while client applications are unaware of multiple clusters. The perks of such a model are as follows:<\/p>\n<ul>\n<li>Strong consistency due to the synchronous data replication between clusters.<\/li>\n<li>Cluster resources are utilized to the full extent.<\/li>\n<li>In case of a single cluster failure, other ones continue to operate with no downtime.<\/li>\n<li>Unawareness of multiple clusters for client applications.<\/li>\n<\/ul>\n<p>Still, there are some cons to bear in mind:<\/p>\n<ul>\n<li style=\"padding-bottom: 6px;\">This model features high latency due to synchronous replication between clusters. So, it&#8217;s recommended to use such deployment only for clusters with high network bandwidth. For cloud deployments, it&#8217;s recommended to use the model <a href=\"https:\/\/www.confluent.io\/blog\/design-and-deployment-considerations-for-deploying-apache-kafka-on-aws\/\" rel=\"noopener noreferrer\" target=\"_blank\">for availability zones, not regions<\/a>.<\/li>\n<li>Within the stretched cluster model, minimum three clusters are required. Apache Kafka uses Zookeeper for storing cluster metadata, such as Access Control Lists and topics configuration. Zookeeper uses majority voting to modify its state. To achieve majority, minimum N\/2+1 nodes are required. So, it&#8217;s not possible to deploy Zookeeper in two clusters, because the majority can&#8217;t be achieved in case of the entire cluster failure.<\/li>\n<\/ul>\n<p>&nbsp;<\/p>\n<h3><span class=\"ez-toc-section\" id=\"An_active-active_cluster\"><\/span>An active-active cluster<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>The <em>active-active<\/em> model implies there are two clusters with bidirectional mirroring between them. Data is asynchronously mirrored in both directions between the clusters. Client applications are aware of several clusters and <em>can<\/em> be ready to switch to other cluster in case of a single cluster failure. Client requests are processed by both clusters. The advantages of this model are:<\/p>\n<ul>\n<li>Resources are fully utilized in both clusters.<\/li>\n<li>Zero downtime in case of a single cluster failure.<\/li>\n<li>Network bandwidth between clusters doesn&#8217;t affect performance.<\/li>\n<\/ul>\n<p>The drawbacks of using such a model:<\/p>\n<ul>\n<li>Eventual consistency due to asynchronous mirroring between clusters<\/li>\n<li>Complexity of bidirectional mirroring between clusters<\/li>\n<li>Possible data loss in case of a cluster failure due to asynchronous mirroring<\/li>\n<li>Awareness of multiple clusters for client applications<\/li>\n<\/ul>\n<p>&nbsp;<\/p>\n<h3><span class=\"ez-toc-section\" id=\"An_active-passive_cluster\"><\/span>An active-passive cluster<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>The <em>active-passive<\/em> model suggests there are two clusters with unidirectional mirroring between them. Data is asynchronously mirrored from an active to a passive cluster. Client applications are aware of several clusters and <em>must<\/em> be ready to switch to a passive cluster once an active one fails. Client requests are processed only by an active cluster. This approach is worth trying out for the following reasons:<\/p>\n<ul>\n<li>Simplicity of unidirectional mirroring between clusters.<\/li>\n<li>Network bandwidth between clusters doesn&#8217;t affect performance of an active cluster.<\/li>\n<\/ul>\n<p>Though, there is a number of issues brought along:<\/p>\n<ul>\n<li>Eventual consistency due to asynchronous mirroring between clusters.<\/li>\n<li>Downtime in case of an active cluster failure.<\/li>\n<li>The resources of a passive cluster aren&#8217;t utilized to the full.<\/li>\n<li>Possible data loss in case of an active cluster failure due to asynchronous mirroring.<\/li>\n<li>Awareness of multiple clusters for client applications.<\/li>\n<\/ul>\n<p>The stretch cluster seems an optimal solution if strong consistency, zero downtime, and the simplicity of client applications are preferred over performance. However, this model is not suitable for multiple distant data centers. Furthermore, not all the on-premises environments have three data centers and availability zones. The active-active model outplays the active-passive one due to zero downtime in case a single data center fails. Therefore, we would like to have a closer look at the active-active option.<\/p>\n<p>&nbsp;<\/p>\n<h3><span class=\"ez-toc-section\" id=\"Why_considering_an_active-active_cluster_model\"><\/span>Why considering an active-active cluster model?<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>This type of a deployment should comprise two homogenous Kafka clusters in different data centers\/availability zones. The connectivity between Kafka brokers is not carried out directly across multiple clusters. They are connected through an asynchronous replication (mirroring). The bidirectional mirroring between brokers will be established using <a href=\"https:\/\/cwiki.apache.org\/confluence\/pages\/viewpage.action?pageId=27846330\" rel=\"noopener noreferrer\" target=\"_blank\">MirrorMaker<\/a>, which uses a Kafka consumer to read messages from the source cluster and republishes them to the target cluster via an embedded Kafka producer. Client applications receive persistence acknowledgment after data is replicated to local brokers only.<\/p>\n<p><center><a href=\"https:\/\/www.altoros.com\/blog\/wp-content\/uploads\/2018\/03\/consistent-active-active-multi-cluster-apache-kafka-deployment.png\"><img decoding=\"async\" src=\"https:\/\/www.altoros.com\/blog\/wp-content\/uploads\/2018\/03\/consistent-active-active-multi-cluster-apache-kafka-deployment-1024x576.png\" alt=\"\" width=\"640\" class=\"aligncenter size-large wp-image-31669\" \/><\/a><small>Bidirectional mirroring of the Kafka topic between two clusters<\/small><\/center><\/p>\n<p>Under this model, client applications don&#8217;t have to wait until the mirroring completes between multiple clusters. Distinct Kafka producers and consumers operate with a single cluster only. However, data from both clusters will be available for further consumption in each cluster due to the mirroring process.<\/p>\n<p>In order to prevent cyclic repetition of data during bidirectional mirroring, the same logical topic should be named in a <a href=\"https:\/\/www.confluent.io\/wp-content\/uploads\/WP-Disaster-Recovery-Apache-Kafka.pdf\" rel=\"noopener noreferrer\" target=\"_blank\">different way for each cluster<\/a>. The best option is using the cluster name as a prefix for the topic name. In case we have a logical topic called <code style=\"color: #222222; background-color: #e6e6e6; padding: 1px 2px;\">topic<\/code>, then it should be named <code style=\"color: #222222; background-color: #e6e6e6; padding: 1px 2px;\">C1.topic<\/code> in one cluster, and <code style=\"color: #222222; background-color: #e6e6e6; padding: 1px 2px;\">C2.topi\u0441<\/code> in the other. Producers will write their messages to the corresponding topics according to their cluster location. <code style=\"color: #222222; background-color: #e6e6e6; padding: 1px 2px;\">MirrorMakers<\/code> will replicate the corresponding topics to the other cluster. Consumers will be able to read data either from the corresponding topic or from both topics that contain data from clusters.<\/p>\n<p><center><a href=\"https:\/\/www.altoros.com\/blog\/wp-content\/uploads\/2018\/03\/bidirectional-mirroring-of-apache-kafka-topic-between-two-clusters.png\"><img decoding=\"async\" src=\"https:\/\/www.altoros.com\/blog\/wp-content\/uploads\/2018\/03\/bidirectional-mirroring-of-apache-kafka-topic-between-two-clusters-1024x576.png\" alt=\"\" width=\"640\" class=\"aligncenter size-large wp-image-31667\" \/><\/a><small>An eventual consistent active-active multi-cluster Kafka deployment<\/small><\/center><\/p>\n<p>In case of a disaster event in a single cluster, the other one continues to operate properly with no downtime, providing high availability. Data between clusters is eventually consistent, which means that the data written to a cluster won\u2019t be immediately available for reading in the other one. In case of a single cluster failure, some acknowledged \u2018write messages\u2019 in it may not be accessible in the other cluster due to the asynchronous nature of mirroring.<\/p>\n<p>&nbsp;<\/p>\n<h3><span class=\"ez-toc-section\" id=\"Summing_it_up\"><\/span>Summing it up<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>Out of the three examined options, we tend to choose the active-active deployment based on real-life experience with several customers. However, the final choice type of strongly depends on business requirements of a particular company, so all the three deployment options may be considered regarding the priorities set for the project.<\/p>\n<p>&nbsp;<\/p>\n<h3><span class=\"ez-toc-section\" id=\"Further_reading\"><\/span>Further reading<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<ul>\n<li><a href=\"https:\/\/www.altoros.com\/blog\/using-spark-streaming-apache-kafka-and-object-storage-for-stream-processing-on-bluemix\/\">Using Spark Streaming, Apache Kafka, and Object Storage for Stream Processing on Bluemix<\/a><\/li>\n<li><a href=\"https:\/\/www.altoros.com\/blog\/processing-data-on-ibm-bluemix-streaming-analytics-apache-spark-and-biginsights\/\">Processing Data on IBM Bluemix: Streaming Analytics, Apache Spark, and BigInsights<\/a><\/li>\n<\/ul>\n<p>&nbsp;<\/p>\n<h3><span class=\"ez-toc-section\" id=\"About_the_author\"><\/span>About the author<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<div>\n<div style=\"float: right;\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.altoros.com\/blog\/wp-content\/uploads\/2018\/03\/Nikita-Gorbachevski-bio.png\" alt=\"\" width=\"150\" height=\"150\" class=\"aligncenter size-full wp-image-31703\" \/><\/div>\n<div style=\"width: 600px;\"><small><b>Nikita Gorbachevski<\/b> is a Solution Architect at Altoros, specializing in distributed systems. He maintains a highly proficient knowledge profile in concurrent and parallel computing, high-load database systems, and the blockchain technology. Nikita is a co-author of a <a href=\"https:\/\/www.altoros.com\/research-papers\/2017-nosql-technical-comparison-report-cassandra-datastax-mongodb-and-couchbase-server\/\">technical benchmark<\/a>, which compares three popular NoSQL solutions\u2014Couchbase Server, Cassandra (DataStax), and MongoDB\u2014across 20+ different criteria.<\/small><\/div>\n<\/div>\n","protected":false},"excerpt":{"rendered":"<p>Enabling multi-cluster deployments in Apache Kafka<\/p>\n<p>Comprehensive enterprise-grade software systems should meet a number of requirements, such as linear scalability, efficiency, integrity, low time to consistency, high level of security, high availability, fault tolerance, etc.<\/p>\n<\/p>\n<p>Apache Kafka is a distributed messaging system, which allows for achieving almost all the above-listed requirements out [&#8230;]<\/p>\n","protected":false},"author":5,"featured_media":31691,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"content-type":"","footnotes":"","_links_to":"","_links_to_target":""},"categories":[214],"tags":[895],"class_list":["post-31657","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-tutorials","tag-research-and-development"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v26.6 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Multi-Cluster Deployment Options for Apache Kafka: Pros and Cons | Altoros<\/title>\n<meta name=\"description\" content=\"This blog post investigates three models of multi-cluster deployment for Apache Kafka\u2014the stretched, active-passive, and active-active.\" \/>\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.altoros.com\/blog\/multi-cluster-deployment-options-for-apache-kafka-pros-and-cons\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Multi-Cluster Deployment Options for Apache Kafka: Pros and Cons | Altoros\" \/>\n<meta property=\"og:description\" content=\"Enabling multi-cluster deployments in Apache Kafka Comprehensive enterprise-grade software systems should meet a number of requirements, such as linear scalability, efficiency, integrity, low time to consistency, high level of security, high availability, fault tolerance, etc. Apache Kafka is a distributed messaging system, which allows for achieving almost all the above-listed requirements out [...]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.altoros.com\/blog\/multi-cluster-deployment-options-for-apache-kafka-pros-and-cons\/\" \/>\n<meta property=\"og:site_name\" content=\"Altoros\" \/>\n<meta property=\"article:published_time\" content=\"2018-03-16T15:21:31+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2020-06-18T17:29:02+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.altoros.com\/blog\/wp-content\/uploads\/2018\/03\/Multi-cluster-deployment-Apache-Kafka-v11.gif\" \/>\n\t<meta property=\"og:image:width\" content=\"640\" \/>\n\t<meta property=\"og:image:height\" content=\"360\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/gif\" \/>\n<meta name=\"author\" content=\"Alex Khizhniak\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Alex Khizhniak\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"6 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.altoros.com\/blog\/multi-cluster-deployment-options-for-apache-kafka-pros-and-cons\/\",\"url\":\"https:\/\/www.altoros.com\/blog\/multi-cluster-deployment-options-for-apache-kafka-pros-and-cons\/\",\"name\":\"Multi-Cluster Deployment Options for Apache Kafka: Pros and Cons | Altoros\",\"isPartOf\":{\"@id\":\"https:\/\/www.altoros.com\/blog\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/www.altoros.com\/blog\/multi-cluster-deployment-options-for-apache-kafka-pros-and-cons\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/www.altoros.com\/blog\/multi-cluster-deployment-options-for-apache-kafka-pros-and-cons\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.altoros.com\/blog\/wp-content\/uploads\/2018\/03\/Multi-cluster-deployment-Apache-Kafka-v11.gif\",\"datePublished\":\"2018-03-16T15:21:31+00:00\",\"dateModified\":\"2020-06-18T17:29:02+00:00\",\"author\":{\"@id\":\"https:\/\/www.altoros.com\/blog\/#\/schema\/person\/3d914db6ad1b2908c32c0dc5dcabc420\"},\"breadcrumb\":{\"@id\":\"https:\/\/www.altoros.com\/blog\/multi-cluster-deployment-options-for-apache-kafka-pros-and-cons\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.altoros.com\/blog\/multi-cluster-deployment-options-for-apache-kafka-pros-and-cons\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.altoros.com\/blog\/multi-cluster-deployment-options-for-apache-kafka-pros-and-cons\/#primaryimage\",\"url\":\"https:\/\/www.altoros.com\/blog\/wp-content\/uploads\/2018\/03\/Multi-cluster-deployment-Apache-Kafka-v11.gif\",\"contentUrl\":\"https:\/\/www.altoros.com\/blog\/wp-content\/uploads\/2018\/03\/Multi-cluster-deployment-Apache-Kafka-v11.gif\",\"width\":640,\"height\":360},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.altoros.com\/blog\/multi-cluster-deployment-options-for-apache-kafka-pros-and-cons\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/www.altoros.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Multi-Cluster Deployment Options for Apache Kafka: Pros and Cons\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.altoros.com\/blog\/#website\",\"url\":\"https:\/\/www.altoros.com\/blog\/\",\"name\":\"Altoros\",\"description\":\"Insight\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/www.altoros.com\/blog\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Person\",\"@id\":\"https:\/\/www.altoros.com\/blog\/#\/schema\/person\/3d914db6ad1b2908c32c0dc5dcabc420\",\"name\":\"Alex Khizhniak\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.altoros.com\/blog\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/www.altoros.com\/blog\/wp-content\/uploads\/2017\/06\/druzya-edit1-150x150.jpg\",\"contentUrl\":\"https:\/\/www.altoros.com\/blog\/wp-content\/uploads\/2017\/06\/druzya-edit1-150x150.jpg\",\"caption\":\"Alex Khizhniak\"},\"description\":\"Alex Khizhniak is Director of Technical Content Strategy at Altoros and a cofounder of a local Java User Group. Managing distributed teams since 2004, he has gained experience as a journalist, an editor-in-chief, a technical writer, a technology evangelist, a project manager, and a product owner. Alex is obsessed with AI\/ML, data science, data integration, ETL\/DWH, data quality, databases (SQL\/NoSQL), big data, IoT, and BI. The articles and industry reports he created or helped to publish reached out to 3,000,000+ tech-savvy readers. Some of the pieces were covered on TechRepublic, ebizQ, NetworkWorld, CIO.com, etc. Find him on Twitter at @alxkh.\",\"sameAs\":[\"https:\/\/x.com\/https:\/\/twitter.com\/alxkh\"],\"url\":\"https:\/\/www.altoros.com\/blog\/author\/alex\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Multi-Cluster Deployment Options for Apache Kafka: Pros and Cons | Altoros","description":"This blog post investigates three models of multi-cluster deployment for Apache Kafka\u2014the stretched, active-passive, and active-active.","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.altoros.com\/blog\/multi-cluster-deployment-options-for-apache-kafka-pros-and-cons\/","og_locale":"en_US","og_type":"article","og_title":"Multi-Cluster Deployment Options for Apache Kafka: Pros and Cons | Altoros","og_description":"Enabling multi-cluster deployments in Apache Kafka Comprehensive enterprise-grade software systems should meet a number of requirements, such as linear scalability, efficiency, integrity, low time to consistency, high level of security, high availability, fault tolerance, etc. Apache Kafka is a distributed messaging system, which allows for achieving almost all the above-listed requirements out [...]","og_url":"https:\/\/www.altoros.com\/blog\/multi-cluster-deployment-options-for-apache-kafka-pros-and-cons\/","og_site_name":"Altoros","article_published_time":"2018-03-16T15:21:31+00:00","article_modified_time":"2020-06-18T17:29:02+00:00","og_image":[{"width":640,"height":360,"url":"https:\/\/www.altoros.com\/blog\/wp-content\/uploads\/2018\/03\/Multi-cluster-deployment-Apache-Kafka-v11.gif","type":"image\/gif"}],"author":"Alex Khizhniak","twitter_misc":{"Written by":"Alex Khizhniak","Est. reading time":"6 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/www.altoros.com\/blog\/multi-cluster-deployment-options-for-apache-kafka-pros-and-cons\/","url":"https:\/\/www.altoros.com\/blog\/multi-cluster-deployment-options-for-apache-kafka-pros-and-cons\/","name":"Multi-Cluster Deployment Options for Apache Kafka: Pros and Cons | Altoros","isPartOf":{"@id":"https:\/\/www.altoros.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.altoros.com\/blog\/multi-cluster-deployment-options-for-apache-kafka-pros-and-cons\/#primaryimage"},"image":{"@id":"https:\/\/www.altoros.com\/blog\/multi-cluster-deployment-options-for-apache-kafka-pros-and-cons\/#primaryimage"},"thumbnailUrl":"https:\/\/www.altoros.com\/blog\/wp-content\/uploads\/2018\/03\/Multi-cluster-deployment-Apache-Kafka-v11.gif","datePublished":"2018-03-16T15:21:31+00:00","dateModified":"2020-06-18T17:29:02+00:00","author":{"@id":"https:\/\/www.altoros.com\/blog\/#\/schema\/person\/3d914db6ad1b2908c32c0dc5dcabc420"},"breadcrumb":{"@id":"https:\/\/www.altoros.com\/blog\/multi-cluster-deployment-options-for-apache-kafka-pros-and-cons\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.altoros.com\/blog\/multi-cluster-deployment-options-for-apache-kafka-pros-and-cons\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.altoros.com\/blog\/multi-cluster-deployment-options-for-apache-kafka-pros-and-cons\/#primaryimage","url":"https:\/\/www.altoros.com\/blog\/wp-content\/uploads\/2018\/03\/Multi-cluster-deployment-Apache-Kafka-v11.gif","contentUrl":"https:\/\/www.altoros.com\/blog\/wp-content\/uploads\/2018\/03\/Multi-cluster-deployment-Apache-Kafka-v11.gif","width":640,"height":360},{"@type":"BreadcrumbList","@id":"https:\/\/www.altoros.com\/blog\/multi-cluster-deployment-options-for-apache-kafka-pros-and-cons\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.altoros.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Multi-Cluster Deployment Options for Apache Kafka: Pros and Cons"}]},{"@type":"WebSite","@id":"https:\/\/www.altoros.com\/blog\/#website","url":"https:\/\/www.altoros.com\/blog\/","name":"Altoros","description":"Insight","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.altoros.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Person","@id":"https:\/\/www.altoros.com\/blog\/#\/schema\/person\/3d914db6ad1b2908c32c0dc5dcabc420","name":"Alex Khizhniak","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.altoros.com\/blog\/#\/schema\/person\/image\/","url":"https:\/\/www.altoros.com\/blog\/wp-content\/uploads\/2017\/06\/druzya-edit1-150x150.jpg","contentUrl":"https:\/\/www.altoros.com\/blog\/wp-content\/uploads\/2017\/06\/druzya-edit1-150x150.jpg","caption":"Alex Khizhniak"},"description":"Alex Khizhniak is Director of Technical Content Strategy at Altoros and a cofounder of a local Java User Group. Managing distributed teams since 2004, he has gained experience as a journalist, an editor-in-chief, a technical writer, a technology evangelist, a project manager, and a product owner. Alex is obsessed with AI\/ML, data science, data integration, ETL\/DWH, data quality, databases (SQL\/NoSQL), big data, IoT, and BI. The articles and industry reports he created or helped to publish reached out to 3,000,000+ tech-savvy readers. Some of the pieces were covered on TechRepublic, ebizQ, NetworkWorld, CIO.com, etc. Find him on Twitter at @alxkh.","sameAs":["https:\/\/x.com\/https:\/\/twitter.com\/alxkh"],"url":"https:\/\/www.altoros.com\/blog\/author\/alex\/"}]}},"_links":{"self":[{"href":"https:\/\/www.altoros.com\/blog\/wp-json\/wp\/v2\/posts\/31657","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.altoros.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.altoros.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.altoros.com\/blog\/wp-json\/wp\/v2\/users\/5"}],"replies":[{"embeddable":true,"href":"https:\/\/www.altoros.com\/blog\/wp-json\/wp\/v2\/comments?post=31657"}],"version-history":[{"count":35,"href":"https:\/\/www.altoros.com\/blog\/wp-json\/wp\/v2\/posts\/31657\/revisions"}],"predecessor-version":[{"id":54726,"href":"https:\/\/www.altoros.com\/blog\/wp-json\/wp\/v2\/posts\/31657\/revisions\/54726"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.altoros.com\/blog\/wp-json\/wp\/v2\/media\/31691"}],"wp:attachment":[{"href":"https:\/\/www.altoros.com\/blog\/wp-json\/wp\/v2\/media?parent=31657"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.altoros.com\/blog\/wp-json\/wp\/v2\/categories?post=31657"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.altoros.com\/blog\/wp-json\/wp\/v2\/tags?post=31657"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}