[英]Splitting Kafka into separate topic or single topic/multiple partitions
与往常一样,看到拆分方法相对于其他方法的好处有点令人困惑。
Topic 2 -> P0
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 Streams的联接等。
我认为可以轻松地与在数据库中自动创建表进行比较。 在您的开发环境中这样做很方便,但是您永远都不想在生产中发生它。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.