1.消费端
Kafka会为每个Consumer Group保留一些metadata信息——当前消费的消息的position,也即offset。这个offset是由consumer控制的,正常情况下,consumer会在消费完一条消息后递增该offset,consumer也可以把offset设置为一个较小的值重新消费一些消息。因为offset由consumer控制,所以broker是无状态的,不需要记录哪些消息被哪些consumer消费过,也不需要通过broker去保证同一个consumer group只有一个consumer能消费某一条消息,因此不需要锁机制,这为Kafka的高吞吐率提供了有力保障。
2.生产端
Producer发送消息到broker时,会根据Paritition机制选择将其存储到哪一个Partition。如果Partition机制设置合理,所有消息可以均匀分布到不同的Partition里,这样就实现了负载均衡。如果一个Topic对应一个文件,那这个文件所在的机器I/O将会成为这个Topic的性能瓶颈,而有了Partition后,不同的消息可以并行写入不同broker的不同Partition里,极大的提高了吞吐率。
网友评论