Modern veri dünyasında toplu işleme, birçok kullanım durumu için artık yeterli değildir. Kurumlar, kararları desteklemek, sahtekarlığı tespit etmek veya kullanıcı deneyimlerini gerçek zamanlı olarak kişiselleştirmek için anlık içgörülere ihtiyaç duyar. Apache Kafka, bu yüksek verimli, hata toleranslı olay akışı platformlarını oluşturmak için fiili standart haline gelmiştir. Bu yazı, Kafka ekosisteminin temel bileşenlerini; entegrasyon, dönüşüm ve olay odaklı sistemlere yönelik mimari değişim üzerine odaklanarak incelemektedir.
Temel: Olay Odaklı Mimari
Olay odaklı mimari (EDA), servisleri olayların üretilmesine, algılanmasına, tüketilmesine ve olaylara tepki verilmesine dayanarak birbirinden ayırır. İstemcinin bir yanıt beklediği geleneksel senkron REST API'lerinin aksine, EDA üreticilerin tüketicilerin kim olduğunu bilmeden olayları bir konuya yayınlamasına olanak tanır. Bu asenkron model, ölçeklenebilirliği ve dayanıklılığı artırır. Kafka, bu mimaride olayları arabellekleyen ve ilgililere güvenilir bir şekilde iletilmesini sağlayan merkezi sinir sistemi görevi görür.
Kafka Connect: Kopukluğu Aşmak
Çoğu veri mühendisi için ilk zorluk, veriyi Kafka'ya verimli bir şekilde aktarmak ve Kafka'dan çıkarmaktır. Her veri kaynağı (PostgreSQL, S3 veya Elasticsearch gibi) için özel üreticiler ve tüketiciler yazmak hata yapmaya açıktır ve bakımı zordur. İşte burada
Kafka Connect öne çıkar. Bağlayıcı eklentiler kullanarak Kafka ile diğer sistemler arasında veri akışı sağlayan, ölçeklenebilir ve güvenilir bir araçtır.
Connect, veriyi Kafka'ya çeken
Kaynak Bağlayıcılar ve veriyi dışarıya aktaran
Hedef Bağlayıcılar olmak üzere iki modu destekler. Tipik bir PostgreSQL kaynak bağlayıcı yapılandırması şu şekilde görünebilir:
{
"name": "postgres-source",
"config": {
"connector.class": "io.confluent.connect.jdbc.JdbcSourceConnector",
"connection.url": "jdbc:postgresql://localhost:5432/mydb",
"mode": "incrementing",
"incrementing.column.name": "id",
"topics": "db_public.users"
}
}
Bu bildirimsel yaklaşım, karmaşık veri hatlarının haftalar yerine dakikalar içinde kurulmasını sağlar ve Kafka Connect'i her veri mühendisliği yığını için vazgeçilmez bir araç haline getirir.
Kafka Streams: İşlem İçinde Akış İşleme
Veri Kafka'ya girdikten sonra, genellikle onu dönüştürmek, filtrelemek veya toplamak gerekir. Apache Flink veya Spark Streaming gibi ağır çerçeveler güçlü olsa da, önemli bir operasyonel yük getirirler.
Kafka Streams, hafif bir alternatif sunar. JVM tabanlı uygulamalarınızın içinde doğrudan akış işleme uygulamaları oluşturmanıza olanak tanıyan bir istemci kitaplığıdır.
Diyelim ki dakikada kullanıcı tıklamalarını saymanız gerekiyor. Kafka Streams ile bunu kısa Java kodu ile gerçekleştirebilirsiniz:
KStream<String, String> textLines = builder.stream("input-topic");
textLines
.flatMapValues(value -> Arrays.asList(value.toLowerCase().split("\\W+")))
.map((key, word) -> new KeyValue<>(word, word))
.countByKey("Counts")
.toStream()
.to("output-topic", Produced.with(Serdes.String(), Serdes.Long()));
Bu kod parçacığı, harici işleme kümelerine kıyasla gecikmeyi ve ağ geçişlerini azaltan, uygulamanızın içinde yerel olarak çalışan pencereleme toplama işlemini göstermektedir.
Sonuç
Sağlam bir gerçek zamanlı veri altyapısı oluşturmak, yalnızca bir aracı sunucu kurmakla ilgili değildir. Kafka Connect aracılığıyla sistemleri nasıl entegre edeceğinizi ve Kafka Streams kullanarak verileri nasıl mantıksal olarak işleyeceğinizi bütünsel olarak anlamayı gerektirir. Bu araçlardan yararlanarak, veri mühendisleri basit mesaj kuyruklarının ötesine geçerek; dayanıklı, ölçeklenebilir ve modern veri yüklerinin taleplerini karşılayabilen gerçek olay odaklı mimariler inşa edebilirler.