Kafka
消息队列的通信模式
1.点对点模式(queue)
消息生产者发送消息到queue中,然后消息消费者从queue中取出并消费消息;一条消息被消费以后,queue中就不存在了,不存在重复消费
2.订阅/发布模式(topic)
消息生产者(发布)将信息发布到topic中,同时有多个消费者(订阅)消费该消息;和点对点不同的是,发布到topic中的消息会被所有的订阅者消费;
补充:发布订阅模式下,当发布信息过于庞大时,单个订阅者处理能力不足,现实的处理方式一般为多个订阅者组成一个订阅组负载均衡消费topicx消息即分组订阅,可以看成一个topic下有多个queue,每个queue是点对点的方式,queue之间是发布订阅方式
Kafka介绍
Kafka是一个分布式数据流平台,可以运行在单台服务器上,也可以在多台服务器上部署形成集群;提供发布订阅功能,使用者可以发布数据到kafka也可以从kafka中读取数据;它可以处理消费者规模的网站中的所有动作流数据,具有高性能、持久化、多副本备份、横向扩展等特点。
Kafka集群架构
Kafka cluster:Kafka集群,一台或多台服务器组成;
1.Broker:指部署了Kafka实例的服务器节点;每个服务器上有一个或者多个kafka的实例;姑且认为每个服务器对应一个broker;
2.Topic:消息的主题,也是消息的分类;每个Broker上都可以创建多个topic;实际应用中一个业务线建一个Topic;
3.Partition:Topic分区;每个Topic有多个分区;利于负载,提高Kafka吞吐量;一个Topic在不同分区的数据是不重复的,Partition表现形式就是一个个的文件夹
4.Replication:每个分区都有多个副本;主分区(Leader)故障;备胎(Follower)上位;副本最大数量是10个;follower 和 Leader在不同的机器上;同一机器对同一分区也只可能存在一个副本(包括自己)
生产者往Kafka发送数据的流程(6步)
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-qmHyEtre-1594807194124)(…/…/…/…/…/Images/image-20200414215024853.png)]
1.生产者从Kafka集群获取分区leader信息
2.生产者将消息发送给leader
3.leader将消息写入到本地磁盘
4.follower从leader拉取消息数据
5.follower将消息写入到本地磁盘后向leader发送ACK
6.leader收到所有follow的ACK后向生产者发送ACK
Kafka选择分区的模式(3种)
1.指定写入的Partition
2.没有指定partition,但是设置了数据的key,则根据key的值hash出一个partition
3.既没有指定partition也没有设置key,采用轮询的方式;即每次取一小段时间数据写入到某个Partiton;之后再取一段时间的数据写入到林外一个Partiton
生产者往Kafka发送数据的模式(3种)
`0`:producer 往集群发送消息不需要等到集群的返回;效率最高但是安全性最低
`1`:producer 往集群发送消息只需要收到Leader回复的ACK即可;确保Leader发送成功
`all`:producer 往集群发送消息需要等到所有的Follower完成数据同步,并回复ACK才会发送下一条消息;效率最低但是安全性最高;
注意:
往不存在的Topic写数据Kafka会自动创建topic、partition、replication的数量;且默认配置为0
Partition结构
partition在服务器上的表现形式就是一个个的文件夹,每个partition文件夹下多组segment文件,每组segment又包含.index、.log、.timeindex三个文件,.log文件是实际存储message的地方,.index和.timeindex文件是索引文件,用于检索信息;
分区存储文件的原理
为什么Kafka快
每个分区的数据写入都是按照顺序写入的;并且会记录写入到每个分区的信息的位置,生成索引文件
消费者消费数据的原理
消费组在消费时不会存在:同一分区被同一消费组中的多个消费实例消费,即一个分区1,如果某个消费组中消费实例A消费了,该组中的其他消费实例就无法再消费分区1;如果一个topic有4个分区,那们在一个消费组中顶多有4个消费实例消费了
Kafka的使用场景
1.消息队列(MQ)
MQ(message queue)是一种跨进程的通信机制,用于上下游的消息传递,使用MQ可以使上下游解耦,消息发送上游只需要依赖MQ,逻辑上和物理上都不需要依赖其他下游服务,MQ的常见使用场景是流量消峰,数据驱动的任务依赖等,在MQ领域除了kafka还有传统的消息队列:ActiveMQ、RabbitMQ.
2.追踪网站活动
Kafka最初设计出来就是用来进行网站活动(例如PV、UV、搜索记录等)的追踪,可以将不同的活动放入到不同的主题,供后续的实时计算,实时监控等程序的使用,也可以将数据导入到数据仓库中进行后续的离线处理和生成报表等;
3.Metrics
kafka经常被用来传输监控数据,主要用来聚合分布式应用程序的统计数据,将数据统一后进行统一的分析和展示;
4.日志聚合
日志聚合通常指将不同服务器上的日志收集起来并放入一个日志中心,比如一台文件服务器或者HDFS中的一个目录,供后续进行分析处理,相比于Flume和Scribe等日志聚合工具,具有更加出色的性能