【问题标题】:How should I setup Kafka paritions vs topics in my setup我应该如何在我的设置中设置 Kafka 分区与主题
【发布时间】:2020-05-03 10:35:32
【问题描述】:

我希望使用 Kafka 作为我的事件存储/订单流,这里有一些属性:

  • 我有两个地区需要满足:伦敦和纽约
  • 从伦敦开始的订单很可能有更多来自伦敦的事件(更新),但是我们确实需要支持跨区域读取/写入(即对于在伦敦开始的事件,写入可以来自纽约)
  • 业务将受益于较低的延迟,因此应尽量减少伦敦和纽约之间的通信,反之亦然
  • 订单的有效期为 24 小时,此时可以从事件日志中存档,因为我们不再需要它。
  • 需要弹性,如果伦敦 Kafka 工厂出现故障,我应该能够故障转移到纽约,反之亦然。
  • 事件的顺序需要在所有地区保持一致
  • 订单数量仅为每 24 小时 1000 件。

所以我正在尝试正确设置 Kafka,这样我就可以最大限度地减少我必须在 Kafka 之外做的工作量,所以我的担忧/问题是:

  1. 起源区域似乎是一个自然的分区键,但据我所知,我从分区主题中没有任何收获...我可以只有 2 个主题,一个用于伦敦,一个用于纽约?我说的对吗?
  2. 据我所知,为了能够进行故障转移,我需要设置两个单独的集群并使用镜像制造商跨区域同步两个主题。但这意味着我需要在我的应用程序中构建逻辑,以便它们将事件发布到正确的集群 - 我理解正确吗?有什么方法可以设置 Kafka,所以我不必这样做,我只需连接到本地集群并读取/写入,让集群负责将事件路由到的位置

【问题讨论】:

    标签: apache-kafka


    【解决方案1】:

    您可能想查看代理的"rack awareness" 配置,它有助于机架感知分区复制。这主要用于改善跨可用区的流量,您可以阅读更多here. 它的要点是,您的消费者可以从“最近的”副本中获取记录。在您的情况下,假设您运营一个跨区域集群,那么位于伦敦的消费者可能只会从伦敦的经纪人那里获取数据。

    关于延迟:如果您没有任何亚秒级要求,我强烈建议您运行单个集群而不是两个集群。东海岸和英国之间的延迟应该不会太糟糕。保持简单,Kafka 非常健壮,可以处理单个集群中的大多数故障(例如,代理死亡)。从一个位置的单个集群开始,您仍然可以添加第二个集群并使用镜像制造商或专用服务迁移您的数据。

    这也会导致您在每个地区都没有两次“相同”主题。根据内容而不是位置来区分主题。否则,在迁移用于订单的数据格式时,您将获得很多乐趣。您希望尽可能灵活地应对未来的变化。

    【讨论】:

    • 处理来自同一区域的事件时,我确实需要亚秒级的延迟,这会提示问题:)。因此,如果我有 1 个集群、2 个机架名称为“London”的代理和 2 个机架名称为“New York”的代理。单个主题,按区域划分(区域是内容的一部分!),具有一个同步副本和两个异步副本。是否可以在可能的情况下强制给定分区的领导者(您写入的位置)位于特定机架上?
    • 我不能 100% 确定您是否可以强制写入哪个代理,AFAIK 机架设置更多的是偏好/尽力而为的属性。如果低延迟是一个如此紧迫的问题,我不建议选择 Kafka。 RabbitMQ 或 Redis PubSub 之类的东西可能是更好的解决方案,甚至可能只是 Postgres。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-07-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-02-14
    相关资源
    最近更新 更多