Kafka基础入门

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.mzph.cn/news/104207.shtml

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

相关文章

0基础学习VR全景平台篇 第108篇:全景图细节处理(下,航拍)

上课!全体起立~ 大家好,欢迎观看蛙色官方系列全景摄影课程! (调色前图库) (原图-大图) 一、导入文件 单击右下角导入按钮,选择航拍图片所在文件夹,选择图片&#xff0…

【运维笔记】swow源码编译安装

swow的github网址 https://github.com/swow/swow 从github中拉取源码 git pull https://github.com/swow/swow.git 编译安装 github中readme文件讲述了安装方法 这里整理了命令,进入拉取项目的目录后依次执行命令即可 #pwd 确保自己在swow目录中,如…

docker 搭建本地Chat GPT

要在CentOS7上安装Docker,您可以按照以下步骤进行操作: 1、更新系统包列表 sudo yum update2、安装Docker存储库的必要软件包 sudo yum install -y yum-utils device-mapper-persistent-data lvm23、添加Docker存储库 sudo yum-config-manager --add…

3DEXPERIENCE® SOLIDWORKS® 新功能

先前版本的兼容性 优点 即使其他用户正在使用旧版 SOLIDWORKS,也能轻松与其 协作。 • 通过将您的 3DEXPERIENCE SOLIDWORKS 设计作品保存为旧 版本,与使用旧版本的供应商无缝协作。 • 将零件、装配体和工程图保存为最新版本前两年之内的 3DEXPERIENC…

centos7部署Nginx和RabbitMQ

文章目录 Nginx安装部署【简单】简介安装 RabbitMQ安装部署【简单】简介安装 Nginx安装部署【简单】 简介 Nginx (engine x) 是一个高性能的HTTP和反向代理web服务器,同时也提供了IMAP/POP3/SMTP服务。Nginx可以托管用户编写的WEB应用程序成为可访问的网页服务&am…

从零开始使用webpack搭建一个react项目

先做一个正常编译es6语法的webpack demo 1. 初始化package.json文件 npm init一路enter下去 2. 添加插件 {"name": "demo","version": "1.0.0","description": "","main": "index.js",&q…

《RISC-V体系结构编程与实践》的benos_payload程序——mysbi跳转到benos分析

1、benos_payload.bin结构分析 韦东山老师提供的开发文档里已经对程序的结构做了分析,这里不再赘述,下面是讨论mysbi跳转到benos的问题; 2、mysbi跳转到benos的代码 3、跳转产生的疑问 我认为mysbi.bin最后跳转到0x22000地址处执行&#xff0…

Pytorch从零开始实战05

Pytorch从零开始实战——运动鞋识别 本系列来源于365天深度学习训练营 原作者K同学 文章目录 Pytorch从零开始实战——运动鞋识别环境准备数据集模型选择数据可视化模型预测总结 环境准备 本文基于Jupyter notebook,使用Python3.8,Pytorch2.0.1cu118…

代码混淆界面介绍

代码混淆界面介绍 代码混淆功能包括oc,swift,类和函数设置区域。其他flutter,混合开发的最终都会转未oc活着swift的的二进制,所以没有其他语言的设置。 代码混淆功能分顶部的显示控制区域:显示方式,风险等…

centos7安装db2 version11.1

centos7安装DB2 操作系统 linux centos7 DB2版本 11.1 1、取包 IBM MRS Tool 将安装包放在 /home/software 下面 mkdir -p /home/software cd /home/software wget https://iwm.dhe.ibm.com/sdfdl/v2/regs2/db2pmopn/Express-C/DB2ExpressC11/Xa.2/Xb.aA_60_-i7wWKFMFpbW1xl1…

高压放大器在软体机器人领域的应用

软体机器人是一种新型机器人技术,与传统的硬体机器人有着很大的不同。软体机器人通常由柔软的材料制成,具有高度的柔韧性和灵活性,并且可以实现多种形状和动作。但是,软体机器人的发展面临很多技术挑战,其中之一就是控…

Java 解析 cURL(bash) 命令

解析 cURL(bash) 命令 1. 主要用于解析从浏览器复制来的 cURL(bash)2. 废话不多说,都在🍻代码里了。参考资料 1. 主要用于解析从浏览器复制来的 cURL(bash) curl https://eva2.csdn.net/v3/06981375190026432f77c01bfca33e32/lts/…

使用PyQt5创建图片查看器应用程序

使用PyQt5创建图片查看器应用程序 作者:安静到无声 个人主页 在本教程中,我们将使用PyQt5库创建一个简单的图片查看器应用程序。这个应用程序可以显示一系列图片,并允许用户通过按钮切换、跳转到不同的图片。 1. 准备工作 首先&#xff0…

在 TensorFlow 中调试

如果调试是消除软件错误的过程,那么编程一定是添加错误的过程。Edsger Dijkstra。来自 https://www.azquotes.com/quote/561997 一、说明 在这篇文章中,我想谈谈 TensorFlow 中的调试。 在之前的一些帖子(此处、此处和此处)中&…

谜题(Puzzle, ACM/ICPC World Finals 1993, UVa227)

有一个5*5的网格,其中恰好有一个格子是空的,其他格子各有一个字母。一共有4种指令:A, B, L, R,分别表示把空格上、下、左、右的相邻字母移到空格中。输入初始网格和指令序列(以数字0结束),输出指…

Linux shell编程学习笔记11:关系运算

Linux Shell 脚本编程和其他编程语言一样,支持算数、关系、布尔、字符串、文件测试等多种运算。前面几节我们研究了 Linux shell编程 中的 字符串运算 和 算术运算,今天我们来研究 Linux shell编程中的的关系运算。 一、关系运算符功能说明 运算符说明…

go语言基础之变量

目录 视频学习地址:Go零基础入门_在线视频教程-CSDN程序员研修院 一. 单变量声明和赋值 1、变量的声明 2、变量赋值 3、声明并赋值 二. 多变量声明和赋值 1、多变量声明 2、多变量赋值 三. 变量声明赋值的简易写法 1、单变量简易写法 2、多变量简易写法 …

DOSBox和MASM汇编开发环境搭建

DOSBox和MASM汇编开发环境搭建 1 安装DOSBox2 安装MASM3 编译测试代码4 运行测试代码5 调试测试代码 本文属于《 X86指令基础系列教程》之一,欢迎查看其它文章。 1 安装DOSBox 下载DOSBox和MASM:https://download.csdn.net/download/u011832525/884180…

uniapp封装loading 的动画动态加载

实现效果 html代码 <view class"loadBox" v-if"loading"><img :src"logo" class"logo"> </view> css代码 .loadBox {width: 180rpx;min-height: 180rpx;border-radius: 50%;display: flex;align-items: center;j…

【面试经典150 | 哈希表】存在重复元素 II

文章目录 Tag题目来源题目解读解题思路方法一&#xff1a;哈希表方法二&#xff1a;滑动窗口 其他语言python3哈希表python3滑动窗口 写在最后 Tag 【哈希表】【滑动窗口】【数组】 题目来源 219. 存在重复元素 II 题目解读 判断在数组中有没有相同的元素小于一定的距离。 解…