kafka 消息系统概述

一、综述
Kafka是最初由Linkedin公司开发,是一个分布式、支持分区的(partition)、多副本的(replica),基于zookeeper协调的分布式消息系统,于2010年贡献给Apache基金会并成为顶级开源项目。其最大特性是实时的处理大量数据以满足各种需求场景:比如基于hadoop的批处理系统、低延迟的实时系统、storm/Spark流式处理引擎,web/nginx日志、访问日志,消息服务等,用scala语言编写。

二、kafka与AMQP
kafka尽管可以看作一个消息队列,但不同于基于AMQP协议实现的消息系统(zeromq,rabbitmq等),不遵循AMQP协议标准,它是在大数据场景下设计的消息系统。
kafka消息流流动方式是push-pull,即producer push消息到broker,consumer从broker pull消息进行消费,而AMQP协议最初采用的是push-push模式。kafka这种模式对于consumer更友好,consumer可以根据需求控制pull的速度,push则容易对consumer产生巨大压力,以至于consumer服务宕机。

三、特性
高吞吐、可扩展、高并发、持久化、高容错

四、使用场景
1 日志收集,多个消息源写入,以统一的格式被多种consumer消费
2 消息系统,削峰平谷 异步解耦
3 流式处理,流式计算框架的数据源

五、kafka架构及核心概念
kafka与其他的消息系统(zeromq、rabbitmq、activemq等)一样,包括producer,broker以及consumer三个核心组件。
在这里插入图片描述
Producer
1 向broker中的某个topic下的某个partition的leader push消息数据
2 支持同步发送、异步发送两种方式
3 消息格式 <topic, key, message>

Broker
1 多个broker组成分布式高容错集群,broker之间实现负载均衡和故障转移
2 消息持久化
3 接收并处理producer和consumer发来的请求,仅提供基于offset的消息读取方式

Consumer
1 消息消费者,根据需求从broker 的某个partition中pull消息数据
2 一个consumer可以消费多个partition的数据,但是一个partition的消息只能由一个consumer消费
3 consumer group(多个consumer),可以实现
4 维护消息读取offset,减轻broker压力
consumer group

Partition
1 消息数据在broker中是分partition(区)存储的,partition包括leader分区,follower分区,leader分区负责读写请求,follower分区不支持读写,只是leader分区数据的复制,当leader分区故障时,follower分区会选择出来leader分区继续服务,从而实现负载均衡,对消费者而言,可以提高并发度。
2 消息有序性,单个partition内的数据是有序的,多个partition之间的数据是无序的,同时,一个partition只能被一个consumer消费
3 分配消费者策略range,roundrobin

流向
流向
流向
partition1
consumer 1
partition2
partition3
consumer 2

zookeeper作用
1 broker注册
Broker是分布式部署并且相互之间相互独立,在Zookeeper上会有一个专门用来进行Broker服务器列表记录的节点:

/brokers/ids

每个Broker在启动时,都会到Zookeeper上进行注册,即到/brokers/ids下创建属于自己的节点,如/brokers/ids/[0…N]。

Kafka使用了全局唯一的数字来指代每个Broker服务器,创建完节点后,每个Broker就会将自己的IP地址和端口信息记录到该节点中去。其中,Broker创建的节点类型是临时节点,一旦Broker宕机,则对应的临时节点也会被自动删除
2 topic注册
在kafka中可以定义很多个topic,每个topic又被分为很多个分区。一般情况下,每个分区独立在存在一个broker上,所有的这些topic和broker的对应关系都有zk进行维护
3 consumer注册
监控消费者组中消费者的变化,一般只增不减

高吞吐策略
1 顺序读写
2 zero-copy
3 文件分段
4 批处理
5 数据压缩

消息消费
1 at most once,不关注消息是否必达,非确认机制
2 at least once,保证消息必达性,确认机制
3 exactly once,消息幂等性

参考文档
http://kafka.apache.org/
https://mp.weixin.qq.com/s/0NcgmiI636EDfkcfcQANHg
《大数据技术体系详解》

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章