apache-kafka - 我应该如何在我的设置中设置 Kafka 分区与主题
问题描述
我希望使用 Kafka 作为我的事件存储/订单流,这里有一些属性:
- 我有两个地区要满足:伦敦和纽约
- 在伦敦开始的订单很可能有更多的事件(更新)来自伦敦,但是我们确实需要支持跨区域的读/写(即对于在伦敦开始的事件,写可以来自纽约)
- 业务将受益于较低的延迟,因此应尽量减少伦敦向纽约的写入,反之亦然
- 订单的生命周期为 24 小时,此时可以从事件日志中存档,因为我们不再需要它。
- 需要弹性,如果伦敦 Kafka 工厂出现故障,我应该能够故障转移到纽约,反之亦然。
- 事件的顺序需要在所有地区保持一致
- 订单号仅为每 24 小时 1000 件。
所以我试图让我的卡夫卡设置正确,这样我就可以最大限度地减少我必须在卡夫卡外部做的工作量,所以我的担忧/问题是:
- 起源区域似乎是一个自然的分区键,但据我所知,我从分区主题中没有任何收获......我可以只有 2 个主题,一个用于伦敦,一个用于纽约?我对么?
- 据我所知,为了具备故障转移的能力,我需要设置两个单独的集群并使用镜像制造商跨区域同步两个主题。但这意味着我需要在我的应用程序中构建逻辑,以便它们将事件发布到正确的集群 - 我理解正确吗?有什么方法可以设置 Kafka,所以我不必这样做,我只需连接到本地集群并读/写,让集群负责将事件路由到的位置
解决方案
您可能想查看代理的“机架感知”配置,这有助于机架感知分区复制。这主要用于改善跨可用区的流量,您可以在此处了解更多信息。它的要点是,您的消费者可以从“最近的”副本中获取记录。在您的情况下,假设您操作一个跨区域集群,位于伦敦的消费者可能只会从伦敦的经纪人那里获取数据。
关于延迟:如果您没有任何亚秒级要求,我强烈建议您运行单个集群而不是两个集群。东海岸和英国之间的延迟应该不会太糟糕。保持简单,Kafka 非常健壮,可以处理单个集群中的大多数故障(例如,代理死亡)。从一个位置的单个集群开始,您仍然可以添加第二个集群并使用镜像制造商或专用服务迁移您的数据。
这也将导致您在每个区域中没有两次“相同”主题。根据内容而不是位置来区分主题。否则,在迁移用于订单的数据格式时,您将获得很多乐趣。您希望尽可能灵活地应对未来的变化。
推荐阅读
- android - 虽然更新状态无法在渲染中绑定更新的值
- angular - 资源上下文中使用的不安全值 (iframe)
- python - 在数据框中使用熊猫在随机位置插入特殊字符
- google-sheets - 如何获取最新值,只要最新状态不符合工作表上的条件(通过查询公式)
- swift - SwiftUI 和 USerDefaults:更新没有 ForEach 的变量
- gcc - 使用 bitbake 构建的二进制文件没有符号表
- python - 有没有办法用 sqlalchemy 连接查询?
- python - 为什么装饰器显示中的内部函数名称?
- html - 有没有办法超链接需要的图像
<p style="text-align: center"> <img class="alignnone size-full wp-image-759 aligncenter" /><img src="https://steamboateramuseum.or
- python - 按 pd 数据帧中的分位数对行进行排序,并在每个分位数中查找初始数据帧的索引