像往常一样,看到拆分方法优于其他方法的好处有点令人困惑。
- 我看不出拥有之间的区别/利弊
Topic1 -> P0
和Topic 2 -> P0
- 一个消费者从 2个
Topic 1 -> P0, P1
主题或单个主题/2 个分区中拉取,同时P0
将P1
持有不同的事件类型或实体。
你唯一的好处我可以看到如果另一个消费者需要主题 2 数据,那么它很容易消费
- 关于主题自动生成,这种方式背后有什么好处,或者一段时间后它会失控吗?
谢谢
像往常一样,看到拆分方法优于其他方法的好处有点令人困惑。
Topic1 -> P0
和Topic 2 -> P0
Topic 1 -> P0, P1
P0
将P1
持有不同的事件类型或实体。你唯一的好处我可以看到如果另一个消费者需要主题 2 数据,那么它很容易消费
谢谢
我想说这个决定取决于多种因素。
逻辑/关注点分离:您可以根据您尝试实现的逻辑来决定是否在多个分区上使用多个主题。通常,您需要针对不同实体的不同主题。例如,假设您想要流式传输users
和companies
. 创建具有两个分区的单个主题没有多大意义,第一个分区保存第一个分区users
,第二个保存companies
. 此外,为多个分区设置一个主题将不允许您实现例如消息排序,users
这只能使用键控消息来实现(具有相同键的消息放置在同一个分区中)。
主机存储能力:一个分区必须适合主机的存储,而一个主题可以通过将其分区到多个分区来分布在整个 Kafka 集群中。Kafka Docs可以更清楚地说明这一点:
日志中的分区有多种用途。首先,它们允许日志扩展到超出单个服务器的大小。每个单独的分区必须适合托管它的服务器,但一个主题可能有很多分区,因此它可以处理任意数量的数据。其次,它们充当并行单元——稍后会详细介绍。
吞吐量:如果你有高吞吐量,那么为每个实体创建不同的主题并将它们分成多个分区以便多个消费者可以加入消费者组更有意义。不要忘记 Kafka 中的并行级别是由分区的数量(显然是活跃的消费者)定义的。
保留策略: Kafka 中的消息保留适用于分区/段级别,您需要确保您所做的分区与您选择的所需保留策略相结合将支持您的用例。
现在谈到您的第二个问题,我不确定您的要求是什么以及这个问题与第一个问题有何关系。当生产者尝试向不存在的 Kafka 主题写入消息时,如果auto.create.topics.enable
设置为,它将自动创建该主题true
。否则,主题将不会被创建,您的生产者将失败。
auto.create.topics.enable
: 在服务器上启用自动创建主题
同样,此决定应取决于您的要求和所需的行为。通常,auto.create.topics.enable
应false
在生产环境中设置为以降低任何风险。
只需在 Giorgos 答案之上添加一些内容:
通过选择第二种方法而不是第一种方法,您将失去 Kafka 提供的许多功能。其中一些功能可能是:每个代理的数据平衡、删除主题、消费者组、ACL、与 Kafka 流的连接等。
我认为这个标志可以很容易地与在数据库中自动创建表进行比较。在您的开发环境中这样做很方便,但您永远不希望它在生产中发生。