Apache Pulsar vs Kafka porównanie

TL;DR

Apache Pulsar i Kafka to dwie główne platformy do streamingu danych. Kafka dominuje w enterprise, ale Pulsar oferuje lepszą separację storage/compute, multi-tenancy i geo-replikację. Kafka: prostszy, bardziej dojrzały. Pulsar: nowocześniejszy, ale mniej community. Wybór zależy od wymagań dotyczących skali, multi-tenancy i złożoności deployment.

Wybór platformy do streamingu danych to jedna z najważniejszych decyzji architektonicznych w nowoczesnych systemach. Przez lata Apache Kafka było praktycznie jedyną opcją dla enterprise message streaming. Ale od 2016 roku Apache Pulsar zyskuje coraz większą popularność, obiecując rozwiązanie problemów, które Kafka ma od lat. Czy warto przeskoczyć na Pulsar, czy zostać przy sprawdzonym Kafka?

Dlaczego porównanie ma sens w 2019 roku

W 2019 roku jesteśmy w kluczowym momencie – Kafka ma 10 lat i jest dojrzałą platformą z ogromnym ekosystemem, ale także z bagażem legacy rozwiązań. Pulsar ma 3 lata jako projekt Apache i wprowadza nowoczesne podejście do architektury. To idealny moment, żeby porównać oba rozwiązania zanim podjąć decyzję o długoterminowej strategii.

Co się nauczysz:

  • Kluczowe różnice architektoniczne między Kafka a Pulsar
  • Porównanie wydajności, skalowalności i niezawodności
  • Przypadki użycia, gdzie każde rozwiązanie sprawdza się lepiej
  • Praktyczne aspekty deployment i operacji
  • Kryteria decyzyjne przy wyborze platformy

Wymagania wstępne:

Średniozaawansowany poziom – 2-5 lat doświadczenia. Powinieneś znać podstawy message queues, mieć doświadczenie z distributed systems i rozumieć koncepty jak partitioning, replication czy consistency models.

Architektura – fundamentalne różnice

Kafka: Broker-centric architecture

Kafka używa klasycznej architektury, gdzie broker jest odpowiedzialny za wszystko – przyjmowanie wiadomości, storage, replikację i serwowanie konsumentów:

# Kafka cluster - typowa konfiguracja 3 brokerów
kafka-broker-1: storage + compute + coordination
kafka-broker-2: storage + compute + coordination  
kafka-broker-3: storage + compute + coordination

W Kafka jeden broker może być leader dla niektórych partycji i follower dla innych. Wszystkie operacje na partycji muszą przechodzić przez jej leadera.

Pulsar: Layered architecture

Pulsar rozdziela warstwy – brokery obsługują tylko compute, a storage jest w oddzielnych BookKeeper nodes:

# Pulsar cluster - separacja warstw
pulsar-broker-1: compute only (stateless)
pulsar-broker-2: compute only (stateless)
pulsar-broker-3: compute only (stateless)

bookkeeper-1: storage only
bookkeeper-2: storage only  
bookkeeper-3: storage only
Pro tip: Separacja storage/compute w Pulsar oznacza, że możesz skalować je niezależnie. Potrzebujesz więcej throughput? Dodaj brokery. Więcej storage? Dodaj BookKeeper nodes.

Wydajność i throughput

MetrykaKafka 2.3Pulsar 2.4Komentarz
Peak throughput2M msgs/sec1.8M msgs/secKafka nieznacznie szybszy
Latency (p99)5-10ms3-8msPulsar niższa latency
Storage efficiencyBardzo dobraDobraKafka mniejszy overhead
Memory usageŚrednieWyższePulsar więcej komponentów

Pułapka: Benchmarki to jedno, ale w produkcji wydajność zależy od workload patterns. Kafka lepiej radzi sobie z batch processing, Pulsar z mixed workloads (batch + streaming).

Skalowalność i operacje

Kafka – challenges ze skalowaniem

Główne wyzwanie Kafka to rebalancing partycji. Dodanie nowego brokera wymaga ręcznego przeniesienia partycji:

# Kafka - dodanie nowego brokera
kafka-reassign-partitions.sh --zookeeper localhost:2181 \
  --reassignment-json-file reassign.json --execute

# Może trwać godziny dla dużych topicków

Pulsar – automatic load balancing

Pulsar automatycznie balansuje load między brokerami bez przestojów:

# Pulsar - nowy broker automatycznie przejmuje traffic
pulsar-admin brokers list
# Nowy broker pojawia się natychmiast w load balancing

Automatyczne load balancing w Pulsar oznacza, że możesz dodawać/usuwać brokery bez wpływu na produkcję. To ogromna zaleta dla cloud deployments.

Multi-tenancy i izolacja

Kafka – ograniczone wsparcie

Kafka ma podstawowe wsparcie dla multi-tenancy przez quota i ACLs, ale brakuje mu prawdziwej izolacji:

# Kafka quotas - ograniczone możliwości
kafka-configs.sh --zookeeper localhost:2181 --alter \
  --add-config 'producer_byte_rate=1024000' \
  --entity-type clients --entity-name tenant1

Pulsar – native multi-tenancy

Pulsar ma wbudowaną hierarchię: tenant → namespace → topic z pełną izolacją:

# Pulsar - kompletna izolacja tenantów
pulsar-admin tenants create company-a
pulsar-admin namespaces create company-a/production
pulsar-admin namespaces create company-a/staging

# Każdy tenant ma własne quotas, ACLs, geo-replication

Geo-replikacja i disaster recovery

Kafka – MirrorMaker challenges

Kafka używa MirrorMaker do replikacji między clusterami, ale ma ograniczenia:

# MirrorMaker - podstawowa replikacja
kafka-mirror-maker.sh --consumer.config consumer.properties \
  --producer.config producer.properties --whitelist '.*'
Uwaga: MirrorMaker nie gwarantuje message ordering ani exactly-once delivery między clusterami. To może być problem dla niektórych aplikacji.

Pulsar – built-in geo-replication

Pulsar ma wbudowaną geo-replikację z guaranteed ordering:

# Pulsar geo-replication
pulsar-admin namespaces set-clusters company-a/production \
  --clusters us-east,us-west,eu-central

# Automatyczna replikacja z zachowaniem kolejności

Ecosystem i narzędzia

Kafka – dojrzały ekosystem

Kafka ma ogromny ekosystem buildowany przez 10 lat:

  • Kafka Connect: 100+ gotowych connectorów
  • Kafka Streams: mature stream processing
  • KSQL: SQL for streaming data
  • Schema Registry: Confluent i inne
  • Monitoring: Kafka Manager, Kafdrop, Confluent Control Center

Pulsar – rozwijający się ekosystem

Pulsar ma podstawowe narzędzia, ale ekosystem jest jeszcze młody:

  • Pulsar IO: ~30 connectorów (rosnące)
  • Pulsar Functions: serverless compute
  • Pulsar SQL: Presto integration
  • Pulsar Manager: web UI do zarządzania
  • BookKeeper: proven storage layer (używany przez DistributedLog)

Przypadki użycia – kiedy używać czego

Wybierz Kafka gdy:

  • Masz doświadczony zespół Kafka – learning curve jest spory
  • Potrzebujesz dojrzałego ekosystemu – Connect, Streams, KSQL
  • Workload to głównie batch processing – Kafka świetnie się skaluje
  • Budżet ograniczony – Kafka wymaga mniej resources
  • Compliance requirements – Kafka ma więcej audytów bezpieczeństwa

Wybierz Pulsar gdy:

  • Potrzebujesz true multi-tenancy – różni klienci, izolacja
  • Geo-replication jest krytyczne – lepsze wsparcie niż Kafka
  • Mixed workloads – streaming + queuing + batch
  • Cloud-native deployment – łatwiejsze skalowanie
  • Niskie latencies są kluczowe – Pulsar ma lepszy p99

Deployment i operacje

Kafka deployment

# Kafka - typowa konfiguracja produkcyjna
# server.properties
num.network.threads=8
num.io.threads=16
socket.send.buffer.bytes=102400
socket.receive.buffer.bytes=102400
log.retention.hours=168
log.segment.bytes=1073741824
num.partitions=3
default.replication.factor=3

Pulsar deployment

# Pulsar - konfiguracja brokera
# broker.conf
zookeeperServers=zk1:2181,zk2:2181,zk3:2181
configurationStoreServers=zk1:2181,zk2:2181,zk3:2181
clusterName=pulsar-cluster
brokerServicePort=6650
webServicePort=8080
managedLedgerDefaultEnsembleSize=3
managedLedgerDefaultWriteQuorum=2
managedLedgerDefaultAckQuorum=2
Pro tip: Pulsar ma więcej komponentów (ZooKeeper + BookKeeper + Pulsar), co oznacza większą złożoność deployment, ale też lepszą separację concerns.

Migracja i coexistence

Nie musisz wybierać jednego rozwiązania od razu. Możliwe strategie:

Stopniowa migracja

// Dual write pattern - pisz do obu systemów
@Service
public class EventPublisher {
    private final KafkaTemplate kafkaTemplate;
    private final PulsarTemplate pulsarTemplate;
    
    public void publishEvent(Event event) {
        // Existing Kafka consumers
        kafkaTemplate.send("events", event);
        
        // New Pulsar consumers
        pulsarTemplate.send("persistent://tenant/namespace/events", event);
    }
}

Bridge pattern

// Kafka → Pulsar bridge
@KafkaListener(topics = "legacy-events")
public void bridgeToPlsar(Event event) {
    pulsarTemplate.send("persistent://tenant/namespace/events", event);
}
Czy Pulsar jest gotowy do produkcji w 2019?

Tak, Pulsar jest używany w produkcji przez Yahoo, Tencent, Splunk czy Verizon Media. Jednak ekosystem jest mniejszy niż Kafka, więc oceń swoje potrzeby.

Jakie są koszty operacyjne porównując obie platformy?

Kafka wymaga mniej resources, ale więcej manual operations. Pulsar zużywa więcej pamięci, ale automatyzuje wiele zadań operacyjnych. TCO zależy od skali i zespołu.

Która platforma ma lepsze wsparcie dla schematów?

Kafka ma dojrzały Schema Registry (Confluent). Pulsar ma wbudowane wsparcie dla Avro, JSON, Protobuf, ale mniej narzędzi do schema evolution.

Jak wygląda learning curve dla zespołu?

Kafka: steep learning curve, ale dużo materiałów. Pulsar: conceptually prostszy, ale mniej dokumentacji i community knowledge.

Która platforma ma lepsze wsparcie dla exactly-once semantics?

Kafka ma idempotent producers i transactional consumers (od wersji 0.11). Pulsar ma message deduplication, ale brakuje mu pełnych transakcji między topicami.

Czy można migrować z Kafka do Pulsar bez przestoju?

Tak, używając dual-write pattern. Pisz do obu systemów, stopniowo przenoś konsumentów, a potem wyłącz Kafka. Wymaga careful planning i testowania.

Który system ma lepsze wsparcie dla compliance (GDPR, etc.)?

Kafka ma topic compaction dla „right to be forgotten”. Pulsar ma TTL i message filtering. Oba wymagają dodatkowych narzędzi dla pełnego compliance.

Przydatne zasoby

🚀 Zadanie dla Ciebie

Stwórz proof-of-concept porównujący Kafka i Pulsar:

  1. Uruchom oba systemy lokalnie (Docker Compose)
  2. Napisz producenta i konsumenta dla każdego systemu
  3. Przetestuj throughput i latency dla różnych rozmiarów wiadomości
  4. Sprawdź zachowanie podczas failure jednego z brokerów
  5. Porównaj łatwość konfiguracji i monitorowania

Bonus: Napisz bridge aplikację, która przesyła wiadomości z Kafka do Pulsar!

Której platformy używasz w swoich projektach? Czy rozważałeś migrację z Kafka na Pulsar? Jakie były Twoje doświadczenia z performance i operacjami? Podziel się swoimi spostrzeżeniami w komentarzach!

Zostaw komentarz

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *

Przewijanie do góry