kafka
定义
Kafka是一种高吞吐量的分布式发布订阅消息系统,它可以处理消费者在网站中的所有动作流数据。
Kafka 本质上是一个 消息队列,所以它具有消息队列的优点:
解耦:允许我们独立的扩展或修改队列两边的处理过程。
削峰:不会因为突发的超负荷的请求而完全崩溃,消息队列能够使关键组件顶住突发的访问压力。
异步:消息队列允许用户把消息放入队列但不立即处理它。
除此之外它还具有很多优点,如具有扩展性,可恢复性,顺序保证等。
系统架构
Broker
物理节点的名称
Topic
一张表就是一个主题,它是一个逻辑概念
Partition
topic中的数据分割为一个或多个partition,每个分区中的数据有序。
当生产者生产数据时,根据路由分配策略分配数据:
a.指定了 patition,则直接使用
b.未指定 patition 但指定 key,通过对 key 的 value 进行hash 选出一个 patition
c.patition 和 key 都未指定,使用轮询选出一个 patition
Replication,Leader和Follow
replication是partition的副本,负责数据的安全
Leader相当于主分区,负责数据的读写的。
Follower,leader的备份,所有写请求都通过Leader路由,数据变更会广播给所有Follower
Producer
数据的生产者,将产生的消息放入Topic中,根据路由放入partition中
Consumer
数据的消费者,消费者可以从broker中读取数据。消费者可以消费多个topic中的数据。
Consumer Group
多个消费者组成,消费组一组共享一个Topic,不同组可以同时消费同一个Topic
Offset
偏移量,一个消息只能被消费组消费一次,这个组需要记录当前Topic消费消息的进度(offset),特殊情况下可由客户端调整Offset的位置
Zookeeper
存储元数据信息
数据存储策略
一个Topic(逻辑概念)分为多个partition,一个分区有多个segment,一个segment包括index索引文件和log文件,索引顺序读写,默认大小为10M
生产者数据安全
ACK机制:为了保证 Producer 发送的数据,能可靠地发送到指定的 Topic
a. 0:不需要leader返回ACK,效率快但不安全
b. 1:需要leader返回ACK,效率一般,安全一般
c. -1:需要leader和follower都返回ACK,效率低但很安全
选举策略
HW
高水位线:如果主节点挂掉,无论哪个follower竞选成功都是安全的,但只有高水位线下的数据才会暴露给消费者
LEO
最大偏移量数据:每个节点都是不同的,每当重新选举之后HW-LEO的数据可能是无效数据 ,截取掉
消费者数据安全
消费方式
消费者拉取kafka的数据,根据自己的实际能力拉取数据,但需要频繁的访问Topic,为了避免一直访问并返回空数据,采用长连接 timeout,如果没有数据必须等到超时才返回空数据。
分区分配策略
RoundRobinAssignor
轮询,hash值%消费者数量
RangeAssignor
以主题为单位/消费者数量
StickyAssignor
均匀不变
Offset
生产端offset
消费端offset
checkpoint的offset
Consumer重置Offset
Kafka的事务性
幂等性
幂等,就是指多接口的多次调用所产生的结果和只调用一次是一致的。没有幂等性的情况下就会重
复发送数据,kafka的幂等性就是保证单个分区不会重复写入数据
Kafka事务
写入多个Partition要么全部成功,要么全部失败,不会出现部分成功部分失败这种情况。
kafka集成flume
flume收集数据作为生产者给kafka,kafka作为消费中间件,最后消费者来消费