Kafka'yı Yapı Robust Event Driven Uygulamaları için Nasıl Kullanılır
Apache Kafka'yı ve Event-Driven Mimarlıktaki Rolü Anlamak
Apache Kafka, bir gün milyonlarca olayı ele geçirebilecek dağıtılmış bir etkinlik akışı platformudur. Başlangıçta LinkedIn'de gelişmiştir, Kafka, sağlam, üretim odaklı sistemlerin arka kemiği haline geldi, uygulamaları yayınlayabilme, depolama, süreç ve gerçek zamanlı analitik oluşturma yeteneği, yüksek aktarım, hata, ve yatay ölçeklenebilirlik, sağlam bir şekilde inşa etmek için ideal bir seçim sağlıyor.
Kafka'yı geleneksel mesaj kuyruklarından ayıran şey, her tarafın bağımsız olarak ölçeklendirilmesi ve sistemin bir parçasında hataların ortadan kaldırılmasıdır. Etkinlik odaklı uygulamalar için, bu mimari seçim doğrudan sağlamlığa yol açar: Mevcut olanları bozmadan yeni tüketiciler ekleyebilir ve her tarafın bağımsız olarak ölçeklenebilir ve başarısızlıklardan kurtulabileceğini ifade eder.
Kafka'nın Core Bileşenleri: Derin Dive
Kafka ile sağlam bir olay odaklı uygulamaları inşa etmek için, öncelikle temel bina bloklarını kavraymalısınız. Her bileşen platformun performansı ve güvenilirliğinde kritik bir rol oynar:
- [FONT:0]Topics[[Döneticiler], kayıtların yayınlandığı mantıksal kanallardır. Bir konu, herhangi bir bölüm bölmeye sahip olabilir ve bölme stratejisi, verilerin brokerlere nasıl dağıtıldığını belirler.
- [FONT:0]Partitions[[Dönetici 1) paralellik ve sipariş verme birimidir. Bir bölüm içinde, kayıtlar kesinlikle sıra dışı olarak sipariş edilir.Prodüktörler, aynı anahtar için tüm olayları aynı bölüm için seçebilirler.
- [FONT=0)Producers[[Döneticiler) konulara kayıt yaptırır. (köpücüler) hıza karşı hız dengelemek için acknowledgments (acks):2.TELFLT:0)
- [FONT: 1) Lider kabul eder, iyi denge.
- [FONT:2] – tüm doğru kopyalar, en güçlü dayanıklılık kabul eder.
Bu bileşenlerin nasıl etkileşimlendiğini anlamak, uygulamanızın gerekliliklerini transkript, dayanıklılık ve tutarlılık ile karşılayan Kafka dağıtımını tasarlamak için önemlidir.
Üretim için Kafka'yı kurmak -Ready Event Streaming
Tek bir broker ile bir gelişim kurulumu öğrenmek için iyidir, ancak sağlam bir olay odaklı bir uygulama bir üretim yapılandırmasını talep eder. İşte temel adımlar ve düşünceler:
Cluster Sizing ve Broker Yapılandırma
Lider seçimi için en az üç brokere başlayın ve veri tutma ihtiyaçlarınıza dayanan günlük tutma politikasını yapılandırın.(gün) birçok yayın yükleri için ortaktır.
Topic Design ve Katılımcılık
Parti sayımı hem üreticiler hem de tüketiciler için en fazla paralellik belirler. İyi bir başparma kuralı, konu başına 10-50 bölüm ile başlamaktır, çünkü her bölüm aslında bir dosyadır, bu yüzden çok fazla bölüm üst ve artan Zookeeper yükü ile baş başa çıkabilir.
Confluent Schema Kayıtları ile Bütünleşme
Veri uyumluluğunu etkinlik şemalarınız geliştikçe, kondüktör Schema Kayıtunu entegre etmek için. Bu hizmet mağazaları Euro, Protobuf veya JSON Schema tanımları ve uyumluluk kuralları (daha ileri, ileri, tam yapımcılar ve tüketiciler, şemaları dikmek yerine, yüksek performanslı, uzun ömürlü bir etkinlik-kanıtlama sistemleri için gereklidir. Örneğin, bir yapımcı bir şema kimliği ile birlikte bir mesaj gönderebilir ve tüketici Schema Kayıtunu kullanır.
En İyi Uygulamalarla Üreticileri ve Tüketicileri Uygulamayı Uygulayın
Kafka, Java, Python, Go, .NET için zengin müşteri kütüphaneleri sunar ve diğer birçok dil sunar. Aşağıdaki örnekler Java'yı kullanır, ancak desenler evrensel olarak geçerlidir.
Güvenilir bir yapımcı yaratmak
Güçlü bir üretici yeniden kurulmalıdır, idempotence ve işlemsel semantics:
- Enable idempotence by settingFLT:6). Bu, yeniden kurullarda tekrar kayıtların tekrarlanmasını önler, tek bölmeli yazar için tam olarak semantics sağlar.
- SetFLT:7 yüksek bir değere (örneğin, [[Düzgeler) ve yeniden kurulmak için yapılandırın.
- Başarısızlıklarla bir çağrı ile bir araya gelir: Hatayı, uyarıyı veya ölü bir konuya yol açın.
- Hatta yük dağıtmakta olan bir bölüm seçin. varsayılan çubuğun bölmesi toplu verimliliği artırır.
Örnek parçaları (pseudocode):
Properties props = new Properties();
props.put("bootstrap.servers", "broker1:9092,broker2:9092");
props.put("key.serializer", "org.apache.kafka.common.serialization.StringSerializer");
props.put("value.serializer", "org.apache.kafka.common.serialization.ByteArraySerializer");
props.put("enable.idempotence", true);
props.put("acks", "all");
props.put("retries", Integer.MAX_VALUE);
KafkaProducer<String, byte[]> producer = new KafkaProducer<>(props);
producer.send(new ProducerRecord<>("orders", orderKey, orderBytes), (metadata, exception) -> {
if (exception != null) {
// handle exception – log, alert, send to DLT
}
});
Resilient Bir Tüketici Oluşturun
Tüketiciler lütufla yeniden ele almalı, dengeleri yönetmelidir ve idempotent olarak:
- SetFLT:11) ve elle bir toplu işlemden sonra dengelemek. Bu, tüketicinin taahhüt etmeden önce veri kaybını önler.
- Kullanım süresine göre, toplu büyüklüğü kontrol etmek ve taahhüt etmeden önce çok fazla kayıt işlemekten kaçınmak.
- Yeniden kayıt yaptırmaya devam edin, bölme geri çağırmadan önce dengelemeleri depolamak ve atamada depolanmak için.
- Idempotent'ı işlemeye bırakın, böylece yeniden işlemeden çoğaltmak yan etkilere neden olmaz. Örneğin, olay ID'si ile karıştırın veya bir veritabanını kullanarak.
Yüksek kodlu için, bir İLMİŞT:0)poll döngüsü [Döneticileri bir iple paralel olarak kayıt yaptırır, ancak dengeleme işlemi sadece bir topludaki tüm kayıtların işlendiğinden emin olun.]Ücretsiz Kafka'nın tüketici belgeleri).
Kafka Streams ve KSQL ile Gelişmiş Olay İşleme
Basit ürün / konsume ötesinde, Kafka ilk sınıf akış işleme yetenekleri sağlar.
Kafka Streams
Kafka Streams, devletli akış uygulamaları için bir müşteri kütüphanesidir. Standart bir uygulama (no ayrı küme) olarak çalışır ve Kafka'nın eyalet depoları ve değişimlogları için kendi konularını kullanır: Key özellikler şunlardır:
- Tam olarak devletli operasyonlar için semantics (joins, aggregations).
- Pencere için yerli destek (tling, umut, seans pencereleri).
- Süreçor API ve DSL (e.g., 03.03.2012).
Örneğin, bir sipariş konusundan bir KTable oluşturmak ve [[Çalışkanlıkçıkışçıları) kullanarak müşteri başına toplam sipariş hesaplayabilirsiniz. Kafka Streams devlet mağazasını ve değişimlogunu otomatik olarak ele alır, uygulamanızı otomatik olarak başarısızlıklara karşı dirençli hale getirir - eğer bir düğüm kazara, devlet yeniden inşa edilir.
KSQL (Kafka SQL)
KSQL Kafka için akış SQL motorudur. Örneğin, Java kodu yazmadan SQL gibi sorguları yayınlamanıza izin verir. Reklamlama veya basit ETL için kullanın.
CREATE STREAM orders WITH (KAFKA_TOPIC='orders', VALUE_FORMAT='JSON');
CREATE TABLE high_value_orders AS
SELECT customer_id, COUNT(*) AS order_count, SUM(amount) AS total
FROM orders WINDOW TUMBLING (SIZE 1 HOUR)
WHERE amount > 1000
GROUP BY customer_id;
KSQL, etkinlik odaklı dönüşümleri hızla inşa etmek isteyen veri mühendisliği takımları için özellikle yararlıdır.
Bina Robust Production Systems için en iyi uygulamalar
Dayanıklı bir olay odaklı uygulama sadece yapımcıları ve tüketicileri yazmanın ötesine geçer. Tasarım, operasyonlar ve izleme için bütünsel bir yaklaşım gerektirir.
Hata işleme ve Dead- Letter Queues
Güçlü tüketicilerle bile, bazı kayıtlar işlenemez (örneğin, malform JSON, geçici kesintiler) Bu kayıtların tüketicinin istisnaları nerede bulduğu, orijinal kaydın oturum açmasını ve bunu ölü bir konuya (örneğin, 03.03.) bildir.
Tam olarak bir kez Semantics
Tekrarlanan uygulamalar için kabul edilemez (örneğin, finansal işlemler), Kafka'nın her iki üretici ve tüketici için tam olarak ayrıştırılması için işlemsel API'sini kullanın.In the producer side, as Bahsed, [[ŞampingFLT:17)
İzleme ve gözlemlenebilirlik
Kafka JMX aracılığıyla birçok metrik ortaya çıkıyor. Anahtar ölçümler:
- [FONT:0)Köpektif bölümler: Bir problemin yeniden uygulanması.
- [FONT:0)Consumer lag:[Dönetici:[Dönetici:0)En son denge ve tüketicinin kararlı dengesi. Yüksek gecikme, tüketiciler geride kalmak anlamına gelir.
- [FONT:0)Request latency:[Dönetici:[Dönetici:0)[Dönetici:[Dönetici:[Dönetici: 1 ) Zaman üretmek veya tüketilmesi için.
Prometheus gibi aletler Kafka JMX ihracatçıları metrik toplamak ve Grafana'da panolar kurmak. Ayrıca Kafka'nın yerleşik günlük analizörü (örneğin, 03.g., 03.) debugging için.
Güvenlik En İyi Uygulamaları
Verilerinizi geçiş ve geri kalanında koruyun:
- [FONT:0]Authentication:[Dönetici:[Dönetici: · 1) SASL/SCRAM veya SASL/SSL istemci doğrulama için.
- [[Dönetici:0)Yazdırma:[Dönetici:[Dönetici:0)[[Dönetici:[Dönetici:[Dönetici:0))) Kullanıcıların hangi konuları okuyabildiğini kontrol etmek için ACL'leri tanımlar.
- [FONT:0)Encryption:[Dönetici:[Dönetici:0)Enable TLS/SSL müşteri için kullanılabilir.
- [FONT:0)Network politikaları:[Döneticiler ve VPC’ler brokerlere erişimi kısıtlamak için kullanır.
Refer to theETHFLT:0)Confluent Security Documentation) Kapsamlı bir rehber için.
Scaling ve Tuning
Etkinliğiniz büyüdükçe, yeni brokerler için yeniden yapılandırma faktörü, ayarlayıcılar veya aracılar. disk kullanımı ile kapasite için plan, ağ I/O ve CPU. Kafka'nın 03.38.'si yeni brokerlere karşı verileri yeniden ayarlamanız gerekebilir.
Gerçek Dünya Vakaları ve Desenleri Kullanıyor
Bu kavramların nasıl bir araya geldiğini göstermek için, Kafka'yı merkezi sinir sistemi olarak kullanan tipik bir e-ticaret platformu düşünün:
- Sipariş Servisi "OrderPlaced" olayları bir konu için yayınlar.
- Teşvik Hizmeti bu olayları rezerve etmek için tüketiyor, sonra "InventoryReserved" veya "OutOfStock" yayınlıyor.
- Ödeme Servisi "InventoryReserved" olayları ve süreçleri ödemelerini tüketiyor, "PaymentComplet" yayınlıyor.
- Bildirim Hizmeti "PaymentCompleted" yiyerek e-posta / SMS onaylarını gönderir.
- Analytics Service, gerçek zamanlı bir pano oluşturmak için tüm sipariş olayları tüketiyor.
- Kafka Streams uygulaması, dolandırıcılık kalıpları tespit etmek için olay akışlarına katılır (örneğin, kısa bir zamanda aynı IP'den çok fazla sipariş).
Bu mimaride, her hizmet bağımsız olarak ölçeklenir. Bildirim Servisi bakım için aşağılanırsa, olaylar Kafka'da kalır ve daha sonra işlenir. Ödeme Hizmeti işlendikten sonra başarısız olursa, ÖdemeCompleted olayı idempotent kurtarma sağlar.Bir şema kaydının kullanımı, siparişin yeni bir alan eklerken (örneğin, “bölge kodu”) altta hizmetler hemen kırılır.
Başka bir ortak model ise, başlangıçtan geri dönüş olayları ile yeniden inşa etmek için durumlarının yalnızca oturum açma özelliğidir.Bu model, gerçeklerin birincil kaynağının kendisini yeniden canlandırarak tekrar tekrar tekrarlama olayları sunar.
Diğer Event-Driven teknolojileri ile karşılaştırıldığında
Kafka güçlü olsa da, bunu alternatiflere karşı kullanmak için tek çözüm değil, doğru mimari seçimi yapmanıza yardımcı olacaktır:
- [FONT=0]KQ[DÜDÜDÜDÜDÜDÜDÜSÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜ
- [FONT:0]Amazon Kinesis [Dönetici: 1] Kafka'ya benzer yönetilen bir akış hizmetidir, ancak operasyonel yükü ortadan kaldırır. Ancak, ayarda daha yüksek maliyete ve daha az esneklik sağlar. Kafka daha fazla kontrol ve açık dağıtım seçenekleri sunar.
- [FONT:0]Apache Pulsar[[Dönetici:0) Bağımlı depolama ve çok katmanlılık sağlar, ancak daha küçük bir topluluk ve daha az ekosistem araçları vardır. Kafka'nın olgunluğu, büyük topluluk ve geniş müşteri kütüphaneleri genellikle büyük ölçekli etkinlik odaklı sistemler için daha güvenli bir seçim yapar.
Sonuçta, Kafka sipariş edilen uygulamalar için en iyisidir, dayanıklı, tekrarlanabilir etkinlik akışları yüksek aktarım ve düşük gecikmeli, özellikle birden fazla mikro hizmet veya veri gölü inşa ederken.
Sonuç Sonuç Sonuç Sonuç Sonuç Sonuç Sonuç Sonuç
Apache Kafka ile sağlam olay odaklı uygulamalar sadece API'sini anlamaktan daha fazlasını gerektirir - Kafka Streams ve Schema Sicili gibi kapsamlı bir şekilde yapılandırın ve hata işleme, izleme ve güvenlik için en iyi uygulamalara bağlı olarak.Kırsallar, bölümler, üreticiler, tüketiciler, brokerler ve daha ileri yetenekleri Kafka Streams ve Schema Sicili gibi, yüksek yüklere dayanıklı sistemler oluşturabilirsiniz.
Etkinliğinizi dikkatlice modelleyerek, gelecekteki büyüme ile ilgili konularınızı aklınızda bulundurun ve her zaman beklenmedik bir plan: ağ bölümleri, broker çökerleri ve şema değişiklikleri. Kafka ile, gerçek zamanlı veri akışınızı elde etme ve sadece karmaşıklıkta gelişmeyen uygulamaları inşa etme yeteneğinizi kazanır.Daha fazla okuma için, Kafka belgelemek için:0Apache, Office Menu).