当前位置: 首页 > news >正文

kafka详解及应用场景介绍

Kafka架构

Kafka架构,由多个组件组成,如下图所示:

主要会包含:Topic、生产者、消费者、消费组等组件。

服务代理(Broker)

Broker是Kafka集群中的一个节点,每个节点都是一个独立的Kafka服务器。

它负责存储和处理发布到Kafka的消息,消息以主题(topic)的形式进行分类和组织。

如下图所示:

每个Broker可以承载多个主题的分区(partition),并使用日志文件(log)来持久化存储消息。 

Topic(主题) 

Topic可以理解为一个队列,Topic是消息的分类单元,一个 Topic 又分为一个或多个分区。

每个Topic可以被分成多个分区,每个分区在不同的Broker节点上进行存储。

Topic主题的数据以一系列有序的消息进行组织。

生产者(Producer)

Producer是向Kafka发送消息的客户端应用程序,它将消息发布到指定的主题。

可以选择将消息发送到特定分区,或让Kafka自动选择分区。

如下图所示:

生产者负责将消息进行缓冲和批量发送,以提高性能和吞吐量。

消费者(Consumer)

Consumer是从Kafka订阅和接收消息的客户端应用程序,它订阅一个或多个主题,并从指定的分区中拉取消息。

如下图所示:

消费者可以以不同的消费组(consumer group)形式组织,每个消费组内的消费者共同消费主题中的消息,以实现负载均衡和容错。

Consumer Group(消费组)

消费组是一组具有相同消费者组ID的消费者的集合,在同一个消费组内,每个分区只能由一个消费者进行消费,以实现负载均衡。

如果消费者组中的消费者数量多于主题分区的数量,那么一些消费者将处于空闲状态。

Kafka应用场景

Kafka的应用场景包括:日志收集、事件驱动架构、实时分析、指标监控等,主要用于构建实时流数据管道和流处理应用程序。

  1. 消息系统:Kafka可以作为一个高效的消息中间件,用于解耦生产者和消费者。

  2. 指标监控:Kafka可以用于实时监控和分析,将指标数据发送到Kafka,然后通过流处理工具(如Spark Streaming)进行处理和告警。

  3. 事件驱动架构:Kafka可作为事件驱动架构的一部分,用于收集和传递各种事件。

  4. 日志聚合:Kafka可以作为日志聚合的解决方案,将各种日志数据集中聚合到一个地方。

  5. 分布式追踪:Kafka可以用于分布式系统跟踪,将各种数据发送到Kafka中进行实时处理和分析。

kafka 为什么会那么快?

一共有四个原因

  1. 磁盘顺序读写

  2. PageCache 页缓存技术

  3. 零拷贝技术

  4. kafka 分区架构

磁盘顺序读写

生产者发送数据到 kafka 集群中,最终会写入到磁盘中,会采用顺序写入的方式。消费者从 kafka 集群中获取数据时,也是采用顺序读的方式。无论是机械磁盘还是固态硬盘 SSD,顺序读写的速度都是远大于随机读写的。

  • 机械磁盘顺序读写省去了磁头频繁寻址和旋转盘片的开销

  • 固态硬盘SSD以Page为单位做读写,以Block为单位做垃圾回收。写相同数据量的情况下,顺序写制造更少的垃圾Block,所以比随机写有更高的性能。

PageCache 页缓存技术

  • 当 kafka 有写操作时,先将数据写入PageCache中,然后在顺序写入到磁盘中。

  • 当读操作发生时,先从PageCache中查找,如果找不到,再去磁盘中读取。

零拷贝技术 

一般性能的瓶颈都是网络io、磁盘io。我们来看下从磁盘读取数据到网卡场景下,传统 IO 的整个过程:

DMA方式,Direct Memory Access,也称为成组数据传送方式,有时也称为直接内存操作。DMA方式在数据传送过程中,没有保存现场、恢复现场之类的工作。

传统 IO 模型下,从磁盘读取数据,写到网卡设备中,经历了 4 次用户态和内核态之间的切换和数据的拷贝。红色箭头为数据拷贝。 那能不能让拷贝次数发送的少一点呢?但是kafka 采用了 sendfile 的零拷贝技术

所谓的零拷贝技术不是指不发生拷贝,而是在用户态没有进行拷贝。

总之,Kafka是一个分布式流处理平台,用于高性能、可靠地处理实时数据流,并提供了可靠的消息传递、持久化存储和容错机制。

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 当你在浏览器扣下域名时。。。
  • (自适应手机端)行业协会机构网站模板
  • 系统模块时序图的重要性:解锁系统模块交互的全景视图
  • 【Gin】深度解析:在Gin框架中优化应用程序流程的责任链设计模式(下)
  • 哪些地区适合作EOD项目?
  • 如何选择合适的自动化测试工具!
  • 大数据-55 Kafka sh脚本使用 与 JavaAPI使用 topics.sh producer.sh consumer.sh kafka-clients
  • 昇思25天学习打卡营第XX天|基于MindSpore的红酒分类实验
  • flink standakone提交任务参数
  • 现在的Java面试都这么扯淡了吗?
  • 2024下《网络工程师》案例简答题,刷这些就够了!
  • linux timestamp
  • 【吊打面试官系列-Dubbo面试题】Dubbo SPI 和 Java SPI 区别?
  • Hive——UDF函数:高德地图API逆地理编码,实现离线解析经纬度转换省市区(离线地址库,非调用高德API)
  • http协议深度解析——网络时代的安全与效率(1)
  • 0x05 Python数据分析,Anaconda八斩刀
  • Date型的使用
  • Mybatis初体验
  • Spark VS Hadoop:两大大数据分析系统深度解读
  • Vue官网教程学习过程中值得记录的一些事情
  • 关于 Linux 进程的 UID、EUID、GID 和 EGID
  • 互联网大裁员:Java程序员失工作,焉知不能进ali?
  • 每天10道Java面试题,跟我走,offer有!
  • 浅谈web中前端模板引擎的使用
  • 用Python写一份独特的元宵节祝福
  • TPG领衔财团投资轻奢珠宝品牌APM Monaco
  • ​力扣解法汇总946-验证栈序列
  • # Swust 12th acm 邀请赛# [ A ] A+B problem [题解]
  • #NOIP 2014# day.1 T2 联合权值
  • #pragma pack(1)
  • #进阶:轻量级ORM框架Dapper的使用教程与原理详解
  • (2024最新)CentOS 7上在线安装MySQL 5.7|喂饭级教程
  • (C语言)字符分类函数
  • (html转换)StringEscapeUtils类的转义与反转义方法
  • (Redis使用系列) Springboot 实现Redis 同数据源动态切换db 八
  • (Redis使用系列) Springboot 使用Redis+Session实现Session共享 ,简单的单点登录 五
  • (Windows环境)FFMPEG编译,包含编译x264以及x265
  • (顺序)容器的好伴侣 --- 容器适配器
  • (四)Android布局类型(线性布局LinearLayout)
  • (一)SpringBoot3---尚硅谷总结
  • (原)本想说脏话,奈何已放下
  • (转)Linux NTP配置详解 (Network Time Protocol)
  • * CIL library *(* CIL module *) : error LNK2005: _DllMain@12 already defined in mfcs120u.lib(dllmodu
  • ***原理与防范
  • . NET自动找可写目录
  • ./include/caffe/util/cudnn.hpp: In function ‘const char* cudnnGetErrorString(cudnnStatus_t)’: ./incl
  • .Net Core 中间件验签
  • .Net CoreRabbitMQ消息存储可靠机制
  • .net framework4与其client profile版本的区别
  • .net mvc 获取url中controller和action
  • .NET 分布式技术比较
  • .pop ----remove 删除
  • ::什么意思
  • @RequestMapping 和 @GetMapping等子注解的区别及其用法
  • @RequestParam,@RequestBody和@PathVariable 区别