【问题标题】:Splitting Kafka into separate topic or single topic/multiple partitions将 Kafka 拆分为单独的主题或单个主题/多个分区
【发布时间】:2020-01-01 20:01:43
【问题描述】:

像往常一样,看到拆分方法相对于其他方法的好处有点令人困惑。

  1. 我看不出有
    • Topic1 -> P0Topic 2 -> P0
    • 超过Topic 1 -> P0, P1
      消费者从 2 个主题或单个主题/2 个分区中拉取数据,而 P0P1 将保存不同的事件类型或实体。

你唯一的好处我可以看到如果另一个消费者需要主题 2 数据,那么它很容易消费

  1. 关于主题自动生成,这种方式有什么好处,或者一段时间后就会失控?

谢谢

【问题讨论】:

    标签: apache-kafka kafka-topic kafka-partition


    【解决方案1】:
    1. 我会说这个决定取决于多种因素;

      • 逻辑/关注点分离:您可以根据您尝试实施的逻辑决定是否在多个分区上使用多个主题。通常,您需要针对不同实体的不同主题。例如,假设您要流式传输 userscompanies。创建具有两个分区的单个主题没有多大意义,其中第一个分区保存users,第二个保存companies。此外,为多个分区设置一个主题将不允许您实现例如users 的消息排序只能使用键控消息来实现(具有相同键的消息放置在同一分区中)。

      • 主机存储能力:一个分区必须适合主机的存储,而一个主题可以通过将其分区到多个分区来分布在整个 Kafka 集群中。 Kafka Docs 可以进一步说明这一点:

        日志中的分区有多种用途。首先,他们允许 日志以超出适合单个服务器的大小。每个 单个分区必须适合托管它的服务器,但是一个主题 可能有许多分区,因此它可以处理任意数量的数据。 其次,它们充当并行单元——稍后会详细介绍。

      • 吞吐量:如果您有高吞吐量,则为每个实体创建不同的主题并将它们分成多个分区以便多个消费者可以加入消费者组更有意义。不要忘记 Kafka 中的并行级别是由分区的数量(显然是活跃的消费者)定义的。

      • 保留政策: Kafka 中的消息保留适用于分区/段级别,您需要确保您所做的分区与您选择的所需保留政策相结合将支持您的用例。

    2. 现在谈到您的第二个问题,我不确定您的要求是什么以及这个问题与第一个问题有何关系。当生产者尝试向不存在的 Kafka 主题写入消息时,当 auto.create.topics.enable 设置为 true 时,它将自动创建该主题。否则,主题将不会被创建,您的生产者将失败。

      auto.create.topics.enable: 在服务器上启用自动创建主题

    同样,此决定应取决于您的要求和所需的行为。通常,在生产环境中,auto.create.topics.enable 应设置为false,以降低任何风险。

    【讨论】:

    • 关于关注点分离,假设一个服务将依赖于userscompanies,如果它们在2个不同的主题上,如何确保它们的并发性?还假设一个持有 users 主题的经纪人宕机了
    【解决方案2】:

    只是在 Giorgos 回答的基础上添加一些东西:

    1. 选择第二种方法而不是第一种方法,您将失去 Kafka 提供的许多功能。其中一些功能可能是:每个代理的数据平衡、删除主题、消费者组、ACL、与 Kafka 流的连接等。

    2. 我认为这个标志可以很容易地与在数据库中自动创建表进行比较。在您的开发环境中这样做很方便,但您永远不希望它在生产中发生。

    【讨论】:

    • 非常感谢,但是如果选择第二种方法会失去消费者群体的能力,您能否解释一下?
    • 消费者群体如何运作?来自同一组的每个消费者都被分配到同一个主题,但每个消费者必须分配到不同的分区。基本上,来自同一个消费者组的两个消费者不能从同一个分区消费。这就是为什么nb之间存在严格的相关性。消费者组中的分区和消费者。 Nb.of 个分区必须 >= nb。消费者,否则,任何额外的消费者将保持空闲状态。
    猜你喜欢
    • 2019-01-04
    • 2019-10-09
    • 2018-02-16
    • 1970-01-01
    • 2020-05-03
    • 2015-03-05
    • 2016-10-01
    • 1970-01-01
    相关资源
    最近更新 更多