paint-brush
Kafka ile Çok Kümeli Dağıtım ve Çoğaltmada Uzmanlaşmaby@rayedwards
2,391
2,391

Kafka ile Çok Kümeli Dağıtım ve Çoğaltmada Uzmanlaşma

Ray Edwards10m2023/10/18
Read on Terminal Reader

Bu kılavuz Apache Kafka'nın mimarisini ve bileşenlerini kapsayan derinlemesine bir anlayış sağlar. Güçlü tutarlılık için uzatılmış kümeleri ve gelişmiş hata toleransı için bağlantılı kümeleri tartışarak, gerçek dünya senaryolarında çoklu küme dağıtımlarına olan ihtiyacın altını çiziyor. Makale ayrıca Kafka çoğaltması için kullanılan yaygın araçları inceliyor ve çoklu küme yapılandırmalarını kolaylaştırmak için zarif bir çözüm sunuyor.
featured image - Kafka ile Çok Kümeli Dağıtım ve Çoğaltmada Uzmanlaşma
Ray Edwards HackerNoon profile picture
0-item
1-item

Apache Kafka'ya ve yaygın kullanım örneklerine kısa genel bakış, çoklu küme dağıtımlarını ölçeklendirmeye yönelik mevcut araçlar ve çoklu küme dağıtımlarını basitleştirmeye yönelik bağlantı çözümleri.


İçindekiler

  • Kafka nedir?

  • Kafka ve Kubernetes

  • Çoklu Küme Kafka Durumu

  • Çoklu Küme Kafka

    • Uzatılmış Kümeler - Eşzamanlı Çoğaltma
    • Bağlı Kümeler - Eşzamansız çoğaltma
  • Çözüm


Kafka nedir?

Yaygın olarak basitçe Kafka olarak bilinen Apache Kafka, Apache Yazılım Vakfı tarafından sağlanan açık kaynaklı bir olay akışı platformudur. Başlangıçta LinkedIn'de tasarlanan Apache Kafka, Jay Kreps , Neha Narkhede ve Jun Rao tarafından ortaklaşa oluşturuldu ve ardından 2011 yılında açık kaynaklı bir proje olarak piyasaya sürüldü. Wiki Sayfası


Bugün Kafka, gerçek zamanlı veri akışlarını yönetmek için tasarlanmış en popüler etkinlik akışı platformlarından biridir. Ölçeklenebilir, hataya dayanıklı ve yüksek performanslı veri akış hatları oluşturmak için yaygın olarak kullanılır.


Kafka'nın kullanımları sürekli olarak genişlemektedir; ilk 5 örnek Brij Pandey tarafından güzel bir şekilde resimde gösterilmektedir.


En iyi 5 kafka kullanım örneği


Kısa bir başlangıç olarak Kafka platformunun bileşenlerini ve bunların nasıl çalıştığını anlamak önemlidir.


Kafka, gerçek zamanlı veri akışlarını verimli bir şekilde yönetmek için tasarlanmış, dağıtılmış bir olay akışı platformu olarak çalışır. Yayınla-abone ol mesajlaşma modeline dayalı olarak çalışır ve dağıtılmış ve hataya dayanıklı bir mimariyi takip eder. "Konular" adı verilen kalıcı, düzenli ve bölümlenmiş bir kayıt dizisini korur. Üreticiler bu konulara veri yazar, tüketiciler ise bunlardan okur. Bu, veri üreticileri ve tüketicileri arasında ayrım yapılmasını sağlar ve birden fazla uygulamanın aynı veri akışını bağımsız olarak tüketmesine olanak tanır.


Kafka'nın temel bileşenleri şunları içerir:

  1. Konular ve Bölümler: Kafka, verileri konulara göre düzenler. Her konu bir kayıt akışıdır ve bir konu içindeki veriler birden fazla bölüme ayrılmıştır. Her bölüm sıralı, değişmez bir kayıt dizisidir. Bölümler, verilerin birden fazla Kafka aracısı arasında dağıtılmasına izin vererek yatay ölçeklenebilirlik ve paralellik sağlar.


  2. Yapımcılar : Yapımcılar Kafka konularına veri yazan uygulamalardır. Belirli konulara ilişkin kayıtları yayınlarlar ve bunlar daha sonra konunun bölümlerinde saklanır. Yapımcılar kayıtları belirli bir bölüme açıkça gönderebilir veya Kafka'nın bir bölümleme stratejisi kullanarak bölümü belirlemesine izin verebilir.


  3. Tüketiciler : Tüketiciler Kafka konularından veri okuyan uygulamalardır. Bir veya daha fazla konuya abone olurlar ve atandıkları bölümlerdeki kayıtları tüketirler. Tüketici grupları tüketimi ölçeklendirmek için kullanılır ve bir konu içindeki her bölüm, grup içindeki yalnızca bir tüketici tarafından tüketilebilir. Bu, birden fazla tüketicinin aynı konunun farklı bölümlerindeki verileri işlemek için paralel olarak çalışmasına olanak tanır.


  4. Aracılar : Kafka bir sunucu kümesi olarak çalışır ve her sunucuya aracı adı verilir. Aracılar, üreticilerden ve tüketicilerden gelen okuma ve yazma taleplerini karşılamanın yanı sıra konu bölümlerini yönetmekten sorumludur. Bir Kafka kümesinde yükü dağıtmak ve hata toleransını sağlamak için birden fazla aracı bulunabilir.


  5. Bölümler/Çoğaltma : Hata toleransı ve veri dayanıklılığı elde etmek amacıyla Kafka, konu bölümleri için çoğaltmanın yapılandırılmasına izin verir. Her bölümün birden fazla kopyası olabilir; bir kopya lider, diğerleri ise takipçi olarak atanır. Lider replika, o bölüm için tüm okuma ve yazma isteklerini yönetirken, takipçiler senkronize kalmak için liderden gelen verileri kopyalar. Lider kopyasına sahip bir aracı başarısız olursa, sürekli çalışmayı sağlamak için takipçilerden biri otomatik olarak yeni lider olur.


  6. Ofset Yönetimi : Kafka, her bölüm için ofset kavramını korur. Ofset, bölüm içindeki bir kayıt için benzersiz bir tanımlayıcıyı temsil eder. Tüketiciler mevcut ofsetlerini takip ederek arıza veya yeniden işleme durumunda tüketime kaldıkları yerden devam etmelerine olanak tanır.


  7. ZooKeeper : Kafka'nın bir parçası olmasa da, ZooKeeper genellikle meta verileri yönetmek ve bir Kafka kümesindeki aracıları koordine etmek için kullanılır. Lider seçimine, konu ve bölüm bilgilerine ve tüketici grubu koordinasyonunun yönetilmesine yardımcı olur. [Not: Zookeeper meta veri yönetimi aracı, yakında aşamalı olarak Kafka Raft veya dahili olarak yönetilen meta veriler için bir protokol olan KRaft'a geçecektir ]


Genel olarak Kafka'nın tasarımı ve mimarisi, onu büyük hacimli gerçek zamanlı veri akışlarını işlemek için yüksek düzeyde ölçeklenebilir, hataya dayanıklı ve verimli bir platform haline getiriyor. Veri entegrasyonunu, olay işlemeyi ve akış analitiğini kolaylaştırarak birçok veri odaklı uygulamada ve veri altyapısında merkezi bir bileşen haline geldi.


Tipik bir Kafka mimarisi şu şekilde olacaktır:

Tipik Kafka mimarisi


Kafka kümelemesi, bir Kafka kümesi oluşturmak için birden fazla Kafka aracısının bir grup olarak birlikte çalıştırılması uygulamasını ifade eder. Kümeleme, Kafka mimarisinin temel bir özelliğidir ve ölçeklenebilirlik, hata toleransı ve yüksek kullanılabilirlik gibi çeşitli avantajlar sağlar. Büyük ölçekli veri akışlarını yönetmek ve sistemin arızalar karşısında bile çalışır durumda kalmasını sağlamak için Kafka kümesi kullanılır.


Kümede Kafka konuları, ölçeklenebilirlik ve paralellik sağlamak için birden çok bölüme ayrılmıştır. Her bölüm doğrusal olarak sıralanmış, değişmez bir kayıt dizisidir. Bu nedenle bölümler, verilerin kümedeki birden fazla aracıya dağıtılmasına olanak tanır.


Minimum bir Kafka kümesinin, her biri ayrı bir sunucuda (sanal veya fiziksel) çalıştırılabilen 3 Kafka aracısından oluştuğu unutulmamalıdır. 3 düğüm kılavuzu, bir komisyoncunun başarısız olması durumunda bölünmüş beyin senaryosunu önlemeye yardımcı olmayı amaçlamaktadır.


Kafka ve Kubernetes

Daha fazla şirket Kafka'yı benimsedikçe, Kafka'nın Kubernetes üzerinde konuşlandırılmasına da ilgi artıyor.


Aslında, Dynatrace tarafından hazırlanan en son Kubernetes in the Wild raporu 2023, büyük kuruluşların %40'ından fazlasının açık kaynaklı mesajlaşma platformunu Kubernetes içinde çalıştırdığını gösteriyor; bunların çoğunluğu Kafka'dır.


Kubernetes'te kullanılan teknolojiler

Kaynak .


Aynı rapor aynı zamanda "Kubernetes'in bulutun 'işletim sistemi' olarak ortaya çıktığı" yönünde cesur bir iddiada da bulunuyor.


O halde Kafka yöneticilerinin Kafka ile Kubernetes arasındaki etkileşimi ve bunların ölçeğe uygun şekilde nasıl uygulanacağını anlaması zorunludur.


Çoklu Küme Kafka Durumu

Kafka kümesini tek bir Kubernetes kümesi kurulumunda çalıştırmak oldukça basittir ve teoride gerektiği gibi ölçeklenebilirliğe olanak tanır. Ancak üretimde resim biraz bulanıklaşabilir.


Küme teriminin kullanımını Kafka ve Kubernetes arasında ayırmalıyız. Bir Kubernetes dağıtımı, Kubernetes kümesi olarak adlandırılan, bağlı düğümlerin bir gruplamasını belirtmek için küme terimini de kullanır. Kafka iş yükü Kubernetes'te konuşlandırıldığında, bir Kubernetes kümesi içinde çalışan bir Kafka kümesi elde edersiniz, ancak tartışmamızla daha alakalı olarak, dayanıklılık, performans ve veri egemenliği için birden fazla Kubernetes kümesini kapsayan bir Kafka kümesine de sahip olabilirsiniz. vesaire.


Öncelikle Kafka çok kiracılı kurulumlar için tasarlanmamıştır. Teknik açıdan Kafka, Kubernetes ad alanları veya kaynak izolasyonu gibi kavramları anlamıyor. Belirli bir konu dahilinde, birden fazla kullanıcı grubu arasında güvenlik erişimi kısıtlamalarını zorunlu kılacak kolay bir mekanizma yoktur.


Ek olarak, toplu uygulama ve gerçek zamanlı uygulama gibi farklı iş yüklerinin farklı güncelleme sıklığı ve ölçek gereksinimleri olabilir. İki iş yükünün tek bir kümede birleştirilmesi olumsuz etkilere neden olabilir veya gereğinden fazla kaynak tüketebilir.

Veri egemenliği ve mevzuata uygunluk, verilerin ve konuların belirli bir bölge veya uygulamada aynı yerde konumlandırılmasına da kısıtlamalar getirebilir.


Dayanıklılık elbette birden fazla Kafka kümesine duyulan ihtiyacın ardındaki bir diğer güçlü itici güçtür. Kafka kümeleri konuların hata toleransı için tasarlanmış olsa da, yine de tüm kümenin felaketle sonuçlanabilecek bir başarısızlığını planlamamız gerekiyor. Bu gibi durumlarda, tamamen kopyalanmış bir kümeye duyulan ihtiyaç, uygun iş sürekliliği planlamasına olanak sağlar.


İş yükünü buluta geçiren veya hibrit bulut stratejisine sahip işletmeler için, riskli tam ölçekli bir Kafka geçişi yerine birden fazla Kafka kümesi kurup zaman içinde planlı bir iş yükü geçişi gerçekleştirmek isteyebilirsiniz.


Bunlar, pratikte işletmelerin birbirleriyle etkileşime girmesi gereken birden fazla Kafka kümesi oluşturmak zorunda kalmalarının nedenlerinden sadece birkaçı.


Çoklu Küme Kafka

Birbirine bağlı birden fazla Kafka kümesinin olması için, bir kümedeki anahtar öğelerin diğer kümeye/kümelere kopyalanması gerekir. Bunlar konuları, uzaklıkları ve meta verileri içerir. Kafka açısından bu çoğaltma Yansıtma olarak kabul edilir. Çoklu küme kurulumlarına yönelik mümkün olan iki yaklaşım vardır. Uzatılmış Kümeler veya Bağlı Kümeler.


Çoklu Küme Kafka


Uzatılmış kümeler - Eşzamanlı çoğaltma

Uzatılmış küme, çeşitli fiziksel kümelere 'uzatılmış' mantıksal bir kümedir. Konular ve kopyalar fiziksel kümeler arasında dağıtılır ancak mantıksal bir küme olarak temsil edildikleri için uygulamaların kendisi bu çokluğun farkında değildir.


Uzatılmış kümeler güçlü bir tutarlılığa sahiptir ve yönetilmesi daha kolaydır. Uygulamalar birden fazla kümenin varlığından habersiz olduğundan, bağlı kümelerle karşılaştırıldığında uzatılmış kümelere dağıtılmaları daha kolaydır.


Uzatılmış kümelerin dezavantajları, kümeler arasında senkronize bir bağlantı gerektirmesidir. Hibrit bulut dağıtımı için ideal değiller ve 'bölünmüş beyin' senaryosunu önlemek için en az 3 kümeden oluşan bir çekirdek sayı gerektirecekler.


Bağlı Kümeler - Eşzamansız çoğaltma

Öte yandan Bağlantılı Küme, birden fazla bağımsız kümenin bağlanmasıyla dağıtılır. Bu bağımsız kümeler farklı bölgelerde veya bulut platformlarında çalışıyor olabilir ve ayrı ayrı yönetiliyor olabilir.


Bağlantılı küme modelinin birincil faydası, diğer kümeler bağımsız olarak çalıştığı için küme arızası durumunda kesinti yaşanmamasıdır. Her küme, kendi özel kaynakları için de optimize edilebilir.


Bağlı kümelerin en büyük dezavantajı, kümeler arasındaki eşzamansız bağlantıya dayanmasıdır. Kümeler arasında kopyalanan konular 'yazılarak kopyalanma' değil, nihai tutarlılığa bağlıdır. Bu, eşzamansız yansıtma işlemi sırasında olası veri kaybına yol açabilir.


Ek olarak, bağlı kümeler arasında çalışan uygulamaların birden çok kümeden haberdar olacak şekilde değiştirilmesi gerekir.


Bu bilmecenin çözümüne değinmeden önce, Kafka kümesi bağlantısını sağlamak için piyasadaki yaygın araçlardan kısaca bahsedeceğim.


Açık Kaynak Kafka'nın kendisi Mirror Maker adlı bir yansıtma aracıyla birlikte gelir.

Bağlantılı Kümeler - https://www.altoros.com/blog/multi-cluster-deployment-options-for-apache-kafka-pros-and-cons/


Mirror Maker, yerleşik bir yapımcı aracılığıyla konuları farklı kümeler arasında kopyalar. Bu şekilde veriler, nihai tutarlılıkla, ancak bireysel süreçleri kesintiye uğratmadan kümeler arasında çapraz kopyalanır.


Mirror Maker'ın konsepti basit olsa da, Mirror Maker'ı uygun ölçekte kurmanın BT organizasyonları için oldukça zor olabileceğini unutmamak önemlidir. IP adreslerini, adlandırma kurallarını, kopya sayısını vb. yönetmek doğru şekilde yapılmalıdır; aksi takdirde, bir konunun sonsuz sayıda kopyalandığı ve sonuçta çökmeye yol açan 'sonsuz çoğaltma' olarak bilinen duruma yol açabilir.


Mirror Maker'ın diğer dezavantajları, güncellemeler için izin verilen/izin verilmeyen listelerin dinamik yapılandırılmamasıdır. Mirror Maker ayrıca konu özelliklerini düzgün bir şekilde senkronize etmiyor, bu da çoğaltılacak konuları eklerken veya kaldırırken bunu büyük ölçekte operasyonel bir baş ağrısına dönüştürüyor. Mirror Maker 2 bu zorlukların bazılarını çözmeye çalışıyor ancak birçok BT mağazası hala Mirror Maker'ı doğru şekilde kurmakta zorlanıyor.


Kafka kopyalamaya yönelik diğer Açık Kaynak araçları arasında Salesforce'tan Mirus, Uber'den uReplicator ve Netflix'ten özelleştirilmiş Flink yer alıyor.


Ticari lisanslı seçenekler için Confluent iki seçenek sunar: Confluent Replicator ve Cluster Linking. Confluent Replicator, temel olarak konu verilerini kümeler arasında kopyalamak için yüksek performanslı ve dayanıklı bir yol sağlayan bir Kafka Connect bağlayıcısıdır. Küme Bağlantısı, dahili olarak geliştirilen ve konu sapmalarını korurken çoklu bölge çoğaltmayı hedefleyen başka bir tekliftir.


Öyle bile olsa, Küme Bağlantısı, verilerin ağ sınırlarını aşması ve genel trafik yollarından geçmesi gereken eşzamansız bir çoğaltma aracıdır. Şu ana kadar açıkça görüleceği gibi, Kafka çoğaltma, geniş ölçekte üretim uygulamaları için çok önemli bir stratejidir; soru, hangi seçeneğin seçileceğidir.

Yaratıcı Kafka yöneticileri, uygulama performansı ve dayanıklılık gereksinimlerine bağlı olarak bağlantılı kümelere ve uzatılmış kümelere veya bu dağıtımların bir kombinasyonuna ihtiyacınız olabileceğini hemen fark edeceklerdir.


Ancak göz korkutucu olan, küme yapılandırmalarını ayarlamanın ve bunları birden fazla kümede geniş ölçekte yönetmenin giderek artan zorluklarıdır. Bu kabusu çözmenin daha zarif bir yolu nedir?


Avesha'dan KubeSlice, her iki dünyanın da en iyisini elde etmenin basit bir yoludur. Kümeler veya ad alanları arasında doğrudan Hizmet Bağlantısı oluşturarak KubeSlice, Kafka kümeleri arasındaki bireysel bağlantıyı manuel olarak yapılandırma ihtiyacını ortadan kaldırır.


KubeSlice özünde kümeler arasında güvenli, senkronize bir Katman 3 ağ geçidi oluşturur; uygulama veya ad alanı düzeyinde yalıtılmıştır. Bu ayarlandıktan sonra Kafka yöneticileri Kafka aracılarını kümelerden herhangi birine dağıtmakta özgürdür.


Her aracının kendisi ayrı kümelerde olsa bile, dilim aracılığıyla birleştirilen diğer tüm aracılarla senkronize bir bağlantıya sahiptir. Bu, aracılar arasında etkili bir şekilde uzatılmış bir küme oluşturur ve güçlü bir tutarlılık ve düşük yönetim yükü avantajı sağlar.


Bağlı Kümeler



Pastanı al ve onu da ye!

Mirror Maker'ı kümelerine dağıtmak isteyenler için, kümeler arasındaki bağlantı KubeSlice'a devredildiğinden bu işlem minimum çabayla yapılabilir. Böylece Kafka uygulamaları, yetenekleri gerektiği gibi karıştırıp eşleştirme yeteneği ile aynı dağıtımda eşzamanlı (hız, dayanıklılık) VE eşzamansız (bağımsızlık, ölçek) çoğaltma avantajlarına sahip olabilir. Bu, şirket içi veri merkezleri, genel bulutlar veya bunların hibrit bir kurulumdaki herhangi bir kombinasyonu için geçerlidir.



Bağlı Kümeler

En iyi yanı, KubeSlice'ın kesintiye neden olmayan bir dağıtım olmasıdır; bu, halihazırda dağıtılmış olan herhangi bir aracın kaldırılmasına gerek olmadığı anlamına gelir. Bu sadece bir dilim oluşturmak ve Kafka dağıtımını bu dilime eklemek meselesidir.

Çözüm

Bu blogda Apache Kafka'ya kısa bir genel bakış sunuldu ve bazı yaygın kullanım durumlarına değinildi. Kafka dağıtımlarını birden çok kümede ölçeklendirmek için mevcut araçları ele aldık ve her birinin avantajlarını/dezavantajlarını tartıştık. Makalede son olarak, Kafka çoklu küme dağıtımlarını basitleştiren ve Kafka replikasyonunun birden fazla kümede uygun ölçekte yapılandırılmasıyla ilişkili sorunları ortadan kaldıran yeni ortaya çıkan hizmet bağlantı çözümü Kubeslice de tanıtıldı.


Okuyucuların yararlı bulabileceği birkaç bağlantı:

AWS'de Kafka'yı çalıştıran en iyi uygulamaların yer aldığı eski bir blog (KubeSlice tanıtılmadan önce)

KubeSlice'ın rehberli kurulumu

Kafka'yı GKE'de dağıtma