kafka的关键特征
Posted 笨小孩撸代码
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了kafka的关键特征相关的知识,希望对你有一定的参考价值。
kafka的关键特征
kafka具有近乎实时性的消息处理能力,即使面对海量消息也能够高效地存储信息和查询信息,kafka将消息保存在磁盘中,在其设计理念中并不惧怕磁盘操作,它以顺序读写的方式访问磁盘,从而避免了随机读写磁盘导致的性能瓶颈
kafka支持批量读写消息,并且会对消息进行批量压缩,这样既提高了网络的利用率也提高了压缩效率
kafka支持消息分区,每个分区中的消息保证顺序传输,而分区之间则可以并发操作,这样就提高了kafka的并发能力
kafka也支持在线增加分区,支持在线水平扩展
kafka支持为每个分区创建多个副本,其中只会有一个leader副本负责读写,其他副本只负责与leader副本进行同步,这种方式提高了数据的容灾能力,kafka会将leader副本均匀地分布在集群中的服务器上,实现了性能最大化。
kafka的基本能力
扩展与容错
kafka的每个topic都可以分为多个partition,每个partition都有多个replica,实现消息冗余备份,每个分区中国的消息是不同的,这类似于数据库中水平切分的思想,提高了并发读写的能力,而同一个分区的不同副本中保存的是相同的消息,副本之间是一主多从的关系,其中leader副本负责处理读写请求,follower副本则是与leader副本进行消息同步,当leader副本出现故障时,则从follower副本中重新选举leader副本对外提供服务,这样,通过提高分区的数量,就可以实现水平扩展,通过提高副本的数量,就可以提高容灾能力。
kafka的容灾能力不仅体现在服务端,在consumer端也有相关设计,consumer使用pull方式从服务端拉取消息,并且在consumer端保存消费的具体位置,当消费者宕机后恢复上线,可以根据自己保存的消息位置重新拉取需要的消息进行消费,这就不会造成消息丢失,也就是说,kafka不决定何时、如何消费消息,而是consumer自己决定何时、如何消费消息。
kafka还支持consumer的水平扩展能力,我们可以让多个consumer加入一个consumer group,在一个consumer group 中,每个分区只能分配给一个consumer消费,当kafka服务端通过增加分区数量进行水平扩展后,我们可以向consumer group中增加新的consumer来提高整个consumer group的消费能力,当consumer group中的一个consumer出现故障下线时,会通过Rebalance操作将下线的consumer负责处理的分区分配给其他consumer继续处理。当下线consumer重新上线加入consumer group时,会再进行一次Rebalance操作,重新分配分区,当然,一个consumer group可以订阅很多不同的topic,每个consumer可以同时处理多个分区。顺序保证
在很多场景下,数据处理的顺序都很重要,不同的顺序就可能导致不同的计算结果,kafka保证一个partition内消息的有序性,但是不保证多个partition之间的数据有顺序异步通信
kafka为系统提供了异步处理能力,例如,两个系统需要通过网络进行数据交换,其中一段可以把一个消息放入kafka中后立即返回继续执行其他路径,不需要等待对端的响应,待后者将处理结果放入kafka中之后,前者可以从其中获取并解析响应。
以上是关于kafka的关键特征的主要内容,如果未能解决你的问题,请参考以下文章