将 Kafka 拆分为单独的主题或单个主题/多个分区

Ahm*_*Din 3 apache-kafka kafka-topic kafka-partition

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

  1. 我看不到两者之间的区别/利弊
    • Topic1 -> P0Topic 2 -> P0
    • Topic 1 -> P0, P1
      从2个主题或单一主题/ 2分区的消费拉动,而P0P1将举行不同的事件类型或实体。

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

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

谢谢

Gio*_*ous 5

  1. 我会说这个决定取决于多种因素;

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

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

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

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

    • 保留策略: Kafka 中的消息保留在分区/段级别上工作,您需要确保与您选择的所需保留策略一起进行的分区将支持您的用例。

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

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

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