一 kafka介绍
1.1 kafka 模型介绍
Kafka 是一个开源的,轻量级的,支持多分区、多副本,基于 Zookeeper 的分布式消息流平台。
相比于其它消息系统,其有以下优点
kafka的生产者消费模型如下,生产者生产消息发送至消息引擎,消费者从消息引擎中获取消息;
1.2 kafka 设计理念
- 高吞吐、低延迟:kafka将消息写入操作系统页缓存而不直接操作磁盘io, 每秒可以处理几十万条消息,最低延迟几毫秒。
- 高伸缩性: 每个主题(topic) 包含多个分区(partition),主题中的分区可以分布在不同的主机(broker)中。
- 负载均衡:kafka 使用 leader选举算法实现了负载均衡,极大提高了运行效率;
- 故障转移:kafka使用zookeeper 作为会话机制,搭建集群后kafka的容错机制极大提高,允许某个节点宕机而不影响其它节点。
1.3 Kafka 的使用场景
- 行为跟踪:Kafka 可以用来跟踪用户行为,比如我们经常回去京东购物,当你浏览购物的时候,你的浏览信息,你的搜索指数,你的购物爱好都会作为一个个消息传递给 Kafka ,这样就可以生成报告,可以做智能推荐,购买喜好等。
- 传递消息:Kafka 一个基本用途是传递消息,可以当作消息总线或者消息代理;
- 日志收集:企业的应用非常多,每个应用都会产生日志,kafka可以当作日志收集汇总方案,方便日志管理!
- 流式处理:流式处理是kafka Stream,kafka可以将接收的数据流提供给其它框架进行计算处理等!
- 限流削峰:Kafka 多用于互联网领域某一时刻请求特别多的情况下,可以把请求写入Kafka 中,避免直接请求后端程序导致服务崩溃。
1.4 kafka基本术语
- 消息:Kafka 中的数据单元被称为
消息
,也被称为记录;消息中有三要素,key为消息键,用作分区使用;value,消息体用于保存消息;timestamp,时间戳,表示消息发送的时间; - 主题:消息的种类称为
主题
(Topic),一个主题代表了一类消息,经常使用topic来区分不同的业务,每个业务一个topic; - 分区:主题可以被分为若干个分区(partition),kafka 是 一个 topic-partition-message 的三级结构;分区存在的意义就是提高kafka的吞吐量;
- 副本:副本的目的是实现消息的可靠性,将f分区的数据复制一份到replica, 即防止消息丢失!Kafka 定义了两类副本:领导者副本(leader Replica) 和 追随者副本(Follower Replica),前者对外提供服务,后者只是被动跟随leader,相当于候补队员;
- broker: 一个独立的 Kafka 服务器就被称为
broker
; - ISR: Kafka在Zookeeper上针对每个Topic都维护了一个ISR(in-sync replica---已同步的副本)的集合,集合的增减Kafka都会更新该记录。如果某分区的leader不可用,Kafka就从ISR集合中选择一个副本作为新的leader。这样就可以容忍的失败数比较高,假如某Topic有N+1个副本,则可以容忍N个服务器不可用。