西柚的大数据从踩坑到放弃-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

相关文章

javaScript在表单提交时获取表单数据的示例代码

《javaScript在表单提交时获取表单数据的示例代码》本文介绍了五种在JavaScript中获取表单数据的方法:使用FormData对象、手动提取表单数据、使用querySelector获取单个字... 方法 1:使用 FormData 对象FormData 是一个方便的内置对象,用于获取表单中的键值

Rust中的BoxT之堆上的数据与递归类型详解

《Rust中的BoxT之堆上的数据与递归类型详解》本文介绍了Rust中的BoxT类型,包括其在堆与栈之间的内存分配,性能优势,以及如何利用BoxT来实现递归类型和处理大小未知类型,通过BoxT,Rus... 目录1. Box<T> 的基础知识1.1 堆与栈的分工1.2 性能优势2.1 递归类型的问题2.2

Python使用Pandas对比两列数据取最大值的五种方法

《Python使用Pandas对比两列数据取最大值的五种方法》本文主要介绍使用Pandas对比两列数据取最大值的五种方法,包括使用max方法、apply方法结合lambda函数、函数、clip方法、w... 目录引言一、使用max方法二、使用apply方法结合lambda函数三、使用np.maximum函数

Debezium 与 Apache Kafka 的集成方式步骤详解

《Debezium与ApacheKafka的集成方式步骤详解》本文详细介绍了如何将Debezium与ApacheKafka集成,包括集成概述、步骤、注意事项等,通过KafkaConnect,D... 目录一、集成概述二、集成步骤1. 准备 Kafka 环境2. 配置 Kafka Connect3. 安装 D

Redis的数据过期策略和数据淘汰策略

《Redis的数据过期策略和数据淘汰策略》本文主要介绍了Redis的数据过期策略和数据淘汰策略,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一... 目录一、数据过期策略1、惰性删除2、定期删除二、数据淘汰策略1、数据淘汰策略概念2、8种数据淘汰策略

轻松上手MYSQL之JSON函数实现高效数据查询与操作

《轻松上手MYSQL之JSON函数实现高效数据查询与操作》:本文主要介绍轻松上手MYSQL之JSON函数实现高效数据查询与操作的相关资料,MySQL提供了多个JSON函数,用于处理和查询JSON数... 目录一、jsON_EXTRACT 提取指定数据二、JSON_UNQUOTE 取消双引号三、JSON_KE

Python给Excel写入数据的四种方法小结

《Python给Excel写入数据的四种方法小结》本文主要介绍了Python给Excel写入数据的四种方法小结,包含openpyxl库、xlsxwriter库、pandas库和win32com库,具有... 目录1. 使用 openpyxl 库2. 使用 xlsxwriter 库3. 使用 pandas 库

SpringBoot定制JSON响应数据的实现

《SpringBoot定制JSON响应数据的实现》本文主要介绍了SpringBoot定制JSON响应数据的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们... 目录前言一、如何使用@jsonView这个注解?二、应用场景三、实战案例注解方式编程方式总结 前言

使用Python在Excel中创建和取消数据分组

《使用Python在Excel中创建和取消数据分组》Excel中的分组是一种通过添加层级结构将相邻行或列组织在一起的功能,当分组完成后,用户可以通过折叠或展开数据组来简化数据视图,这篇博客将介绍如何使... 目录引言使用工具python在Excel中创建行和列分组Python在Excel中创建嵌套分组Pyt

MySQL 缓存机制与架构解析(最新推荐)

《MySQL缓存机制与架构解析(最新推荐)》本文详细介绍了MySQL的缓存机制和整体架构,包括一级缓存(InnoDBBufferPool)和二级缓存(QueryCache),文章还探讨了SQL... 目录一、mysql缓存机制概述二、MySQL整体架构三、SQL查询执行全流程四、MySQL 8.0为何移除查