GH GambleHub

消息經紀人

1)為什麼消息經紀人

經紀人按時間/速度/可靠性釋放生產者和制造商:
  • 緩沖和平滑峰,逆沖器。
  • 獨立縮放讀/寫。
  • 事件的可觀察性和復制(復制)。
  • 建築模式:活動驅動器,CQRS,活動源,outbox/inbox。

2)基本模型和術語

2.1 Kafka(邏輯模型)

Topik → parties(有序的徽標)→ concumers的正交。
消費者集團:閱讀並行,分期平衡。
按時間/範圍重組;按鍵壓縮。
語義:最小值為at-least-once,在設置時為effectively exactly-once(等效生產商+交易)。
順序:黨內保證。

2.2 NATS(主題/主題,低延遲)

具有層次結構和Weildcarts的主題(「foo」,「foo」。>`).

模式:pub/sub,queue-groups(帶工作分配的粉絲),request-reply(快速RPC)。
Core NATS-短期,超低潛伏期;JetStream-持續性/重生/重播。
順序:通過最佳努力,沒有強有力的全球保證;使用JetStream-在流上排序,但是在發生故障時可能會進行罕見的重新排序。

3)交付語義和一致性

語義學KafkaNATS CoreNATS JetStream
At-most-once稀有(通常不需要)默認值(無確認)可以
At-least-once標準(處理後commit offset)與ack政治標準(ack policy, redelivery)
Exactly once(有效)等效制作人+交易;idempotent sinksn/d在消費者層面上實現(相等性),經紀人不提供像Kafka那樣的交易

異位性和異位性是應用/合成器的責任,即使在Kafka中是「exactly-once」的情況下也是如此。

4)順序,分期付款和鑰匙

Kafka

消息密鑰的選擇將聚會定義→強大的本地順序。
Ключи: `aggregate_id`, `tenant_id`, `order_id`.避免使用熱鍵。
平衡:N批次≈閱讀並發水平。

NATS

在Core中,平衡使queue-group。
在JetStream中,Stream按子項排列;專註於低延遲的寬泛粉絲/粉絲。

5)重生,繼電器與堆肥

Kafka

Retention: `retention.ms/bytes`.

Compaction:存儲「按鍵的最後一個值」(適用於snapshot/keshey/sag)。
Replay:任何制造商可以「推開」正交。

JetStream

Streams: 文件/memori後端,時間存儲策略/字節/消息數。
消費者:pull/push,durable/ephemeral,按主題前綴過濾器。
Replay:重復或讀取從開頭/不像是序列(序列)。

6)交易,outbox和一致性

Kafka

Idempotent Producer (`enable.idempotence=true'):雙重保護。
交易:多個批次的原子記錄+消費者-offsets commit →沒有「漏洞」的閱讀過程寫作模式。
Transactional Outbox:在單個DB 交易中記錄業務事件和outbox行,worker在Kafka中發布。

NATS

沒有Kafka中的「跨流」交易;使用outbox/inbox和Idempotable consumers (keys, dedup stor)。

7) RPC和請求-響應

RPC的kafka不舒服(高超頭,順序/答案更復雜)。使用異步命令/事件。
NATS:非常適合請求回復(miliecunds, corolations, taymouts)。

示例(Go,NATS請求替換):
go resp, err:= nc. Request("profile. get", []byte(`{"id":42}`), 200time. Millisecond)

8)操作和拓撲

8.1 Kafka

集群:經紀人+ZooKeeper(舊版本之前)或KRaft(新元數據)。
復制:跨區域RF≥3、ISR/控制器。
多區域:MirrorMaker 2/Cluster Linking;具有沖突策略的資產或資產。
磁盤/網絡容量:從「throughput × retention × replicas」計數。

8.2 NATS

集群:許多節點,超級集群(地理分布),用於外圍設備/邊緣的leafnodes。
JetStream:在節點集上放置流(放置),復制(R=1..5)。
WAN:可預見的低延遲,輕量級聯合。

9)安全性

Kafka

TLS (mTLS), SASL: SCRAM, OAuthBearer.

ACL到拓撲/組/事務。
靜止加密(OS/驅動器)+網絡策略。

NATS

nkey/JWT身份,帳戶語句,主題ACL。
節點和客戶端之間的mTLS。
租戶隔離(帳戶)+限制。

10)可觀察性和性能指標

Kafka

Брокер: `BytesIn/Out`, `RequestQueue`, `UnderReplicatedPartitions`, GC/FS stats.

Topik/party: 「logEndOffset」, consumer lag(關鍵)。
制片人/制片人:retrai,'batch。size`, `linger.ms`, `fetch.min.bytes",錯誤。
工具:JMX,巡航控制(重新平衡),計劃註冊。

NATS/JetStream

服務器:conn/msgs/sec,RTT,CPU/mem,慢消費者檢測。

JetStream: per stream/consumer — lag, redeliveries, acks, storage bytes.

監視:內置endpoint, nsc/adm-CLI, dashbords。

11)性能和調音

Kafka

大蹦床和'linger。MS提高了通量並壓縮了p99。
壓縮功能(lz4/zstd)可節省網絡/磁盤。
num.按消費者/內核數量分組,但不過量(超頭)。
驅動器:NVMe是首選的,XFS/EXT4 「noatime」。

NATS

小信息,許多化合物是規範;保持queue組「寬」。

JetStream: tune `max_ack_pending`, pull vs push, size of batches.

Backpressure: `FlowControl`, `IdleHeartbeat`, server-side limits.

12)集成模式

Outbox/Inbox(在Kafka和NATS中)。
SAGA:事件編排;「saga_id+step」的祖先。
Change Data Capture (CDC): Debezium → Kafka;在NATS中,是「來自DB觸發器/邏輯的發布者」的模式。
Stream processing: Kafka Streams/Flink/Spark;NATS是第三方處理器/功能,即JetStream消費者。
Dead Letter Queue(DLQ)和retry policy(指數backoff+jitter)。

13)配置示例

13.1 Kafka: topik創作和制作人

bash kafka-topics. sh --create --topic orders \
--partitions 12 --replication-factor 3 \
--config cleanup. policy=delete \
--config retention. ms=604800000 # 7d
properties producer. properties bootstrap. servers=broker:9092 acks=all enable. idempotence=true batch. size=65536 linger. ms=10 compression. type=zstd

13.2 Kafka Streams:等效處理(草圖)

java builder. <String, Order>stream("orders")
.groupByKey()
.aggregate(/... /)
.toStream()
.to("orders-agg");

13.3 NATS JetStream: stream + consumer (nats CLI)

bash nats stream add ORDERS --subjects "orders. " --retention limits \
--storage file --max-bytes 100GB --replicas 3 --discard old

nats consumer add ORDERS ORDERS-WORKERS --filter "orders. created" \
--deliver pull --ack explicit --max-deliver 6 --backoff "1s,5s,30s,2m"

13.4 NATS Request-Reply (Go)

go nc, _:= nats. Connect("tls://nats:4222", nats. Secure(tlsConf))
sub, _:= nc. QueueSubscribe("calc. sum", "workers", func(m nats. Msg) {
//... process...
m. Respond([]byte("42"))
})

14)選擇Kafka vs NATS: 快速地標

需要Kafka →的繼電器、長重建、堆肥、重型流過程。
需要快速的RPC、微觀潛能的粉絲/粉絲、簡單的操作、edge/IoT → NATS (Core)。
我們需要持久性+粉絲出口,但沒有重型「登錄」平臺→ NATS JetStream。
Kafka →嚴格的密鑰和交易順序。

15)容量規劃(簡化)

Kafka

1.帶寬:'inbound_MBps × RF × retention_days × 86400 '→驅動器。

2.分期付款: 「target_concurrency」 ×庫存1。5–2×.

3.網絡:p99+復制+壓縮制作人。

NATS/JetStream

1.消息/秒和平均大小→通過。

2.Retention×replicas → storage.

3.消費者限制(ack-pending,redeliveries),CPU進行序列化。

16)安全操作: 支票單

  • TLS/mTLS打開,秘密輪換。
  • ACL/帳戶/配額(每種配額)。
  • 在消費者,DLQ和帶有噴射器的中繼上的冪等。
  • 監測lag/throughput/錯誤;URP(Kafka),重定向風暴(NATS)上的異常值。
  • Capacity dashboards:分期付款,storage, p99。
  • 節點/區域故障測試,遊戲日,繼電/後退。
  • 已記錄了黨派和計劃密鑰(Schema Registry/JSON Schema)。
  • 還原/復合/TTL政策與合規性一致。
  • 經紀人/客戶版本定期更新;wire協議兼容性已驗證。

17)反模式

熱鍵(所有ID事件)→一個「沸騰」流。硬化/緩沖。
無止境的復仇者→雙重效果。
巨大的消息(MB-十個)→ GC碎片/暫停。將payload存儲在對象中,發送鏈接。
在Kafka中混合RPC和流媒體→復雜的生命周期/順序。
JetStream作為「持久的DWH」 →錯誤的;長期存儲在對象/結柱堆棧中。
沒有DLQ →「有毒」消息無限期旋轉。
被遺忘的重建→磁盤已滿,群集停止。

18) FAQ

Q:在吹笛的結尾可以做「exactly-once」嗎?
答:在實踐中-有效地是:Kafka(偶數生產商+交易)和偶數合成器(鑰匙,upsert)。在NATS中-通過應用程序中的冪等/去勢。

Q: 百萬個小型RPC/秒有什麼選擇?

答:NATS核心:微觀潛能,請求替換,輕連接,queue-groups。

Q:需要堆積和敲擊狀態嗎?
A: Kafka с `cleanup.policy=compact',key=聚合/資源。

問:如何處理滯後?
答:增加批次/經銷商數量,減少加工時間、修理和預處理時間,優化去消毒,垂直強化經紀人/光盤。

Q:多區域和DR?
答:Kafka-MirrorMaker 2/Cluster Linking,與RPO≈sekundy的資產通氣。NATS — supercluster/leafnodes;JetStream鏡像/副本跨區域。

19)結果

Kafka和NATS關閉了不同的模式:Kafka是耐用的事件日誌,高通量,事務性和反射;NATS是用於低延遲,RPC和簡單風扇外部的超輕型輪胎,而JetStream則用於持久性。選擇來自傳遞語義,順序和延續,潛伏期和運營成本。設計密鑰/批次、重構、DLQ和可觀察性-您的事件體系結構將是可預測、可擴展和可靠的。

Contact

與我們聯繫

如有任何問題或支援需求,歡迎隨時聯絡我們。我們隨時樂意提供協助!

Telegram
@Gamble_GC
開始整合

Email 為 必填。Telegram 或 WhatsApp 為 選填

您的姓名 選填
Email 選填
主旨 選填
訊息內容 選填
Telegram 選填
@
若您填寫 Telegram,我們將在 Email 之外,同步於 Telegram 回覆您。
WhatsApp 選填
格式:國碼 + 電話號碼(例如:+886XXXXXXXXX)。

按下此按鈕即表示您同意我們處理您的資料。