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

相关文章

MyBatis-plus处理存储json数据过程

《MyBatis-plus处理存储json数据过程》文章介绍MyBatis-Plus3.4.21处理对象与集合的差异:对象可用内置Handler配合autoResultMap,集合需自定义处理器继承F... 目录1、如果是对象2、如果需要转换的是List集合总结对象和集合分两种情况处理,目前我用的MP的版本

GSON框架下将百度天气JSON数据转JavaBean

《GSON框架下将百度天气JSON数据转JavaBean》这篇文章主要为大家详细介绍了如何在GSON框架下实现将百度天气JSON数据转JavaBean,文中的示例代码讲解详细,感兴趣的小伙伴可以了解下... 目录前言一、百度天气jsON1、请求参数2、返回参数3、属性映射二、GSON属性映射实战1、类对象映

redis-sentinel基础概念及部署流程

《redis-sentinel基础概念及部署流程》RedisSentinel是Redis的高可用解决方案,通过监控主从节点、自动故障转移、通知机制及配置提供,实现集群故障恢复与服务持续可用,核心组件包... 目录一. 引言二. 核心功能三. 核心组件四. 故障转移流程五. 服务部署六. sentinel部署

Java Kafka消费者实现过程

《JavaKafka消费者实现过程》Kafka消费者通过KafkaConsumer类实现,核心机制包括偏移量管理、消费者组协调、批量拉取消息及多线程处理,手动提交offset确保数据可靠性,自动提交... 目录基础KafkaConsumer类分析关键代码与核心算法2.1 订阅与分区分配2.2 拉取消息2.3

C# LiteDB处理时间序列数据的高性能解决方案

《C#LiteDB处理时间序列数据的高性能解决方案》LiteDB作为.NET生态下的轻量级嵌入式NoSQL数据库,一直是时间序列处理的优选方案,本文将为大家大家简单介绍一下LiteDB处理时间序列数... 目录为什么选择LiteDB处理时间序列数据第一章:LiteDB时间序列数据模型设计1.1 核心设计原则

Java+AI驱动实现PDF文件数据提取与解析

《Java+AI驱动实现PDF文件数据提取与解析》本文将和大家分享一套基于AI的体检报告智能评估方案,详细介绍从PDF上传、内容提取到AI分析、数据存储的全流程自动化实现方法,感兴趣的可以了解下... 目录一、核心流程:从上传到评估的完整链路二、第一步:解析 PDF,提取体检报告内容1. 引入依赖2. 封装

MySQL中查询和展示LONGBLOB类型数据的技巧总结

《MySQL中查询和展示LONGBLOB类型数据的技巧总结》在MySQL中LONGBLOB是一种二进制大对象(BLOB)数据类型,用于存储大量的二进制数据,:本文主要介绍MySQL中查询和展示LO... 目录前言1. 查询 LONGBLOB 数据的大小2. 查询并展示 LONGBLOB 数据2.1 转换为十

使用SpringBoot+InfluxDB实现高效数据存储与查询

《使用SpringBoot+InfluxDB实现高效数据存储与查询》InfluxDB是一个开源的时间序列数据库,特别适合处理带有时间戳的监控数据、指标数据等,下面详细介绍如何在SpringBoot项目... 目录1、项目介绍2、 InfluxDB 介绍3、Spring Boot 配置 InfluxDB4、I

Python利用PySpark和Kafka实现流处理引擎构建指南

《Python利用PySpark和Kafka实现流处理引擎构建指南》本文将深入解剖基于Python的实时处理黄金组合:Kafka(分布式消息队列)与PySpark(分布式计算引擎)的化学反应,并构建一... 目录引言:数据洪流时代的生存法则第一章 Kafka:数据世界的中央神经系统消息引擎核心设计哲学高吞吐

Java整合Protocol Buffers实现高效数据序列化实践

《Java整合ProtocolBuffers实现高效数据序列化实践》ProtocolBuffers是Google开发的一种语言中立、平台中立、可扩展的结构化数据序列化机制,类似于XML但更小、更快... 目录一、Protocol Buffers简介1.1 什么是Protocol Buffers1.2 Pro