文章翻译|Benefits of splitting an Apache Kafka topic into smaller topics

17 阅读2分钟

文章链接:kafkaide.com/learn/benef…

概述

将topic拆分成更小的topic可能帮助我们提高性能和简化管理,尤其是有多个消费者消费同一个topic时。通过拆分topic,可以确保每个消费者只读取与自己相关的数据,这可以提高性能并减少负载(这里的减少负载应该是减少消费者的,大概)

反思下自己的业务场景是否让消费者过滤掉了80%的消息,或者需要一个消费者订阅很多个主题并综合数据集

怎么判断kafka topic 是否过于臃肿

确认kafka topic 是否过于臃肿并不能犯本本主义的错误,需要综合考虑多种情况,具体问题具体分析,比如每秒的消息数量,消息的内容大小,消费者的数量。当我们遇到延迟或性能问题的时候,可能是因为topic过于臃肿。

让消费更方便

过多的topic也会增加我们维护的难度。用户可能需要一个文档确定自己需要订阅哪些主题,当用户需要某个topic的额外字段,我们是否也要更改其他的topic。

如果有个跨多个topic的消息需要重新发送,当这条消息在一个topic中被重写,下游的topic也需要重写多次。

一个庞大的topic会让 kafka broker超载么?

不会,需要考虑分区的数量,而不单单看topic的大小,一个具有多个分区的大型topic比多个较小的topic更具备拓展性。

无论是一个大topic还是多个小topic,每个topic的数量最好和集群中的节点数量保持一致,这样每个分区的领导者都可以均匀的分布在每个节点,避免一些节点出现网络拥塞。

成为一个以10M/s的写入的单分区领导者和一个以1M/s写入的多分区领导者是不同的情况。

使用小topic的好处

当我们使用较小topic时,可以有效降低网络流量,因为每个消费者只读取和自己有关的消息,可以提高性能并减少网络负载。

如果要保留主topic,需要保证broker里有足够的存储空间,因为消息被重复存储了,可以通过配置保留策略来控制数据在每个topic的保留时间。

乱序问题

拆分topic时需要考虑是否要求所有消息顺序,如果需要还是不要拆分的好。

为用户的不同操作设置不同的topic可能会有最终一致性问题,最好别这么干。

总结

拆分成小topic可以提高性能降低网络负载,但也增加了存储压力且难以维护。