栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 前沿技术 > 大数据 > 大数据系统

Kafka入门篇-概念

Kafka入门篇-概念

目录
  • 什么是kafka
  • 消息队列的应用场景
  • kafka架构
  • kafka消息存储和生产消费模型
    • kafka存储模型
    • topic
    • kafka消费模型
  • kafka特点
  • 消费状态谁维护
  • kafka读写快的原因
    • 零拷贝技术

什么是kafka

kafka是一个高吞吐的分布式消息系统,Scala语言写的,存数据的一个工具,有顺序的消息队列,默认只会保留最近7天数据

消息队列的应用场景
  • 系统之间的解耦合
  • 峰值压力缓冲(请求太多了,处理不过来,然后排队解决压力)
  • 异步通信(两边不用同时在线也可以实现通信,把发送的请求放到队列中,另一端有空闲来取)
kafka架构
  • producer **消息(数据)**生产者

  • consumer 消息消费者
    生产者生产数据,消费者消费数据

  • broker kafka集群的一个节点(一个kafka cluster就是一个broker)
    负责处理消息的读、写请求,存储数据(类似于datanode)

  • topic 消息队列/分类(类似于一张表的意思,比如学生表,分数表,区分不同的一类数据,一个topic中的数据的结构要一样)

  • 元数据存储在zookeeper

  • kafka是去中心化架构

kafka消息存储和生产消费模型 kafka存储模型
  • 一个topic分成多个partition
  • 每个partition内部消息强有序,其中的每个消息都有一个序号叫offset(每个partition中的数据都会给打上编号)
  • 一个partition只对应一个broker,一个broker可以管多个partition
  • 消息不经过内存缓冲,直接写入文件(不用内存,数据量比较大,而且内存不稳定,用了顺序读写和零拷贝技术)
  • 根据时间策略删除,而不是消费完就删除(默认七天,之后删除)
  • producer自己决定往哪个partition写消息,可以是轮询的负载均衡(第一个数据写第一个分区,第二个写第二个,保证负载均衡),或者是基于hash的partition策略(好处:同样的数据进入同一个分区)

topic

kafka里面的消息是有topic来组织的,简单的我们可以想象为一个队列,一个队列就是一个topic,然后它把每个topic又分为很多个partition,这个是为了做并行的,在每个partition里面是有序的,相当于有序的队列,其中每个消息都有个序号,比如0到12,从前面读往后面写,

一个partition对应一个broker,一个broker可以管多个partition,比如说,topic有6个partition,有两个broker,那每个broker就管3个partition

这个partition可以很简单想象为一个文件(每个分区就是一个文件),当数据发过来的时候它就往这个partition上面append,追加就行,kafka和很多消息系统不一样,很多消息系统是消费完了我就把它删掉,而kafka是根据时间策略删除,而不是消费完就删除,在kafka里面没有一个消费完这么个概念,只有过期这样一个概念

这里producer自己决定往哪个partition里面去写,这里有一些的策略,譬如如果hash就不用多个partition之间去join数据了

kafka消费模型
  • consumer**自己维护(自己知道就行)**消费到哪个offset

  • 每个consumer都有对应的group(比如一个topic有三个partition,可以写三个线程一起消费,这三个线程可以对应一个组)

  • group内是queue消费模型
    各个consumer消费不同的partition
    因此一个消息在group内只消费一次

  • group间是publish-subscribe消费模型
    各个group各自独立消费,互不影响
    因此一个消息在被每个group消费一次

kafka特点
  • 消息系统的特点:生存者消费者模型,FIFO(一个分区的时候,实现先进先出)

  • 高性能:单节点支持上千个客户端,百MB/s吞吐(受到硬盘读写的限制)

  • 持久性:消息直接持久化在普通磁盘上且性能好

  • 分布式:数据副本冗余、流量负载均衡、可扩展

  • 很灵活:消息长时间持久化+Client维护消费状态

消费状态谁维护

服务端和客户端维护

kafka读写快的原因

1、kafka写磁盘是顺序的
2、采用了0拷贝技术
3、批量读写

零拷贝技术

1、非零拷贝
从WIKI的定义中,我们看到“零拷贝”是指计算机操作的过程中,CPU不需要为数据在内存之间的拷贝消耗资源。而它通常是指计算机在网络上发送文件时,不需要将文件内容拷贝到用户空间(User Space)而直接在内核空间(Kernel Space)中传输到网络的方式。

2、零拷贝
Zero Copy的模式中,避免了数据在用户空间和内存空间之间的拷贝,从而提高了系统的整体性能。Linux中的sendfile()以及Java NIO中的FileChannel.transferTo()方法都实现了零拷贝的功能,而在Netty中也通过在FileRegion中包装了NIO的FileChannel.transferTo()方法实现了零拷贝。

感谢阅读,我是啊帅和和,一位大数据专业大四学生,祝你快乐。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/618677.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号