Kafka基础概念介绍

news2024/11/24 0:54:42

背景

Kafka是我们项目用的最多的消息中间件,但里面也有很多存在的问题,如重复消费、带宽瓶颈、部分分区消费不下来的异常场景。 重复消费问题有些让人头疼(reblance导致offset提交失败),这里会持续更新(基于官网+视频),研究kafka部分底层知识点,希望对我们代码设计和代码编写能力上有一定的提升。

概念

消息队列

我们都知道栈,先进后出,消息队列先进先出。两者都是容器(可以把它看作一个特大的数组存储数据),常用的消息队列我们都知道有ActiveMQ、RabbitMQ、RocketMQ乃至java自带的阻塞队列BlockingQueue,大体应用都相似。
网上说的一大堆功能,我理解最直白的,就是一个实时性很强的消息容器,作为一个容器,容器有的功能它都有,来吧来吧,我都存着,根据自己肠胃大小慢慢吃(消费)…于是就有了以下功能,大家自己品

  • 削峰
  • 应用解耦
  • 异步

消息传递模式

  • 点对点传递模式
    简单说,生产者生产,消费者消费,两者互不影响,消费者消费成功后,删除消息队列的消息~
    特点:每个消息只能被消费一次(重复消费特殊场景这里不考虑)
    在这里插入图片描述

  • 发布-订阅模式
    生产者生产消息到topic,0个或多个消费组订阅该topic,一个消息可以在不同的消费组消费(kafka便是这种,不过一般来说消费组一般都是一个,除非本身我们要对比消费数据或修复因代码逻辑问题补充已消费过的消息)
    在这里插入图片描述

kafka概念理解

kafka是典型的发布订阅模式,这里举个例子帮我们了解kafka的基本概念。
例:我们网站是卖鞋子的

  1. 我想将用户搜索鞋子的尺码、品牌信息+客户信息保存下来,方便下次精准推送相关产品,如果我们每次搜都落库,是不是很慢,好,我直接发送到kafka,微服务X订阅该topic慢慢消费(异步+削峰)。
  2. 客户跟客服聊天的内容,我这边要校验你们是否存在刷单的词汇,或其它敏感词汇,好,我也发送到kafka,微服务Y订阅该topic 消费校验(解耦)

以上1点和2点很明显,两个不大相关的功能,kafka集群肯定用一个的是吧,好,那我可以建两个不同的topic(topic说白了就是区分业务的)。 假设1使用 A(topic),2使用 B(topic),X订阅A消费,Y订阅B消费,X和Y微服务都是消费者。 假设X微服务主机性能利用率不高,Y微服务主机性能超载,那X是不是可以再订阅B,添加Y的处理逻辑,帮忙分担消费的压力。 好,此时X和Y使用同一个消费组就行。
假设Y微服务主机老是丢数据,可能内部逻辑处理有问题。此时我需要将Y消费的消息同步消费下来(拷贝一份,直接埋点日志)做个对比,新启一个消费组消费Topic:B 就行了。

主题(topic)

上面的例子,topic理解起来就很简单了,这里不再赘述

分区(partition)

分区是kafka非常重要的一个的一个概念,这跟我们定义消费线程有很大关系,一个topic可以有多个分区,消息根据不同的分配策略发送到这些分区(轮询,hash,指定分区)

  • 问:消息如何保证被顺序消费呢?
    kafka无法保证,如果消息一定要严格按照顺序消费,该topic定义一个分区即可,但kafka可以保证同一个分区的数据是顺序的。
  • 问:kafka为什么有分区的概念?
    提高并发处理,一个池子多个线程抢着消费,还不如多个池子分配给多个线程消费。 这里补充一点一个分区只能被一个消费线程消费,如果消费线程定义过多,会有部分线程是空跑状态,这里大家可以先想原因------------------------------提示:3多个线程消费同一个分区,会有一个并发问题,提交已消费的offset偏移量,大家自己品。
  • 问:是不是分区越多越好?
    分区定义最好是broker(kafka节点的整数倍),每个broker有相对均衡的分区,减少broker性能上有偏差。定义的大小根据消费组的消费线程来决定。 我们可以这么想,消费下游能力不够,消费上游再多也是枉然的。
    在这里插入图片描述

消费者

谈到消费者,这里必须谈到消费组,一个topic可以被多个消费组订阅,每个消费组可以有多个消费线程,一个分区只能被一个消费线程消费,一个消费线程可以消费多个分区。
在这里插入图片描述

生产者

生产者创建消息,发送到kafka,一般情况下都是发送到一个特定topic,发送到的分区逻辑如下

  1. 默认情况下,消息数量count递增,并根据分区的大小数值取模,计算得出partition(轮询)。
  2. 业务指定往哪个分区发
  3. 业务可以埋点key,通过该key的hash,计算出partition,保证该key发送到的partition唯一。
    例:收集某个主机的日志,主机IP作为key,那么该主机的日志只会往这个partition发送。

broker与partition之间的关系

一个独立的kafka服务器节点称为一个broker,broker接收生产者的消息,为它设置偏移量。一个kafka集群都有一个broker集群控制器,监控其他broker,并为broker分配分区。
分区也有首领,分区首领处理该分区的消息存储和消费逻辑,并同步该分区数据到其他broker,一旦该分区首领出现宕机情况,会选举其他broker节点的partition作为分区首领。
在这里插入图片描述

副本

kafka为保证一台乃至多台broker宕机情况下能正常提供服务,特此有了副本的概念,即数据备份。 但kafka的副本有些不同,分为首领副本和跟随者副本,为了保证⼀致性,所有⽣产者请求和消费者请求都会经过这个首领副本。 ⾸领以外的副本都是跟随者副本。跟随者副本不处理来⾃客户端的请求,它们唯⼀的任务就是从⾸领那⾥复制消息,保持与⾸领⼀致的状态。如果⾸领发⽣崩溃,其中的⼀个跟随者会被提升为新⾸领。

offset

偏移量,每个消息有自己唯一的偏移量,生产者创建消息,partition会给消息设置生产偏移量,也是该分区的最大偏移量。 消费者消费消息时,kafka会记录消费组已消费的offset,即消费偏移量。
在这里插入图片描述
在这里插入图片描述

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

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

相关文章

UML简介与类图详解

1 UML简介 1.1 UML是什么 UML,全称为Unified Model Language,即统一建模语言,是由一整套图表组成的,为面向对象系统的产品进行说明、可视化和编制文档的一种标准语言。UML 代表了一组最佳工程实践,这些实践已被证明在…

【路径规划】基于哈里斯鹰优化算法的栅格法路径规划 机器人路径规划【Matlab代码#20】

文章目录 1. 原始HHO算法2. 机器人路径规划环境创建3. 路径规划模型建立4. 部分代码展示5. 仿真结果展示6. 资源获取方式 1. 原始HHO算法 详细介绍此处略,可参考HHO算法介绍 2. 机器人路径规划环境创建 对机器人工作空间的进行环境建模是机器人路径规划研究的重要…

【电源专题】案例:拆一个早期用的万能充看看内部状况

说到万能充,可能存在80/90后的记忆里。以前手机都可以更换电池的,所有往往都是买两块,一块在手机内部使用,另一块在万能充充电。 万能充的外观也是大同小异的,从网上找了一些图片: 这东西现在日常生活已经都看不到了,关键因素之一应该是现在的手机电池都是不可拆…

多维图像去噪方法研究

一、背景介绍 由于传感器技术的快速发展,高光谱(HS)遥感(RS)成像为飞机等数据采集设备远距离观测和分析地球表面提供了大量的空间和光谱信息,航天器和卫星。 HS RS 技术的最新进展甚至革命为实现各种应用的…

【ONE·C++ || set和map(一)】

总言 主要介绍set和map的基本框架和使用 文章目录 总言1、部分接口介绍和使用举例1.1、序列式容器和关联式容器、键值对1.1.2、pair键值对 1.2、set基本介绍1.2.1、set::set、遍历1.2.2、set::insert、set::erase、set::find1.2.3、set::count、set::lower_bound、set::upper_…

数据结构与算法基础(青岛大学-王卓)(1)

士别三日当刮目相待,不好意思鸽了好久了,因为学习的时间不连续,所以我一直攒着,我又回来继续更新了 没有继续学习浙大的数据结构了,对比了青岛大学的王老师的这个教程我觉得更适合我一些,更入门&#xff0…

【Spring篇】Spring整合

🍓系列专栏:Spring系列专栏 🍉个人主页:个人主页 目录 一、Spring整合 1.Spring整合Mybatis思路分析 1.环境准备 2.整合思路分析 2.Spring整合Mybatis 3.Spring整合Junit 1.环境准备 2.整合Junit步骤 二、图书推荐 1.《元宇宙Ⅱ:图…

Ubuntu安装MySQL

一.安装MySQL服务器 安装MySQL服务器: apt-get install mysql-server 对MySQL进行初始化,设置密码: mysql_secure_installation 注意,这里要设置密码的最低长度为8位,如果你设的密码小于8位,则会提示&am…

有趣工具合集小程序-做你的小树洞小程序

有趣工具合集小程序-做你的小树洞 今天闲来无事,发现了一个有趣的小程序-做你的小树洞,包含ChatGpt小机器人、抛硬币、手持弹幕、亲戚计算器、藏头诗、唐诗三百首、歇后语以及猜谜语等功能 小程序总体界面是这样的 1.藏头诗 这个小程序里边有很多有趣…

Redis的哨兵和集群模式

哨兵模式# 哨兵模式是redis高可用的实现方式之一 使用一个或者多个哨兵(Sentinel)实例组成的系统,对redis节点进行监控,在主节点出现故障的情况下,能将从节点中的一个升级为主节点,进行故障转义,保证系统的可用性。 哨…

【Qt5】多线程串口

文章目录 原版代码工程增加QCustomplot实时画图的源码工程源码 原版代码工程 源码下载链接: 链接:https://pan.baidu.com/s/15pWzadPwOx_OfJGtvL-MjA 提取码:lief –来自百度网盘超级会员V5的分享 增加QCustomplot实时画图的源码工程 源码&…

【Mybatis】增删改查

1.添加相应的jar包 2.创建持久化类 在src目录下创建一个名为com.mybatis.po的包 创建持久化类MyUser,包含三个属性(uid,uname,usex) package com.mybatis.po; /***springtest数据库中user表的持久化类*/ public class MyUser {private Integer uid;//主键private…

滴水逆向三期笔记与作业——02C语言——02数据类型

海哥牛逼 这里写自定义目录标题 一、C语言如何变成汇编1、裸函数 二、调用约定1、常见的几种调用约定 三、程序的真正入口四、数据类型4.1 C语言中的数据类型 作业 一、C语言如何变成汇编 1、裸函数 裸函数使用特殊方式定义,编译器和连接器并不会为其生成提升堆栈…

华为网工实验(VRRP多网关负载分担,OSPF基础操作)

采用VRRP多网关负载分担实现流量的负载均衡 配置思路:首先配置各个接口ip,让设备间能够实现通信,采用OSPF协议实现通信,然后AR2 AR3创建两个备份组,主备不同的两个备份组 组网图 #先设备命名并配置IP,三台设备类似&a…

路由器拨号密码恢复

背景 路由器拨号上网的密码因时间久远遗忘了,恢复并记录下过程。 步骤 1,安装wireshark choco install wireshark -y 注意 实践发现wireshark安装后,启动提示还需要安装Npcap 或者 Winpcap, 不过,在winpcap官网提示它已不再开…

虚拟机的克隆

第一步: 虚拟机右击 -> 管理 ->克隆 第二步: 在这一步勾选创建完整克隆,其他的都下一步 第三步 1.修改 mac地址 点击生成,就会生成一个随机的mac地址 2.修改主机名 vim /etc/hostname 修改完主机名后 reboot 重启虚拟机…

C++ STL学习之【优先级队列】

✨个人主页: 北 海 🎉所属专栏: C修行之路 🎃操作环境: Visual Studio 2019 版本 16.11.17 文章目录 🌇前言🏙️正文1、优先级队列的使用1.1、基本功能1.2、优先级模式切换1.3、相关题目 2、模拟…

蛋白质界的 ChatGPT:AlphaFold1 论文必备知识,不会有人还不知道吧

你知道 AlphaFold2 吗?它真正解决了蛋白质三维结构预测的算法困境,堪称蛋白质界的 chat-GPT4,甚至它的意义不是 chat-GPT4 所能够匹敌的。它为世界疾病治疗药物开发以及探究生物生命之谜提供了通向天神的一条道路,未来是生物的世纪…

Android开机时间工具分析

背景 android 上面有很多的方法可以分析开机时间 比如打log,通过log 分析。android 的官网上面提供了下面的两种图形化的方式来分析开机时间,一些异常很明显的拖长整个开机时间的活动 可以很容易就看出来。 问题 android 官网和网上的教程很多都不适用于…

【解决方案】基于边缘视频AIBox的校园立体防控解决方案

基于边缘AIBox的校园立体防控解决方案 一、方案背景 智慧校园安全防控系统是一款围绕学校周界安全、出入口安全、人身安全、消防安全、财产安全等校园安全场景打造的主动智能预警防控系统。它利用人工智能技术对校内及周边环境进行全天候24h实时监测和智能分析,对…