kafka基本概念

kafka是个啥?

kafka是一个分布式消息队列。具有高性能、持久化、多副本备份、横向扩展能力。生产者往队列里写消息,消费者从队列里取消息进行业务逻辑。一般在架构设计中起到解耦、削峰、异步处理的作用。

消息和批次

消息

消息是kafka里的数据单元,就像数据库一样,可以把消息看成是数据库里一个数据行或者一条记录。消息由字节数组组成,对于kafka来说,消息里的数据没有特别的格式或者含义。消息也可以有一个可选的键来保证具有相同键的消息被写到相同的分区。

批次

为了提高效率,消息被分批次写入kafka,批次就是一组消息,这些消息属于同一个主题和分区,把消息分成批次传输可以有效地减少网络开销。

主题和分区

kafka的消息通过主题进行分类,主题就好比是数据库的表,或者文件系统里的文件夹。一个主题可以被分为若干个分区,一个分区就是一个提交日志。消息以追加的方式写入分区,以先入先出的顺序读取。

kafka基本概念

生产者和消费者

生产者创建消息,也可能被称作发布者和写入者。一般情况下,一个消息会被发布到一个特定的主题,生产者在默认的情况下会把消息均衡的发布到主题的所有分区上,并不关心具体写到那个分区。我们也可以通过消息键和分区器来实现把消息发送到指定的分区上。
消费者读取消息,也可能被称为订阅者或读者。消费者订阅一个或多个主题,按照消息生成的顺序读取他们,通过检查消息的偏移量来区分已经读取过的消息。
kafka基本概念

broker和集群

一个独立的Kafka服务器被称为broker。broker 接收来自生产者的消息,为消息设置偏移量,并提交消息到磁盘保存。broker 为消费者提供服务,对读取分区的请求作出响应,返回已经提交到磁盘上的消息。根据特定的硬件及其性能特征,单个broker 可以轻松处理数千个分区以及每秒百万级的消息量。

broker是集群的组成部分。每个集群都有一一个broker同时充当了集群控制器的角色(自动从集群的活跃成员中选举出来)。控制器负责管理工作,包括将分区分配给broker和监控broker。在集群中,一个分区从属于一个broker,该broker被称为分区的首领。一个分区可以分配给多个broker,这个时候会发生分区复制(见图1-7)。这种复制机制为分区提供了消息冗余,如果有一一个broker失效,其他broker可以接管领导权。不过,相关的消费者和生产者都要重新连接到新的首领。
kafka基本概念

保留消息

保留消息(在一定期限内)是Kafka的一个 重要特性。Kafka broker 默认的消息保留策略是这样的:要么保留一-段时间(比如7天),要么保留到消息达到一定大小的字节数(比如1GB)。当消息数量达到这些上限时,旧消息就会过期并被删除,所以在任何时刻,可用消息的总量都不会超过配置参数所指定的大小。主题可以配置自己的保留策略,可以将消息保留到不再使用它们为止。例如,用于跟踪用户活动的数据可能需要保留几天,而应用程序的度量指标可能只需要保留几个小时。可以通过配置把主题当作紧凑型日志,只有最后一个带有特定键的消息会被保留下来。这种情况对于变更日志类型的数据来说比较适用,因为人们只关心最后时刻发生的那个变更。

kafka的特点

  • 支持多个生产者
    可以无缝支持多个生产者,很适合从多个前端系统手机数据,并以统一的格式对外提供数据
  • 支持多个消费者
    多个消费者可以从一个单独的消息流上读取数据,而且消费者之间互不影响。
  • 基于磁盘的数据存储
    允许消费者非实时地读取消息。消息被提交到磁盘,根据配置的保留规则进行保存,每个主题可以单独设置保留规则,也可以保留不同数量的消息。
  • 伸缩性
    kafka一开始就被设计成一个具有灵活伸缩性的系统,用户在开发阶段可使用单个borker,然后慢慢的扩展集群,对于在线集群进行扩展四号不影响整体系统的可用性。
  • 高性能

参考:《Kafka权威指南》人民邮电出版社