西柚的大数据从踩坑到放弃-kafka:一、Kafka的概念和架构

2024-01-21 17:59

本文主要是介绍西柚的大数据从踩坑到放弃-kafka:一、Kafka的概念和架构,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

Kafka

本文全部内容为个人理解、做记录用,如果有误请不吝指正
一个分布式的,基于pub-sub的消息队列。Kafka是消费者主动拉取消息的。
在大数据领域作为消息传递中间件应用广泛,业界如果使用spark计算框架,有9成以上消息队列都是使用kafka。

架构

在这里插入图片描述

  • Topic:相同类型的消息按照主题来存放,不然那不就乱了么。例如你的购物车数据应该放购物车Topic,单个订单数据应该放在订单Topic
  • Partition:相当于是对Topic里面数据的一个负载均衡,生产者会把消息发送到各个分区(都是leader)
  • Broker:代理,可以简单理解成一个服务器或者kafka集群的一个节点
  • Offset:在每个partition上都对应有一个log文件(所在文件夹是以topic+partition来命名的),该文件就是存储producer来的消息,producer消息会不断追加到该文件,并且每个消息都会带来一个offset。在消费的时候,消费者组的每个消费者都会记录自己消费到哪个offset,以便下次继续消费。

分两部分看这个图,先看左半部分,生产者生产消息发到集群,那么可以看出这个topic A是有两个分区的,而生产者的消息的流向也分了两部分,这就是分区的负载均衡的作用,而message To B-0的这个topic就只有一个分区,那么这个partition承载了所有topic的数据。
另外从图中还可以看到有leader和follower,数据流向都是去往leader的,follower只是为了通过数据冗余这种途径做高可用,因为毕竟是分布式系统,在一个broker挂了之后,找不到leader,那么follower提升为leader发挥职能

再看右半部分,消费者消费消息,这里面有个消费者组的概念,消费者组内的消费者之间是竞争的关系。根据线条的消息流向我们可以看出,一个topic分区内的消息只能被一个消费者组内的某一个消费者消费(有点绕)。它的好处是提高了整体消费者的消费能力,因为没有组的话那只能一个consumer,但现在可以多个consumer共同处理。假设某个主题有3分区,那设立一个消费者组,里面包含4个消费者去消费这个主题,这肯定就没有意义了,浪费资源了,所以说并发度最好的消费就是分区数和消费组内consumer的数量相等的情况。
在实际开发或测试过程中,经常会出现大家各自测写好的模块,都从kafka取数据,那这时候各自设置一个不同的组id,就可以获得全量的数据进行测试了

再看最右部分,首先kafka是依赖于zk的,这个依赖不仅体现在kafka cluster要依托zk去存储一些东西,更体现在消费者如果挂了,zk会帮助保存消费者的offset消费位置信息。这是0.9版本之前的,0.9版本之后上述信息全部存到cluster由集群内部维护。

这篇关于西柚的大数据从踩坑到放弃-kafka:一、Kafka的概念和架构的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/630373

相关文章

8种快速易用的Python Matplotlib数据可视化方法汇总(附源码)

《8种快速易用的PythonMatplotlib数据可视化方法汇总(附源码)》你是否曾经面对一堆复杂的数据,却不知道如何让它们变得直观易懂?别慌,Python的Matplotlib库是你数据可视化的... 目录引言1. 折线图(Line Plot)——趋势分析2. 柱状图(Bar Chart)——对比分析3

Spring Boot 整合 Redis 实现数据缓存案例详解

《SpringBoot整合Redis实现数据缓存案例详解》Springboot缓存,默认使用的是ConcurrentMap的方式来实现的,然而我们在项目中并不会这么使用,本文介绍SpringB... 目录1.添加 Maven 依赖2.配置Redis属性3.创建 redisCacheManager4.使用Sp

Python Pandas高效处理Excel数据完整指南

《PythonPandas高效处理Excel数据完整指南》在数据驱动的时代,Excel仍是大量企业存储核心数据的工具,Python的Pandas库凭借其向量化计算、内存优化和丰富的数据处理接口,成为... 目录一、环境搭建与数据读取1.1 基础环境配置1.2 数据高效载入技巧二、数据清洗核心战术2.1 缺失

Python处理超大规模数据的4大方法详解

《Python处理超大规模数据的4大方法详解》在数据的奇妙世界里,数据量就像滚雪球一样,越变越大,从最初的GB级别的小数据堆,逐渐演变成TB级别的数据大山,所以本文我们就来看看Python处理... 目录1. Mars:数据处理界的 “变形金刚”2. Dask:分布式计算的 “指挥家”3. CuPy:GPU

使用Vue-ECharts实现数据可视化图表功能

《使用Vue-ECharts实现数据可视化图表功能》在前端开发中,经常会遇到需要展示数据可视化的需求,比如柱状图、折线图、饼图等,这类需求不仅要求我们准确地将数据呈现出来,还需要兼顾美观与交互体验,所... 目录前言为什么选择 vue-ECharts?1. 基于 ECharts,功能强大2. 更符合 Vue

Java如何根据word模板导出数据

《Java如何根据word模板导出数据》这篇文章主要为大家详细介绍了Java如何实现根据word模板导出数据,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... pom.XML文件导入依赖 <dependency> <groupId>cn.afterturn</groupId>

Python实现获取带合并单元格的表格数据

《Python实现获取带合并单元格的表格数据》由于在日常运维中经常出现一些合并单元格的表格,如果要获取数据比较麻烦,所以本文我们就来聊聊如何使用Python实现获取带合并单元格的表格数据吧... 由于在日常运维中经常出现一些合并单元格的表格,如果要获取数据比较麻烦,现将将封装成类,并通过调用list_exc

Mysql数据库中数据的操作CRUD详解

《Mysql数据库中数据的操作CRUD详解》:本文主要介绍Mysql数据库中数据的操作(CRUD),详细描述对Mysql数据库中数据的操作(CRUD),包括插入、修改、删除数据,还有查询数据,包括... 目录一、插入数据(insert)1.插入数据的语法2.注意事项二、修改数据(update)1.语法2.有

SpringBoot实现接口数据加解密的三种实战方案

《SpringBoot实现接口数据加解密的三种实战方案》在金融支付、用户隐私信息传输等场景中,接口数据若以明文传输,极易被中间人攻击窃取,SpringBoot提供了多种优雅的加解密实现方案,本文将从原... 目录一、为什么需要接口数据加解密?二、核心加解密算法选择1. 对称加密(AES)2. 非对称加密(R

详解如何在SpringBoot控制器中处理用户数据

《详解如何在SpringBoot控制器中处理用户数据》在SpringBoot应用开发中,控制器(Controller)扮演着至关重要的角色,它负责接收用户请求、处理数据并返回响应,本文将深入浅出地讲解... 目录一、获取请求参数1.1 获取查询参数1.2 获取路径参数二、处理表单提交2.1 处理表单数据三、