java - 如何设计用于从 Kafka 获取客户端事件的 API?
问题描述
我考虑架构模式,当我的服务的每个客户端都有自己的 kafka 消费者时。
例如,有events
一些具有一些副本因子和一些分区数的主题,我将其用于可扩展性。给定客户端的所有事件都属于一个分区(我clientId
用于分区键)。
每个客户都有自己的offset
. 所以我的 API 允许用来offset
获取客户端事件。
系统设计好不好?或者获取事件的正确 API 设计是什么?
解决方案
这个问题有点模糊,所以让我在提出建议之前先陈述我的猜测。
- 发布事件的单个主题。
- 这些事件必须通知某些客户(他们是移动应用程序还是什么?)
- 当前设计每个客户端有一个消费者,这意味着至少为一个客户端分配了一个线程。
对当前设计的担忧
- 随着用户数量的增加,线程的数量也必须增加,这意味着该方法不能线性扩展。成本随着用户数量的增加而增加。
- 如果消费者线程失败了怎么办?这可能会导致通知客户端失败。
提议
- 使用 Kstreams 消费。将 kstreams 视为比消费者 api 更高级别的消费 api。
- 使用 numthreads 属性,您可以配置线程数。因此,单个 KStream 将充当消费者池。
- 有一个路由逻辑来查找客户端并通知。
- 权衡:此路由逻辑增加了延迟。
推荐阅读
- ocaml - 从'选项中提取原始'变量
- python - jquery 和 python flask def 之间没有绑定
- hashicorp-vault - 如何正确获取 HashiCorp Vault 政策?
- c# - 在控制器或客户端中搜索
- android - 如何使一个目的地可以从多个不同的目的地导航?
- excel - 如何引用范围地址中的单个单元格,例如“$A$2,$C$2,$E$2”
- java - 抽象有什么用?
- java - 不同 Summands 问题的贪心算法
- java - 如何使用“departure_time”作为参数通过距离矩阵 api 将未来时间传递给 HTTP 请求
- c++ - 当我尝试在启用推理引擎的情况下编译 OpenCv 时,出现错误