kafka学习_kafka学习(第一章 初识kafka)

kafka是什么?


Kafka是由Apache开发的、开源的流处理平台,它是一个高吞吐量的、持久的、分布式的发布订阅模式的消息系统。
高吞吐量:普通配置的服务器即可满足每秒百万级别消息的生产和消费;
持久性:有一套完善的消息存储机制,可确保消息安全且持久的存储在服务;
分布式:它是基于分布式进行扩展管理的,消息存储在几台服务器上,当某台服务故障时,生产者和消费者可以转移到其他服务上。
消息队列有两种模式:点到点模式、发布订阅模式
点到点模式

294def7764a841c328c1e20a7f3980bf.png

点到点模式


点到点特点:
1.生产者生产消息后放入队列,消费者读取队列消息消费
2.消息被消费后不会继续存放在队列中,即一条消息只能被一个消费者消费
3.未被消费的消息会一直存储在队列中。就像单发邮件时,发送邮件->云服务器->接收者接收邮件到本地->云端该邮件丢弃
发布订阅模式

3ca12dc980d1a6d5f75491ebac006267.png

发布订阅模式


发布订阅模式特点:
1.生产者生产消息后放入队列,消费者订阅队列消息消费
2.消息被消费后继续存放在队列中,即一条消息可以被重复多次消费
3.消息有一个过期时间,过期之后会在队列中消失

什么样的设计使kafka拥有这些特点呢?

kafka架构设计

从架构图中,可以看出kafka服务分为四个部分:最顶端的zookeeper、最左侧的producer、中间的kafka cluster、最右侧的consumer。

ae6760012d96a14af72aa1e1bd486295.png

kafka架构图

首先,介绍下图上的一些名词:

  1. zookeeper:kafka集群通过分布式部署,各服务器之间相互独立,需要一个注册系统将整个集群的服务器管理起来,zookeeper就是这样的一个角色;
  2. Broker:kafka server,kafka集群中每台服务器即为一个broker;
  3. Topic:消息主题,kafka中是通过topic对消息进行归类的,同一类消息存放的目录即主题;
  4. Partition:topic在物理上可以分成多个partition,每个partition在磁盘上对应一个目录,存放消息文件,每个partition是一个有序队列;
  5. Replica:备份,一个partition有多个副本,这些副本分为leader 副本和follower副本,leader副本完成与生产者和消费者之间的消息交互,follower提供备份服务,replica数目小于等于broker数;
  6. offset:偏移量,partition中的索引,下一条消息即将存入的位置;
  7. Leader:replica leader,完成与生产者、消费者之间消息交互;
  8. Follower:replica follower,消息备份,提高可靠性,
  9. Producer:生产消息,发送到kafka server;
  10. Consumer:订阅topic并消费message,每个consumer为一个独立的进程;
  11. consumerGroup:管理consumer,多个consumer组成consumerGroup。

这张图中间是kakfa cluster,用于暂存消息,broke即节点实例,多个broker组成了kakfa cluster;为了方便不同消息管理,kakfa提供了主题服务——topic,它类似于数据库中的表;为了增加topic的负责均衡和并发度,topic又分为不同的partition,消息存储在不同partition,从图中可以看出,不同partition分布在不同服务器上;为了提高服务可靠性,分区又由多个replica组成,这些副本分为leader和follower,leader负责与producer、consumer沟通,follower提供备份服务;整个kakfa集群通过zk管理配置、leader选举;producer生产消息,通过push模式将消息推送到kafka,存储到不同topic的不同partition,同一paritition的数据是顺序存储,这样单一topic的partition有序;producer和consumer关系就像老师和学生的关系,一个老师对应多个学生,一个学生也可对应多个老师;consumer通过pull模式订阅并消费kafka消息,一个或多个consumer就组成了consumerGroup,同一consumerGroup中的consumer只能订阅不同partition消息,但不同consumerGroup中consumer可以同时订阅同一partition消息。

kafka应用

  1. 消息系统:解耦生产者和消费者,缓存消息
  2. 日志收集:公司各种日志可以通过kafka进行收集、缓存
  3. 流式处理:spark streaming、flink

举两个简单例子:1.spark服务计算结果存入ES中,如果直接用ES的api服务写,整个流程是实时的强耦合并且spark服务峰值时很可能会把api服务打垮;引入kafka之后,整个流程变为异步,kafka和ES也不会强依赖,峰值也会得到控制;

2.典型的流式处理,kafka1中数据持续更新,spark服务会持续计算并推送给kafka2,直播带货就是一个典型的场景。直播间内主播需要实时的持续的获取粉丝的互动消息、货品的售卖情况,决定下一步做什么。抽象成数据流即为:采集粉丝互动信息、商品进销存信息->聚合计算->推送计算结果给主播,这样的场景用kafka很合适,因为它具有持续性非阻塞的特点。

3dc73a426b0ff666896db2ec1c8e2862.png

kafka应用

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值