Kafka基础入门

news2024/10/6 0:36:37

Kafka介绍

Kafka是什么?

kafka是一种分布式的,基于发布/订阅的消息系统。

Kafka的特点

分布式,吞吐量高,发布订阅模式,轻量灵活,较长时间持久化

Kafka的应用场景

解耦

  • 原先一个微服务是通过接口(HTTP)调用另一个微服务,这时候耦合很严重,只要接口发生变化就会导致系统不可用。
  • 使用消息队列可以将系统进行解耦合,现在第一个微服务可以将消息放入到消息

异步

电商网站中,新的用户注册时,需要将用户的信息保存到数据库中,同时还需要额外发送注册的邮件通知、以及短信注册码给用户。但因为发送邮件、发送注册短信需要连接外部的服务器,需要额外等待一段时间,此时,就可以使用消息队列来进行异步处理,从而实现快速响应。
比较常见的:发送短信验证码、发送邮件

削峰

  • 因为消息队列是低延迟、高可靠、高吞吐的,而且消息队列不需要处理业务
    ,所以消息队列可以应对大量并发,

日志处理

可以使用消息队列作为临时存储,或者一种通信管道

消息队列通信的模式

点对点模式

Queue支持存在多个消费者,但是对一个消息而言,只会有一个消费者可以消费。

发布订阅模式

多个消费者可以消费一个消息
每个消息可以有多个订阅者,消息队列收到的消息,每个订阅这个主题的消费者都可以消费

发布订阅模式还有消费组的形式,多个消费者组成一个消费组,一个消费组里只有一个消费者能消费这条信息。

两种消费模式

推模式

在推模式下,由消息队列主动把消息推送给消费者消费。

拉模式

由消费者监控现队列的状态,主动拉取消息消费。

Kafka架构中关键概念

Broker

Kafka是以集群的形式运行的,集群的节点就叫broker,每个broker都有对应的编号

Topic

主题是一个逻辑概念,用于生产者发布数据,消费者拉取数据,生产者将数据发送到Kafka的topic上,订阅了这个topic的消费者就能消费到这些数据。

Producer

生产者,负责将数据推送给broker的topic

Consumer

消费者,负责从broker的topic中拉取数据,并自己进行处理

Partition

在Kafka集群中,topic被分为多个分区。这些分区会分布在不同的broker节点上。

Replica

每个分区由多个副本构成,副本的目的就是冗余备份,当某个Broker上的分区数据丢失时,依然可以保障数据可用。因为在其他的Broker上的副本是可用的。

  • 每个分区都是由多个副本组成,每个分区有多个副本。
  • 多个副本中,有一个是leader副本,而其他的都是follower副本。
  • leader副本负责Kafka的读写,follower副本负责与leader副本的数据同步。副本可以确保某个服务器出现故障时,确保数据依然可用。
  • kafka的副本数量不能大于broker节点数量
  • Kafka的副本会均匀分配在所有的broker节点上,不会出现一个分区的两个副本出现在同一个broker节点

Consumer Group

一个消费者组可以包含多个消费者,组内的消费者根据消费策略,一起消费主题的所有分区数据.

offset偏移量

在Kafka中,每个主题都被分成多个分区,每个分区都是一个有序的消息队列。每条消息在分区中都有一个唯一的偏移量(offset),它表示了这条消息在分区中的位置。消费者在消费消息时,会记录它当前消费到的位置,也就是offset。这样,如果消费者停止或失败,它可以根据记录的offset继续从上次离开的地方开始消费。offsets可以存储在Kafka或ZooKeeper中,以便在消费者重新启动或故障转移时进行恢复。
消费者的offsets存储在一个名为__consumer_offsets的内部Kafka主题中。

主题,分区,副本,日志段之间的关系

一个主题分为多个分区,每个分区由多个副本组成,每个分区的多个副本分为leader和follower,leader负责数据的读写,follower负责和leader数据进行同步。分区的数据记录在多个.log文件中,一个.log大小大于某个值时,会再创建一个文件存进入Kafka的数据。

kafka的日志段(.log文件)和索引文件(.index文件)

生产者发送到kafka的数据最终是存在log中,每个log都是由一个.log和.index文件组成。数据进来时,将数据追加到.log,将数据在.log中的索引追加到.index。当.log文件达到一定的大小后,kafka会新建一个.log和.index存储之后的数据,文件名字以新的索引起始点命名。

在消费者消费的时候,会记录自己消费的位置的offset偏移量,消费组会先根据这个偏移量确定自己需要消费的数据在哪个日志文件,之后通过二分查找.index索引文件找到自己需要消费的数据的位置。

消费组

概述

kafka可以由多个消费者构成一个消费组去消费topic。
topic的分区会根据消费策略均匀的分配给消费组中的每个消费者。

消费者组的优势

  • 高性能

假设一个主题有10个分区,如果没有消费者组,只有一个消费者对这10个分区消费,他的压力肯定大。

如果有了消费者组,组内的成员就可以分担这10个分区的压力,提高消费性能。

  • 消费模式灵活

假设有4个消费者订阅一个主题,不同的组合方式就可以形成不同的消费模式。

使用4个消费者组,每组里放一个消费者,利用分区在消费者组间共享的特性,就实现了广播(发布订阅)模式。


只使用一个消费者组,把4个消费者都放在一起,利用分区在组内成员间互斥的特性,就实现了单播(队列)模式。

  • 故障容灾和动态扩容

如果只有一个消费者,出现故障后就比较麻烦了,但有了消费者组之后就方便多了。

消费组会对其成员进行管理,在有消费者加入或者退出后,消费者成员列表发生变化,消费组就会执行再平衡的操作。

例如一个消费者宕机后,之前分配给他的分区会重新分配给其他的消费者,实现消费者的故障容错。

同时可以主动在消费组内增加或减少消费者,自动触发重平衡,重新分配topic的分区,适应消费压力的变化。

消费者组Rebalance机制

Rebalance机制的目的是实现负载均衡和容错。当新的消费者加入消费组时,Rebalance过程会将一些分区重新分配给新的消费者,以实现负载均衡。当现有的消费者离开消费组时,Rebalance过程会将它所消费的分区重新分配给其他消费者,以实现容错

Rebalance触发的时机

  • 当消费者组中消费的个数发生变化
  • topic数目发生变化
  • topic分区数发生变化

消费者分区分配策略

Range范围分配策略

RoundRobin轮询策略

Stricky粘性分配策略

  • 分区的分配要尽可能的均匀
  • 分区的分配尽可能的与上次分配的保持相同

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1090069.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

2023年中国芝麻酱行业供需分析:需求量同比增长3.5%[图]

芝麻酱也叫麻酱,是把炒熟的芝麻磨碎制成的食品,有香味,作为调料食用。根据所采用的芝麻的颜色,可分为白芝麻酱和黑芝麻酱;芝麻酱是群众非常喜爱的香味调味品之一。食用以白芝麻酱为佳,滋补益气的以黑芝麻酱…

动态内存管理(malloc calloc realloc free)--- C语言

文章目录 写在前面1. malloc 和 free函数1.1 malloc函数介绍1.2 free函数介绍 2. calloc函数3. realloc函数4. 常见的动态内存错误4.1 对NULL指针的解引用操作4.2 对动态开辟空间的越界访问4.3 对非动态开辟内存使用free释放4.4 使用free释放一块动态开辟内存的一部分4.5 对同一…

Windows 移动设备管理

Windows 设备管理是指一组流程和工具,可帮助 IT 管理员简化企业中使用的Windows 设备的管理。管理企业中使用的 Windows 设备最好通过实施Windows MDM 解决方案来完成,以从单个控制台保护、管理和监视这些设备。Windows移动设备管理 (MDM&…

CakePHP 3.x/4.x反序列化RCE链

最近网上公开了cakephp一些反序列化链的细节,但是没有公开poc,并且网上关于cakephp的反序列化链比较少,于是自己跟一下 ,构造pop链。 CakePHP简介 CakePHP是一个运用了诸如ActiveRecord、Association Data Mapping、Front Contr…

美团Leaf使用

简介 在复杂分布式系统中,往往需要对大量的数据和消息进行唯一标识。如在美团点评的金融、支付、餐饮、酒店、猫眼电影等产品的系统中,数据日渐增长,对数据分库分表后需要有一个唯一ID来标识一条数据或消息,数据库的自增ID显然不…

全面解析找不到msvcr100.dll的解决方法,快速修复系统msvcr100.dll丢失问题!

在计算机的使用过程中,我们可能会遇到各种问题,其中之一就是“msvcr100.dll丢失”的问题。这个问题通常出现在运行某些程序或游戏时,提示找不到msvcr100.dll文件。这个文件是Microsoft Visual C 2010 Redistributable Package的一部分&#x…

学习 MPP 与 SMP 的区别,终于有人讲明白了

文章目录 01 SMPSMP 的典型特征如下:SMP 的缺点如下。 02 分布式MPP计算架构MPP 架构核心原理如下。 导读:当今数据计算领域主要的应用程序和模型可大致分为在线事务处理(On-line Transaction Processing ,OLTP)、决策…

山西电力市场日前价格预测【2023-10-14】

日前价格预测 预测说明: 如上图所示,预测明日(2023-10-14)山西电力市场全天平均日前电价为221.03元/MWh。其中,最高日前电价为341.15元/MWh,预计出现在18: 45。最低日前电价为0.00元/MWh,预计出…

招投标系统软件源码,招投标全流程在线化管理

功能描述 1、门户管理:所有用户可在门户页面查看所有的公告信息及相关的通知信息。主要板块包含:招标公告、非招标公告、系统通知、政策法规。 2、立项管理:企业用户可对需要采购的项目进行立项申请,并提交审批,查看所…

lv8 嵌入式开发-网络编程开发 17 套接字属性设置

1 基本概念 设置套接字的选项对套接字进行控制除了设置选项外,还可以获取选项选项的概念相当于属性,所以套接字选项也可说是套接字属性有些选项(属性)只可获取,不可设置;有些选项既可设置也可获取 2 选项…

Android组件通信——消息机制(二十六)

1. 消息机制 1.1 知识点 (1)掌握Message、Handler、Looper类的使用以及消息的传递; (2)可以通过消息机制动态取得信息; 1.2 具体内容 对于android的消息机制,我们主要要使用Java中线程的一…

医生访问学者出国进修必备面试技巧

医生访问学者出国进修,一直以来都是医学领域内追求更高学术水平和国际化视野的重要途径之一。然而,要成功进入国外院校或研究机构进行进修,首先需要通过面试,因此,面试技巧显得尤为关键。本文知识人网小编将为您介绍一…

LeetCode 739 每日温度(单调栈的初步了解)

1、重新学习了栈的操作&#xff0c;isEmpty()、peek()以及pop()、push()操作 但是值得注意的点是push()必须要有输入 2、单调栈用在这里非常巧妙&#xff0c;通过暴力搜索的方法无法通过最后一个用例 并且通过使用单调栈可以使得时间复杂度从O()降到了O() 3、Deque<Inte…

竞赛 深度学习+opencv+python实现车道线检测 - 自动驾驶

文章目录 0 前言1 课题背景2 实现效果3 卷积神经网络3.1卷积层3.2 池化层3.3 激活函数&#xff1a;3.4 全连接层3.5 使用tensorflow中keras模块实现卷积神经网络 4 YOLOV56 数据集处理7 模型训练8 最后 0 前言 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分享的是 &am…

回归预测 | MATLAB实现CNN-LSSVM基于卷积神经网络-最小二乘支持向量机的数据回归预测(多指标,多图)

回归预测 | MATLAB实现CNN-LSSVM基于卷积神经网络-最小二乘支持向量机的数据回归预测&#xff08;多指标&#xff0c;多图&#xff09; 目录 回归预测 | MATLAB实现CNN-LSSVM基于卷积神经网络-最小二乘支持向量机的数据回归预测&#xff08;多指标&#xff0c;多图&#xff09;…

关于信息安全软考的记录6

1、入侵检测相关概念 及 入侵检测模型 入侵&#xff1a;违背访问目标的安全策略的行为 判断入侵的依据是&#xff1a;对目标的操作是否超出了目标的安全策略范围 入侵检测&#xff1a;通过收集操作系统、系统程序、应用程序、网络包等信息&#xff0c;发现系统中违背安全策略…

【unity】【VR】白马VR课堂系列-VR开发核心基础04-主体设置-XR Rig的引入和设置

接下来我们开始引入并构建XR Rig。 你可以将XR Rig理解为玩家在VR世界中的替身。 我们先删除Main Camera&#xff0c;在Hierarchy右键点击删除。 然后再在场景层右键选择XR下的XR Origin。这时一个XR Origin对象就被添加到了Hierarchy。 重设XR Origin的Position和Rotation…

C++中将十六进制数转化为字符串数据

C中将十六进制数转化为字符串数据 1、十六进制转字符串2、string转char[]3、调用4、调试结果 1、十六进制转字符串 std::string Number2HexStr( uint32_t mData ) {std::stringstream ss;ss << std::hex << std::setw(2) << std::setfill(0) << (int)…

快速排序 O(nlgn)

大家好&#xff0c;我是蓝胖子&#xff0c;我一直相信编程是一门实践性的技术&#xff0c;其中算法也不例外&#xff0c;初学者可能往往对它可望而不可及&#xff0c;觉得很难&#xff0c;学了又忘&#xff0c;忘其实是由于没有真正搞懂算法的应用场景&#xff0c;所以我准备出…

el-dialog两个弹框里面套弹框受外层弹框影响

el-dialog嵌套的影响及解决方法 解决方法如下&#xff1a; 在里层弹框里添加 append-to-body <el-dialogtitle"图片预览":visible.sync"dialogVisible"class"imgDialog":modal"false"append-to-body><img width"100%&q…