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,我们也会在 Telegram 回复您。
WhatsApp 可选
格式:+国家代码 + 号码(例如:+86XXXXXXXXX)。

点击按钮即表示您同意数据处理。