Redis ve Kafka [kapalı] arasındaki fark


91

Redis, tıpkı Kafka gibi gerçek zamanlı pub-sub olarak kullanılabilir.

Hangisini ne zaman kullanacağım kafam karıştı.

Herhangi bir kullanım durumu çok yardımcı olacaktır.


15
Bu sorunun neden "fikir temelli" olarak kapatıldığından emin değilim? İkisi arasında nesnel teknik farklılıklar vardır ve mevcut cevap bu farklılıkları açıkça ortaya koymaktadır.
David Anderson

Yanıtlar:


143

Redis pub-sub, daha çok, ürettiğiniz tüm mesajların tüm tüketicilere aynı anda iletileceği ve verilerin hiçbir yerde tutulmadığı bir ateş ve unut sistemi gibidir. Redis ile ilgili olarak hafızanız sınırlıdır. Ayrıca, üretici ve tüketici sayısı Redis'teki performansı etkileyebilir.

Öte yandan Kafka, kuyruk olarak kullanılabilen yüksek verimli, dağıtılmış bir günlüktür. Burada istenilen sayıda kullanıcı üretebilir ve tüketiciler istedikleri zaman tüketebilirler. Ayrıca kuyruk yoluyla gönderilen mesajların kalıcılığını sağlar.

Son Çekim:

Redis'i kullanın:

  1. Ürettiğiniz tüm mesajların anında tüketiciye ulaştırıldığı ateş ve unut tarzı bir sistem istiyorsanız.
  2. Hız en önemlisiyse.
  3. Veri kaybıyla yaşayabilirseniz.
  4. Sisteminizin gönderilen mesajı tutmasını istemiyorsanız.
  5. Ele alınacak veri miktarı çok büyük değil.

Kafka kullanın:

  1. Güvenilirlik istiyorsanız.
  2. Sisteminizin tüketimden sonra bile gönderilen mesajların bir kopyasına sahip olmasını istiyorsanız.
  3. Veri kaybıyla yaşayamıyorsanız.
  4. Hız büyük bir endişe değilse.
  5. veri boyutu çok büyük

74
Ana farklardan biri Redis Pub / Sub'ın itme tabanlı olması, Kafka Pub / Sub'ın ise çekme tabanlı olmasıdır. Bu, Redis'te yayınlanan mesajların abonelere anında otomatik olarak teslim edileceği anlamına gelirken, Kafka'da Veri / mesajlar asla tüketicilere iletilmez, tüketici mesajı işlemeye hazır olduğunda tüketici mesaj isteyecektir. cloudkarafka.com/blog/… kafka.apache.org/documentation.html#design_pull
Zeni

Bunu okurken: redis.io/topics/persistence gönderilen mesajları tutmam mümkün görünüyor. Yanlış mıyım?
David D.

1
@DavidD: Sağladığınız bağlantı redis, gönderilmiş ancak henüz işlenmemiş mesajların yeniden başlatıldıktan sonra kaybolmamasını sağlamak için nasıl yapılandırabileceğinizi açıklar redis. Bu o kadar mümkün olsa da, redisizin vermez beklemede (veya tutmak @Karthikeyan tekrar kullanımı kelimelere) kutunun dışında.
Younes

12

Redis 5.0+ sürümü, Akış veri yapısını sağlar. Teslimat garantili log veri yapısı olarak düşünülebilir. Tüketicilerin bir akışa üreticiler tarafından eklenen yeni verileri beklemelerine olanak tanıyan bir dizi engelleme işlemi ve buna ek olarak Tüketici Grupları adı verilen bir kavram sunar.

Temelde Stream yapısı Kafka ile aynı yetenekleri sağlar.

İşte belgeler https://redis.io/topics/streams-intro

Bu özelliği destekleyen en popüler iki Java istemcisi vardır: Redisson ve Jedis


1
Nikita'nın kendisi :) Zarif kütüphane! Kullanmaya yeni başladım. İyi yapılandırılmış ve düşünülmüş! Siz bir dahisiniz efendim!
mmm

@mmm Teşekkürler!
Nikita Koksharov

Doğru kullanımla ilgili bazı sorularım var ve yanlış varsayımlar yapmaktan korkuyorum. Belki de buraya SO'ya eklediğim iki soruyu gözden geçirebilirsiniz. Ayrıca, sorun olmazsa bazen rahatsız etmek için sizi Skype'a eklemeyi çok isterim. Nasıl kullanmak istediğim konusunda biraz fikir verebilirim. Toplam çaylak değil :)
mmm

Örneğin, şu anda önbelleğe alınabilir bir harita oluşturuyorum ... anahtar olarak bir çalışma zamanı kimliği kullanıyorum ve ardından sistemin şu anda bir deque'den işlediği öğelerin bir listesini ekliyorum ... liste, sanırım bir ArrayList oluşturabilirim , redisson'un bunu benim için dahili olarak dönüştürebileceğine inanıyorum, ancak yapmazsam ve bir yeniden yayınlama listesi oluşturursam, ona bir isim vermem gerekir, değil mi? O zaman bu listeye dahili olarak hangi adı verirsiniz? Rastgele bir kimlik mi? O halde API'niz, bunun için bir kullanım alanı olduğundan, createList, createMap vb. Daha az bir parametre sağlamamalı mı?
mmm

Elbette randomUuid gönderebilirim ama redisson'un iyi bir isim oluşturucuya sahip olduğunu bilmek güzel olurdu. Ayrıca, "alınan" öğeleri içeren bir haritayla desteklenen, redisson deque içeren toplu işleri işlemek için kendi Deque'imi yazıyorum. Kuyruğu işleyen her biri 8 iş parçacığına sahip 10 sistemimiz varsa ve bir nükleer bomba meydana gelirse, bunların tümü alındığı, ancak tam olarak işlenmediği için kaybolur ve işlenmeden kalır.
mmm
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.