kafka中的topic为什么要进行分区

如题所述

若没有分区,一个topic对应的消息集在分布式集群服务组中,就会分布不均匀,即可能导致某台服务器A记录当前topic的消息集很多,若此topic的消息压力很大的情况下,服务器A就可能导致压力很大,吞吐也容易导致瓶颈。 有了分区后,假设一个topic可能分为10个分区,kafka内部会根据一定的算法把10分区尽可能均匀分布到不同的服务器上,比如:A服务器负责topic的分区1,B服务器负责topic的分区2,在此情况下,Producer发消息时若没指定发送到哪个分区的时候,kafka就会根据一定算法上个消息可能分区1,下个消息可能在分区2。当然高级API也能自己实现其分发算法。
温馨提示:内容为网友见解,仅供参考
第1个回答  2017-07-17
若没有分区,一个topic对应的消息集在分布式集群服务组中,就会分布不均匀,即可能导致某台服务器A记录当前topic的消息集很多,若此topic的消息压力很大的情况下,服务器A就可能导致压力很大,吞吐也容易导致瓶颈。 有了分区后,假设一个topic可能分为10个分区,kafka内部会根据一定的算法把10分区尽可能均匀分布到不同的服务器上,比如:A服务器负责topic的分区1,B服务器负责topic的分区2,在此情况下,Producer发消息时若没指定发送到哪个分区的时候,kafka就会根据一定算法上个消息可能分区1,下个消息可能在分区2。当然高级API也能自己实现其分发算法。本回答被提问者采纳
第2个回答  2016-04-13
partitions的设计目的有多个.最根本原因是kafka基于文件存储.通过分区,可以将日志内容分散到多个server上,来避免文件尺寸达到单机磁盘的上限,每个partiton都会被当前server(kafka实例)保存;可以将一个topic切分多任意多个partitions,来消息保存/消费的效率.此外越多的partitions意味着可以容纳更多的consumer,有效提升并发消费的能力
第3个回答  2016-08-17
kafka topic 分区的原因主要是为了并发访问,增大吞吐量。

具体来讲,每一个topic均被分成多个互不重复的partition,其中每个partition均被放在一个或多个broker服务器上,这样就提供了容错。如果数据在不同的patition上,那么他们的访问将可能由不同的broker服务器来完成,这样就实现了并发访问。分区的信息储存在Zookeeper上。

所以,分区是kafka用来提供并发访问控制的一个概念。
第4个回答  2021-02-25

Kafka可以将主题划分为多个分区,根据分区规则会把不同的消息存储在不同的分区上,只要分区规则设计的合理,那么所有的消息将均匀地分布在不同的分区上,这样就实现了负载均衡和 消息的水平扩展。