流处理平台kafka的介绍

注:本kafka系列文章是以2.x版本为例

kafka介绍知识框架

一、kafka的概念和基本功能

1.什么是kafka

kafka是一个分布式的流处理平台,处理和管理数据流向的平台(消息队列只是其中一个功能)。它是由LinkedIn公司通过Scala语言开发,并捐献给Apache基金会的一个开源软件。

2.kafka的基本功能:
  • 消息系统:有发布订阅功能的消息队列,此功能与ActiveMQ、RibbitMQ、RocketMQ类似
  • 流处理:在实时系统中记录事件数据
  • 数据流存储:在分布式、可复制备份的、可容错的集群中安全的存储数据流

二、kafka的使用场景

  • 1.消息系统 : 作为一个消息队列系统,提供消息订阅与发布
  • 2.网站用户行为追踪 : 用户操作记录与追踪
  • 3.数据指标监控 : 将分布式应用程序中的统计数据聚合到一起,形成一个统计中心
  • 4.日志收集聚合 : 将分布式系统中的日志数据聚合到一起,以便统一管理、监控。
  • 5.数据流处理 : 在处理由多个阶段组成的管道时处理数据,其中原始输入数据从Kafka主题中消费,然后聚合、扩展或以其他方式转换为新主题以供进一步消费或后续处理
  • 6.事件状态追踪 : 记录事件源的状态变更
  • 7.分布式系统日志提交 : 作为分布式系统的一种外部提交日志,该日志有助于在节点之间复制数据,并充当故障节点恢复其数据的重新同步机制。

三、kafka的优势

1.高性能
  • 高吞吐量,单机可达到百万级的TPS写入
  • 低延迟,时效性高
2.高可用
  • 它天然支持分布式,通过分区和备份策略,即使少数机器或节点宕机,也不会丢失数据,不会导致系统不可用
3.消息有序性
  • 采用pull方式获取消息,因为消息存储是顺序存储,传输也是按顺序传输,因此通过控制可以保证消息被有序消费
4.在大数据领域和日志领域比较成熟,与其他大数据组件容易集成
  • kafka已成为大数据的重要组件,与zookeeper等组件配合,在大数据领域应用非常广泛,技术非常成熟
5.事务消息的支持
  • 在kafka中使用@Transactional或KafkaTemplate的executeInTransaction方法很容易实现事务消息

四、kafka的架构

1.kafka的组成

kafka整个系统的组成部分

注:上图中的各个组成部分都是一个集群

(1)broker

即为kafka的server端,也就是消息系统kafka本身,它主要负责存储消息

broker的功能

  • 存储消息:将消息等数据注册到zookeeper上,另外将消息存储到本地的日志文件中
  • 管理消息:主要是管理消息文件,包括索引文件和日志文件
  • 分区:将指定的key路由存储到哪个分区上
  • 消息副本管理:管理副本文件,维护ISR队列,并管理Leader选举和Follower从ISR中剔除或加入ISR(通过zookeeper)
  • 消息同步 : 将消息同步到消息副本上
(2)zookeeper

zookeeper的功能

(3)producer

生产消息,并将生产的消息发送到broker中

(4)consumer

从broker中拉取消息,并告知broker消费状态

  • consumer group : 消费者分组,同一个分组中某个成员消费了某个主题的消息,其他成员不再消费该主题的消息
2.kafka的消息组成

kafka消息的组成

  • topic : 即消息主题,类似于消息的分类,是消费订阅的最基本的单元
  • partition : 分区,是指将某个主题的消息切分成几个块存储到不同的节点上,类似于数据库的分库分表
  • message : 具体的一个消息,它包含key,value和timestamp
    • key : 消息的标识,作为分区的参考点
    • value : 消息的内容
    • timestamp : 消息创建时间
3.其他相关概念
(1)生产消息

生产消息时按顺序存入消息队列

注:这里的0,1表示消息存储的索引位置

  • 生产者生产消费后,将消息发送到broker中,broker根据消息的key计算出它的分区
  • 将消息通过追加的方式追加到相应的分区的消息队列中,是有序的插入
(2)消费消息

消费消息时按顺序消费,并移动消费指针

  • 消费者消费消息时根据消费的主题和key,获取消息的索引位置,读取消息,并记录消息消费的位置(offset),并保证不重复消费