什么是kafka 

  • 高性能的消息发布订阅平台,亦可用于实时流处理。
  • 使用多副本机制保证高可用。
  • 使用磁盘持久化消息,消息消费完毕不会立即删除,提供数据存储功能。

基本术语

  • broker:单个kafka服务器称之为broker,消息发送会发送给broker代理,一组brokers组成了kafka集群。
  • topic:消息的分类主题。
  • producer:消息生产者,生产消息并发送给broker。
  • consumer:消息消费者。
  • consumer group:消费者组;kafka区别于传统的消息系统(例如rabbitMq),它是一个发布订阅模型,而并不是一个消息队列的模型,这意味着一个topic中的一条消息会被订阅者集群同时消费,这并不满足一些业务场景,例如同一条消息只被消费者集群处理一次;基于这种情况的考虑,kafka提供consumer group的概念,当一个消费者集群指定了同一个groupid时,单个topic中的单条消息只会被这个group中的某一个成员消费;在consumer业务逻辑实现过程中,group id是必须指定的,并且这个id是在cosumer端自定义的。kafka提供一个topic中的消息可以被不同的group成员多次消费,即:如果需要一条消息被多个不同的consumer消费,则只需要在声明consumer时指定不同的group id 即可。
  • partition:kafka中声明topic时,可以指定分区(partition),这些partition会分布在不同的kafka broker上,这种设计是kafka实现高性能的手段之一,他提升了集群并行处理的能力,有效的提升了单一服务器中IO的限制。
  • offsetkafka消费者在会保存其消费的进度,也就是offset;在kafka中消息顺序存储,每个consumer group保存某一topic的offset,这也就是为什么每个消费者组可以重复消费某一消息,当然消费者可以改变offset到某一想要的位置,实现历史消息重新消费。

kafka为什么高性能

  • 磁盘顺序存储消息,性能很高;通过offset读取消息,时间复杂度O1
  • 多分区,分布在不同的broker上,提升并行处理能力,缓解IO压力
  • 使用linux零拷贝原理,减少cpu拷贝数据次数从而解放CPU
  • producer可以设置缓存消息批量发送,而不单单是产生一条发送一条

kafka的高可用

leader的作用

leader的选举

leader的选举

08-01 14:01