Kafka'yı (CQRS) Etkinlik Mağazası olarak kullanma. İyi bir fikir?


219

Ben geldim rağmen Kafka öncelikle burada son zamanlarda Kafka belki (esas) bir olarak kullanılabilir gerçekleştirilen CQRS , eventstore .

Kafka'nın desteklediği ana noktalardan biri:

  • Olay yakalama / depolama, elbette tüm HA.
  • Pub / alt mimari
  • Yeni abonelerin sistemden sonra kayıt olmalarını sağlayan olay günlüğünü yeniden oynatma yeteneği.

Kuşkusuz CQRS / Event Sourcing'e% 100 tecrübeli değilim ama bu bir etkinlik deposunun ne olması gerektiğine oldukça yakın görünüyor. Komik olan şey: Kafka'nın bir etkinlik deposu olarak kullanılmasına dair pek bir şey bulamıyorum, belki de bir şeyleri kaçırıyorum.

Peki, Kafka'da iyi bir etkinlik mağazası olması için eksik olan bir şey var mı? Çalışır mıydı? Üretim mi kullanıyorsunuz? İçgörü, bağlantılar vb. İle ilgileniyor

Temel olarak, sistemin durumu, genel olarak yapılan sistemin geçerli durumunu / anlık görüntüsünü kaydetmek yerine, sistemin şimdiye kadar aldığı işlemlere / olaylara göre kaydedilir. (Muhasebede bir defteri kebir olarak düşünün: tüm işlemler nihayetinde nihai duruma eklenir) Bu, her türlü harika şeylere izin verir, ancak sağlanan bağlantıları okuyun.


Merhaba Geert-Jan. Geriye dönük olarak bu sorunla nasıl başa çıktınız? İlgili bir sorum var (burada açıklanmıştır: stackoverflow.com/questions/58763727/… ). Kafka'nın evlat edinilmesini öneren çoğu insan, ek-günlüğün ölçülemezliği, yüksek verim ve bölüm emri garantisine dayanıyor gibi görünüyor. (% 100 sipariş garantisi sadece 1 bölüm-öldürme eşzamanlılığı anlamına gelir)
tony _008

Sonunda ikna etmedim çünkü o yan projeyi sonlandırdım. Korkarım cevap yok
Geert-Jan

Yanıtlar:


119

Kafka, bir etkinlik mağazasına birçok benzerlik gösteren ancak girişlerini alıntılayan bir mesajlaşma sistemi olmalıdır:

Kafka kümesi, yayınlanmış olsun olmasın, yayınlanmış tüm mesajları yapılandırılabilir bir süre boyunca saklar . Örneğin, tutma iki gün için ayarlanmışsa, bir mesaj yayınlandıktan sonraki iki gün boyunca tüketim için kullanılabilir, bundan sonra yer açmak için atılır. Kafka'nın performansı, veri boyutuna göre etkin bir şekilde sabittir, bu nedenle çok fazla veriyi tutmak sorun değildir.

Bu nedenle, mesajlar potansiyel olarak süresiz olarak saklanabilirken, bunların silinmesi beklenir. Bu, bunu bir etkinlik mağazası olarak kullanamayacağınız anlamına gelmez, ancak başka bir şey kullanmak daha iyi olabilir. Alternatif için EventStore'a bir göz atın .

GÜNCELLEME

Kafka belgeleri :

Olay kaynağı, durum değişikliklerinin zaman sıralı bir kayıt dizisi olarak günlüğe kaydedildiği bir uygulama tasarımı stilidir. Kafka'nın çok büyük depolanmış günlük verileri desteği, bu tarzda oluşturulmuş bir uygulama için mükemmel bir arka uç olmasını sağlar.

GÜNCELLEME 2

Olay kaynağı için Kafka'yı kullanmakla ilgili bir endişe, gerekli konuların sayısıdır. Tipik olarak olay tedarikinde, varlık başına olay akışı (konu) vardır (kullanıcı, ürün vb.). Bu şekilde, bir varlığın mevcut durumu akıştaki tüm olayların yeniden uygulanmasıyla yeniden oluşturulabilir. Her Kafka konusu bir veya daha fazla bölümden oluşur ve her bölüm dosya sisteminde bir dizin olarak saklanır. Ayrıca zod sayısı arttıkça ZooKeeper'dan da baskı olacaktır.


16
Kafka'ya bakıyordum ve başka bir endişem vardı: İyimser eşzamanlılık hakkında hiçbir şey fark etmedim. İdeal olarak şunu söyleyebilirim: "Bu olayı yalnızca nesnenin en son olayı hala N ise N + 1 öğesi olarak ekleyin."
Darien

2
@Darien: Muhtemelen Redis'in Kafka'yı beslediği ( Redis Bildirimleri'ni kullanarak ) bir kurulumla gidiyorum . Redis iyimser eşzamanlılığa izin verdiğinden (Watch / multi-exec kullanarak), bu çalışmalıdır
Geert-Jan

2
@Darien Etkinlik satın alma konusunda uzman değilim, ancak benim anlayışım, genel olarak konuşursanız, iyimser eşzamanlamaya ihtiyacınız olmayacağıydı, çünkü olaylar, tarihsel olarak zaten olmuş olan şeylerin tanım kayıtlarıdır.
John

4
@John Bence, çelişkili olmayan olayların yetkili bir siparişine sahipseniz, nerede yaşadıkları her yerde gerçek olay mağazası teknolojinizdir ve Kafka bunları dağıtmak için ikincil bir sistem olarak kullanılıyor.
Darien

1

283

Kafka'nın orijinal yazarlarından biriyim. Kafka, olay kaynağı için bir günlük olarak çok iyi çalışacak. Hataya dayanıklıdır, muazzam veri boyutlarına ölçeklendirilir ve yerleşik bir bölümleme modeline sahiptir.

Bunu bu formun LinkedIn'deki çeşitli kullanım durumları için kullanıyoruz. Örneğin, açık kaynaklı akış işleme sistemimiz Apache Samza, olay kaynağı için yerleşik desteğe sahiptir .

Olay kaynağı için öncelikle Kafka'yı kullanma hakkında pek bir şey duymadığını düşünüyorum çünkü olay kaynağı terminolojisi, Kafka'nın en popüler olduğu tüketici web alanında çok yaygın görünmüyor.

Ben Kafka kullanımının bu tarz hakkında biraz yazdım buraya .


2
Bu linki yayınlayacaktım :) Harika blog yazısı. Yorum yapabilmek iyi olurdu çünkü birçok sorum var. @ Geert-Jan da "Lambda mimarisi" ne bir göz atın, bu oldukça benzer ve adı Storm yazar, çoğunlukla birçok örnek bir tür hadoop tabanlı olay günlüğü kullanılarak verilir
Sebastien Lorber

6
@Jay: Bu konuya ilgiyi yenilediğim için, lütfen Kafka'nın belirli bir süre sonra yayınlanan mesajlarının süresinin dolması için tasarlanmış gibi göründüğünden biraz bahsedebilir misiniz ? Kafka'yı bir olay kaynağı olarak kullanıyorsanız, mesajlar süresiz olarak saklanmalıdır. Muhtemelen yapılandırılabilir, ancak bu bir sorun teşkil eder mi?
Geert-Ocak

2
Kafka ve etkinlik mağazası arasında herhangi bir karşılaştırma var mı? Özellikle Projeksiyon adı verilen olay mağazasında FRP'ye odaklanmayı seviyorum. Kafka / Samza'da böyle bir şey var mı?
CMCDragonkai

4
Ben de @ Geert-Jan'ın Jay'e sorusuyla ilgileniyorum. Kafka, etki alanı toplamı başına bir olay akışına (konu) ihtiyaç duyduğu için işlemsel tarafın kaynağı olan gerçek olay için uygun değildir (milyonları düşünün). Bununla birlikte, örneğin GetEventStore'dan olayların beslenmesi için idealdir. Ama bu sadece sonsuz miktarda tutulan olaylarla (bizim durumumuzda) işe yarayacak ve birkaç kısa yorumun yanı sıra, bu Kafka'nın desteklenen bir kullanım durumu gibi görünmüyor mu? Burada yanıldım mı? Örneğin Samza, yalnızca iki senaryo olduğunu varsayar: zamana dayalı saklama veya anahtar tabanlı saklama. Başkaları da var ..
Stephen Drew

3
@eulerfx Kafka'yı olay kaynaklı sistem için depolama alanı olarak kullanmak istediğimizi varsayarsak, iyimser kilitleme / eşzamanlılık nasıl uygulanmalıdır?
Krzysztof Branicki

51

Bu KG'ye geri gelmeye devam ediyorum. Ve mevcut cevapları yeterince incelikli bulamadım, bu yüzden bunu ekliyorum.

TL; DR. Etkinlik kaynağı kullanımınıza bağlı olarak Evet veya Hayır.

Farkında olduğum iki temel olay kaynaklı sistem vardır.

Akışaşağı olay işlemcileri = Evet

Bu tür bir sistemde, olaylar gerçek dünyada meydana gelir ve gerçekler olarak kaydedilir. Ürün paletlerini takip etmek için depo sistemi gibi. Temelde çelişen bir olay yoktur. Yanlış da olsa her şey zaten oldu. (Palet 123456, A kamyonuna konuldu, ancak B kamyonu için planlandı.) Daha sonra gerçekler, raporlama mekanizmaları yoluyla istisnalar için kontrol edilir. Kafka, bu tür aşağı akış, olay işleme uygulaması için çok uygun görünüyor.

Bu bağlamda Kafka halkının onu neden bir Olay Tedarik çözümü olarak savundukları anlaşılabilir. Örneğin, tıklama akışlarında zaten nasıl kullanıldığına oldukça benzer. Bununla birlikte, Etkinlik Sağlama terimini (Akış İşleme'nin aksine) kullanan kişiler muhtemelen ikinci kullanıma atıfta bulunmaktadır ...

Uygulama kontrollü gerçeğin kaynağı = Hayır

Bu tür bir uygulama, iş mantığından geçen kullanıcı istekleri sonucunda kendi olaylarını bildirir. Kafka bu durumda iki ana nedenden dolayı iyi çalışmıyor.

Varlık izolasyon eksikliği

Bu senaryo, belirli bir varlık için olay akışını yükleyebilmelidir. Bunun ortak nedeni, iş mantığının isteği işlemek için kullanması için geçici bir yazma modeli oluşturmaktır. Bunu yapmak Kafka'da pratik değildir. Varlık başına konu kullanmak buna izin verebilir, ancak bunun binlerce veya milyonlarca varlık olabileceği durumlarda başlatıcı olmamasıdır. Bu, Kafka / Zookeeper'daki teknik sınırlardan kaynaklanmaktadır.

Geçici bir yazma modelini bu şekilde kullanmanın ana nedenlerinden biri, iş mantığı değişikliklerini ucuz ve dağıtımı kolay hale getirmektir.

Bunun yerine Kafka için tür başına konu kullanılması önerilir, ancak bu, yalnızca tek bir varlığın etkinliklerini almak için bu türdeki her varlık için olayların yüklenmesini gerektirir . Hangi olayların hangi varlığa ait olduğunu günlük konumuna göre söyleyemeyeceğinizden. Bilinen bir günlük konumundan başlamak için Anlık Görüntüler'i kullansanız bile , bu kaybolacak önemli sayıda olay olabilir.

Çatışma tespiti eksikliği

İkinci olarak, kullanıcılar aynı varlığa karşı eşzamanlı istekler nedeniyle yarış koşulları oluşturabilir. Çatışan olayları kaydetmek ve olaydan sonra bunları çözmek oldukça istenmeyen bir durum olabilir. Bu nedenle, çelişen olayları önleyebilmek önemlidir. İstek yükünü ölçeklendirmek için, koşullu yazma işlemlerini kullanarak yazma çakışmalarını önlerken vatansız hizmetlerin kullanılması yaygındır (yalnızca son varlık etkinliği #x ise yazma). Aka İyimser Eşzamanlılık. Kafka iyimser eşzamanlılığı desteklemiyor. Konu düzeyinde desteklese bile, etkili olabilmek için varlık düzeyine kadar inmesi gerekir. Kafka'yı kullanmak ve çakışan olayları önlemek için, uygulama düzeyinde durum bilgisi olan, seri hale getirilmiş bir yazar kullanmanız gerekir. Bu önemli bir mimari gereklilik / kısıtlamadır.

Daha fazla bilgi


Yorum başına güncelleme

Yorum silindi, ancak soru şöyleydi: insanlar olay depolama için ne kullanıyor?

Çoğu insan kendi olay depolama uygulamasını mevcut bir veritabanının üzerine yuvarlıyor gibi görünüyor. Dahili arka uçlar veya bağımsız ürünler gibi dağıtılmamış senaryolar için, SQL tabanlı bir olay deposunun nasıl oluşturulacağı iyi belgelenmiştir . Ve çeşitli veri tabanlarının üstünde kütüphaneler mevcuttur. Bu amaçla inşa edilmiş EventStore da var .

Dağıtılmış senaryolarda, birkaç farklı uygulama gördüm. Jet Panther projesi dinleyicileri bilgilendirmek için Feed Değiştir özelliğiyle Azure CosmosDB'yi kullanır . AWS'de duyduğum bir diğer benzer uygulama, dinleyicileri bilgilendirmek için Akış özelliği ile DynamoDB'yi kullanmaktır. Bölüm anahtarı, muhtemelen en iyi veri dağıtımı için (aşırı sağlama miktarını azaltmak için) akış kimliği olmalıdır. Bununla birlikte, Dinamo'da akışlar arasında tam bir tekrar yapmak pahalıdır (okuma ve maliyet açısından). Bu impl, Dynamo Streams'in olayları S3'e dökmesi için de kuruldu. Yeni bir dinleyici çevrimiçi olduğunda veya mevcut bir dinleyici tam bir yeniden çalma istediğinde, ilk önce S3'ü okur.

Şu anki projem çok kiracılı bir senaryodur ve Postgres'in üzerine kendi senaryomu attım. Citus gibi bir şey ölçeklenebilirlik için uygun görünüyor ve tentant + akışı ile bölünüyor.

Kafka dağıtılmış senaryolarda hala çok faydalıdır. Her hizmetin olaylarını diğer hizmetlere göstermek önemsiz bir sorundur. Bir etkinlik mağazası genellikle bunun için inşa edilmemiştir, ancak tam olarak Kafka'nın yaptığı şey budur. Her hizmetin kendi iç gerçeği vardır (olay depolama veya başka türlü olabilir), ancak Kafka'yı "dışarıda" neler olduğunu bilmek için dinler. Hizmet ayrıca Kafka'ya hizmetin yaptığı ilginç şeylerin "dışını" bildirmek için etkinlikler de gönderebilir.


1
@Dominik Güncelleme bölümünde EventStore'dan bahsettim (2. paragraf). Geri dönüp bağlantı kuracağım. Ben denedim ve etkileyici bir perf var. Küçük ekibimiz için, şimdilik başka bir veritabanı sunmamak daha önemli olarak değerlendirildi, dolayısıyla Postgres (bu da görünümler için de kullanılıyor). Gelecekte veya gelecekteki ürünlerde EventStore'a geçmemiz mümkündür.
Kasey Speakman

2
@KaseySpeakman Konular bölümlerle aynı değildir. Bir konunun bir veya daha fazla bölümü vardır. Bölümlerin, belirli bir anda grup başına yalnızca bir tüketici olması garanti edilir. Varlıklarınızı bundan yararlanacak şekilde bölün. Varlık başına bir konuya veya varlık başına bölüme ihtiyacınız yoktur. Bunları, yalnızca aynı varlığa gönderilen tüm komutların aynı bölüme gitmesini garanti edecek şekilde bölümlendirmeniz gerekir.
Andrew Larsson

1
@KaseySpeakman Birçok varlık tek bir bölümü paylaşabilir. Kim her zaman olayları tekrarlayarak varlığın durumunu doğrudan olay deposundan yüklemeniz gerektiğini söyledi? Aynı konsepti, satır satır Greg Young'ın uygulanmasını kesinlikle takip etmeden elde etmenin başka yolları da vardır.
Andrew Larsson

1
@AndrewLarsson Varlık başına bölümleme yapmazsanız, varlık düzeyinde çakışan olayları nasıl önleyeceksiniz? Eşzamanlılık çatışmalarına geri döndüğümüzden, belki de kendi makalenizi ortama veya üretimde olay kaynağı (akış işleme değil) için Kafka'yı nasıl kullandığınıza dair bir şey yayınlamanız gerekir. Bunu türe göre bölümleme ve varlık düzeyinde eşzamanlılık denetimi olmadan nasıl başaracağınız. Okurdum ve eğer katılmazsam yorumları bile trol etmezdim.
Kasey Speakman

2
@KaseySpeakman Kafka'yı bu şekilde kullanmak hiçbir şekilde kolay değildir. Ancak, CQRS ve Etkinlik Kaynaklarını ciddi olarak düşündüğünüz ölçekte iseniz, o zaman işleri kolay bir şekilde yapmayı göze alamayacağınız ölçekte bulunuyorsunuz. Eşzamanlılık modelinizin ölçeğiniz üzerinde doğrudan etkisi vardır - birini rastgele seçmeyin. Ayrıca, HTTP güvenilir bir aktarım değildir ve yine, bu ölçekte iseniz, kayıp ve / veya yinelenen mesaj sorunlarını çözmek için zaman harcayamazsınız. Tüm bunlar, Kafka'yı istemci ve komut işlemcisi arasında kullanarak çözülebilir, ancak evet, karmaşıklık pahasına gelir.
Andrew Larsson

20

Kafka'yı etkinlik mağazası olarak kullanabilirsiniz, ancak iyi bir seçim gibi görünse de bunu önermiyorum:

  • Kafka en az bir kez teslimat garantisi veriyor ve etkinlik mağazasında kaldırılamayan kopyalar var. Güncelleme: Burada Kafka ile neden bu kadar zor olduğunu ve nihayet bu davranışa nasıl ulaşılacağıyla ilgili en son haberleri okuyabilirsiniz: https://www.confluent.io/blog/exactly-once-semantics-are-possible-heres-how -apache-kafka-does-it /
  • Değişmezlik nedeniyle, uygulama geliştiğinde ve olayların dönüştürülmesi gerektiğinde olay deposunu manipüle etmenin bir yolu yoktur (elbette upcasting gibi yöntemler vardır, ancak ...). Bir zamanlar asla etkinlikleri dönüştürmeniz gerekmediğini söyleyebilir, ancak bu doğru bir varsayım değildir, orijinalin yedeğini aldığınız bir durum olabilir, ancak bunları en son sürümlere yükseltirsiniz. Olay güdümlü mimarilerde bu geçerli bir gerekliliktir.
  • Varlıkların / kümelerin anlık görüntülerini kalıcı hale getirecek yer yoktur ve yeniden oynatma yavaşlar ve yavaşlar. Anlık görüntüler oluşturmak, olay deposu için uzun vadeli perspektifte yer almalıdır.
  • Verilen Kafka bölümleri dağıtılır ve veritabanlarıyla karşılaştırıldığında yönetilmesi ve yedeklenmesi zordur. Veritabanları basittir :-)

Yani, seçiminizi yapmadan önce iki kez düşünürsünüz. Uygulama katmanı arayüzleri (izleme ve yönetim), SQL / NoSQL mağazası ve aracı olarak Kafka'nın bir arada olduğu etkinlik deposu, tam özellik tam çözüm oluşturmak için Kafka'nın her iki rolü de bırakmasından daha iyi bir seçimdir.

Etkinlik mağazası, etkinlik odaklı mimaride Olay kaynağı, CQRS, Sagas ve diğer kalıpları uygulamak ve yüksek performansta kalmak konusunda ciddi iseniz Kafka'nın sunabileceğinden daha fazlasını gerektiren karmaşık bir hizmettir.

Cevabımı sorgulamaktan çekinmeyin! Çok sayıda üst üste binme yeteneğine sahip favori komisyoncunuz hakkında söylediklerimi beğenmeyebilirsiniz, ancak yine de Kafka, etkinlik mağazası olarak tasarlanmadı, ancak aynı zamanda hızlı üreticileri ve yavaş tüketici senaryolarını ele almak için aynı zamanda yüksek performanslı komisyoncu ve tampon olarak tasarlandı, Örneğin.

Olası sorunlar hakkında daha fazla bilgi edinmek için lütfen eventuate.io mikro hizmet açık kaynak çerçevesine bakın: http://eventuate.io/

8 Şubat 2018 itibariyle güncelleme

Yorumlardan yeni bilgiler eklemiyorum, ancak bu yönlerden bazılarını kabul ediyorum. Bu güncelleştirme, mikro hizmet etkinliğine dayalı platform için bazı öneriler hakkında daha fazla bilgi içerir. Mikro hizmet sağlam tasarımı ve genel olarak mümkün olan en yüksek performans konusunda ciddi iseniz, size ilginizi çekebilecek birkaç ipucu vereceğim.

  1. Bahar kullanmayın - harika (çok fazla kullanıyorum), ama aynı zamanda ağır ve yavaş. Ve hiç de mikro hizmet platformu değil. Bu sadece bir çerçeve (bunun arkasında çok fazla iş ..) yardımcı olmak için bir çerçeve. Diğer çerçeveler "sadece" hafif REST veya JPA veya farklı odaklanmış çerçevelerdir. Muhtemelen saf Java köklerine geri dönen sınıfının en iyisi açık kaynaklı eksiksiz mikro hizmet platformunu öneriyorum: https://github.com/networknt

Performansı merak ediyorsanız, kendinizi mevcut kıyaslama paketi ile karşılaştırabilirsiniz. https://github.com/networknt/microservices-framework-benchmark

  1. Kafka'yı hiç kullanma :-)) Yarı şaka. Yani Kafka harika olsa da, başka bir broker merkezli sistem. Geleceğin aracısız mesajlaşma sistemlerinde olduğunu düşünüyorum. Şaşırmış olabilirsiniz ama Kafka sistemlerinden daha hızlı var :-), elbette daha düşük seviyeye inmelisiniz. Chronicle'a bak.

  2. Event store için, büyük hacimlerde yüksek performanslı zaman çizelgeleri veri işlemesine (olaylar zaman çizelgeleri) odaklanan TimescaleDB adlı üstün Postgresql uzantısını öneriyorum. Tabii ki CQRS, Olay kaynağı (tekrar oynatma vb. Özellikler), Postgres'i düşük depolama alanı olarak kullanan kutunun dışında light4j çerçevesinde oluşturulmuştur.

  3. Mesajlaşma için Chronicle Queue, Map, Engine, Network'e bakmayı deneyin. Bu eski moda broker merkezli çözümlerden kurtulun ve mikro mesajlaşma sistemi (gömülü olan) ile gidin. Chronicle Queue aslında Kafka'dan bile daha hızlı. Ancak tüm bunların tek bir çözümde olmadığını kabul ediyorum ve aksi takdirde Enterprise sürümü (ücretli) satın alıp satın almanız gerekiyor. Sonunda Chronicle'dan inşa etme çabası, Kafka kümesini koruma yükünü kaldırarak kendi mesajlaşma katmanınıza ödenecektir.


İlginç görünüm. Birkaç nokta üzerinde durmak ister misiniz? > Kafka en az bir kez teslimatı garanti eder ve etkinlik deposunda kaldırılamayan kopyalar vardır. Görünüşe göre tam olarak bir kez teslimat gibi bir şey var. afaik (ve bundan eminim) dağıtılmış bir sistemde böyle bir şey yok. 2) 2. noktanıza gelince: klasik (olay kaynağı / dddd) okulu, olayların doğası gereği değişmez olduğudur. Yani: oldular, geçmişi değiştirmenin bir yolu yok. Onları geriye dönük olarak değiştirmenin asıl kullanımı nedir? Teşekkürler!
Geert-Ocak

1.) her mesaj bir kez ve sadece bir kez işlenmesini sağlamak için Hazelcast. 2.) Hizmet kodunda _V2 gibi bir şey sevmiyorum, bu yüzden ya eski olayları yeni sürümlerine arşivlemek ve yeniden oluşturmak için yedekleyeceksiniz (hala orijinal gerçeğe sahipsiniz) ya da bu işlevselliği doğrudan Olay'a gizleyebilir / oluşturabilirsiniz Anlık görüntü işlevselliğini saklayın, böylece tek bir yayın noktası vardır -> olay deposu. Bunun için çözümleriniz neler?
kensai

1) tüketici üzerinde en az bir kez + idempotence. Yani: etkinliğin görülüp görülmediğini kontrol edin. Eğer öyleyse atlayın. Ya da daha iyisi, idempotent eylemler yapın. Tabii ki, bu her zaman mümkün değildir. 2) Sürüm etkinliklerine hiç ihtiyaç duymadım. Olaylara her zaman gerçeğin kaynağı olarak davranıyorum ve onlara ihtiyaç duyacağım tüm bilgileri dahil ediyorum. Bunu yaparken, bir olay hakkında farklı bir olay yapısına ve / veya verilere ihtiyaç duyduğum bir durumla hiç karşılaşmadım. Ama belki de ymmv. Güncellenmiş etkinliklere sahip olmanız gereken durumları duymakla ilgileniyorsunuz.
Geert-Ocak

1.) seçim yolu olabilir .. 2.) o zaman veri yapıları başından itibaren mükemmel :-) şanslısın, haha. Mevcut projemde buna ihtiyacım olmayabilir, ancak eventuate.io çatalları üzerinde bütün bir platform inşa ediyorum, sadece hafif olay 4j'den alınan bazı yüksek performanslı JEE yaklaşımları ile birleşti ... tüm bu tartışma stackoverflow hakkındaki yorumlar için yer değil , ancak daha derin dalışlarla ilgileniyorsanız, bu makaleyi tavsiye ederim: leanpub.com/esversioning/read
kensai

1
Kafka, bu arada tam olarak bir kez teslimatı destekliyor. Bullet 1'i güncelleyin
OneCricketeer

8

Evet, Kafka'yı etkinlik mağazası olarak kullanabilirsiniz. Özellikle , olaylarınızı sorgulayabileceğiniz birikmiş bir duruma dönüştürmek için Kafka-yerli bir yol sağlayan Kafka Streams'in tanıtımı ile oldukça iyi çalışıyor .

ilgili olarak:

Yeni abonelerin sistemden sonra kayıt olmalarını sağlayan olay günlüğünü yeniden oynatma yeteneği.

Bu zor olabilir. Bunu burada ayrıntılı olarak ele aldım: https://stackoverflow.com/a/48482974/741970


0

Evet, Kafka özellikle CQRS olay kaynağı modelinde iyi çalışıyor, ancak konular için TTL'ler ayarlarken dikkat ettiniz ve Kafka'nın bu model için tasarlanmadığını her zaman aklınızda bulundurun, ancak çok iyi kullanabiliriz.


0

Sanırım Kafka'ya destekleriyle birlikte akson çerçevesine bakmalısın

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.