Kafka消息队列学习(一)

news2024/11/26 10:28:12

文章目录

  • 概述
  • 核心概念
    • 生产者
      • 示例
      • 同步 / 异步发送消息
      • 生产者参数配置
        • ack-确认机制
        • retries - 重试次数
        • compression_type - 消息压缩类型
    • 分区机制
      • 分区策略
    • 消费者
      • 消息有序性
      • 提交和偏移量
        • 偏移量提交方式
        • 手动提交
    • 高可用设计
  • SpringBoot集成Kafka
    • 基本使用
    • 传递对象消息

概述

在这里插入图片描述
在这里插入图片描述

核心概念

Kafka将生产者发布的消息发布到topic中,需要这些消息的消费者可以订阅这些主题。
下面这张图也为我们引出了,Kafka 比较重要的几个概念:

  • Producer(生产者) : 产生消息的一方。

  • Consumer(消费者) : 消费消息的一方。

  • Broker(代理 / 单个kafka实例):可以看作是一个独立的Kafka实例。

    • 多个Kafka Broker组成一个Kafka Cluster。
    • 每个 Broker 中又包含了 Topic 以及 Partition这两个重要的概念
  • Topic(主题) : Producer将消息发送到特定的主题,Consumer通过订阅特定的 Topic(主题) 来消费消息。

  • Partition(分区 / 队列) : Partition 属于 Topic 的一部分。一个 Topic 可以有多个 Partition ,并且同一 Topic 下的 Partition 可以分布在不同的 Broker 上,这也就表明一个 Topic 可以横跨多个 Broker
    划重点:Kafka 中的 Partition(分区) 实际上可以对应成为消息队列中的队列。

  • 消费者组:同一个消费者组中,多个消费者订阅同一个topic,只有一个消费者可以接收到消息。

在这里插入图片描述

生产者

示例

在这里插入图片描述
在这里插入图片描述

同步 / 异步发送消息

在这里插入图片描述
在这里插入图片描述

生产者参数配置

ack-确认机制

在这里插入图片描述

retries - 重试次数

在这里插入图片描述

compression_type - 消息压缩类型

在这里插入图片描述

分区机制

在这里插入图片描述
kafka分区机制,允许消息存放在不同broke的不同分区上。
在这里插入图片描述

分区策略

默认是轮询。在这里插入图片描述

消费者

在这里插入图片描述
在这里插入图片描述

消息有序性

在这里插入图片描述
在这里插入图片描述
消息都发给同一个分区,就可以保证消息有序性。

提交和偏移量

消费者在消费消息时,可以追踪消息再分区的位置(偏移量),并自动向一个叫做_consumer_offset的特殊topic发送消息,包含了分区的偏移量。

在这里插入图片描述

如果消费者发送崩溃或者有新的消费者加入群组,会触发再平衡。例如消费者2挂掉了,那么分区3和分区4将被再平衡机制,指向到其他消费者。
在这里插入图片描述
在自动提交偏移量模式下,再平衡机制可能会引发问题,因为挂掉的消费者提交的消息偏移量与新指定的消费者正在处理的消息偏移量是不一致的。
提交偏移量小于正在处理的偏移量:
在这里插入图片描述
如果提交的偏移量小于正在处理的最后一个消息的偏移量,那么处于两个偏移量之间的消息就会被重复处理。

提交偏移量大于正在处理的偏移量:
在这里插入图片描述
如果提交的偏移量大于正在处理的最后一个消息的偏移量,那么处于两个偏移量之间的消息将会丢失。

偏移量提交方式

在这里插入图片描述

手动提交

首先将自动提交设置为false:
在这里插入图片描述

同步提交
使用 commitSync() 提交偏移量最简单也最可靠。这个 API 会提交由 poll() 方法返回的最新偏移量,提交成功后马上返回,如果提交失败就抛出异常。
在这里插入图片描述
commitSync() 将会提交由 poll() 返回的最新偏移量,所以在处理完所有记录后要确保调用了 commitSync(),否则还是会有丢失消息的风险。

如果发生了再均衡,从最近一批消息到发生再均衡之间的所有消息都将被重复处理。

同时在这个程序中,只要没有发生不可恢复的错误,commitSync() 方法会一直尝试直至提交成功。如果提交失败,我们也只能把异常记录到错误日志里。

异步提交
同步提交有一个不足之处,在 broker 对提交请求作出回应之前,应用程序会一直阻塞,这样会限制应用程序的吞吐量。我们可以通过降低提交频率来提升吞吐量,但如果发生了再均衡,会增加重复消息的数量。 这个时候可以使用异步提交 API。我们只管发送提交请求,无需等待 broker 的响应。
在这里插入图片描述
在成功提交或碰到无法恢复的错误之前,commitSync() 会一直重试,但是 commitAsync() 不会,这也是 commitAsync() 不好的一个地方。 它之所以不进行重试,是因为在它收到服务器响应的时候,可能有一个更大的偏移量已经提交成功。假设我们发出一个请求用于提交偏移量 2000,这个时候发生了短暂的通信问题,服务器收不到请求,自然也不会作出任何响应。与此同时,我们处理了另外一批消息,并成功提交了偏移量 3000。如果 commitAsync() 重新尝试提交偏移量 2000,它有可能在偏移量 3000 之后提交成功。这个时候如果发生再均衡,就会出现重复消息。 commitAsync() 也支持回调,在 broker 作出响应时会执行回调。回调经常被用于记录提交错误或生成度量指标。如果要用它来进行重试,则一定要注意提交的顺序。

同步和异步混合提交
一般情况下,针对偶尔出现的提交失败,不进行重试不会有太大问题,因为如果提交失败是因为临时问题导致的,那么后续的提交总会有成功的。 但如果这是发生在关闭消费者或再均衡前的最后一次提交,就要确保能够提交成功。因此在这种情况下,我们应该考虑使用混合提交的方法:
在这里插入图片描述

高可用设计

  1. 集群方式(cluster),一个kafka集群由多个broke组成,一个broke宕机,其他机器上的broke依然可以对外服务。

在这里插入图片描述

  1. 备份机制(replication):kafka中为了保证消息的安全性,将信息进行了备份,并且定义了两类副本:
    • 领导者副本:生产者首先将消息发送到领导者副本进行备份,领导者副本只有一个。
    • 追随者副本 :领导者副本,将自己的消息与追随者副本进行同步。追随者副本可以有多个,且可以分为两类:
      • ISR(in - sync replica):需要同步复制保存的follower。
      • 普通: 与领导者副本之间是异步保存。
    • 当leader失效后,需要选出新的leader,选举原则如下:
      • 优先从ISR中选择,因为ISR中的消息数据是与leader同步的
      • 如果ISR列表中的follower都不行了,就只能从其他follow中选取。
      • 极端情况:所有副本都失效了,这时有两种方案:
        • 等待ISR中的一个活过来,选为leader,数据可靠,但是时间不确定。
        • 选择第一个活过来的副本为leader,不一定位ISR中的, 以最快速度恢复可用性,但是数据不一定完整。

在这里插入图片描述
在这里插入图片描述

SpringBoot集成Kafka

基本使用

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

传递对象消息

在这里插入图片描述

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

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

相关文章

虚拟机内搭建CTFd平台搭建及CTF题库部署,局域网内机器可以访问

一、虚拟机环境搭建 1、安装docker、git、docker-compose ubuntu: sudo apt-get update #更新系统 sudo apt-get -y install docker.io #安装docker sudo apt-get -y install git #安装git sudo apt-get -y install python3-pip #安装pip3 sudo pip install dock…

最新版彩虹知识付费商城源码 V3.4

介绍 最新彩虹知识付费商城初创体验版,支持二级分类,多级分销,秒杀,砍价,团购,首页继续浏览,分站个人虚拟余额自定义,最新批量对接,批量下载图片,批量替换标…

云开发超多功能工具箱组合微信小程序源码/附带流量主

介绍: 这是一款云开发超多功能工具箱组合微信小程序源码附带流量主功能,小程序内包含了40余个功能,堪称全能工具箱了,大致功能如下: 证件照制作 | 垃圾分类查询 | 个性签名制作 二维码生成丨文字九宫格 | 手持弹幕丨…

yo!这里是STL::适配器相关模拟实现

目录 前言 适配器介绍 deque介绍(了解) 容器适配器与普通容器的联系 stack模拟实现 queue模拟实现 priority_queue模拟实现 介绍 实现 反向迭代器模拟实现 介绍 实现 在list类中调用 在vector类中调用 后记 前言 在介绍完string、vector、…

chapter 1 formation of crystal, basic concepts

chapter 1 晶体的形成 1.1 Quantum Mechanics and atomic structure 1.1.1 Old Quantum Theory problems of planetary model: atom would be unstableradiate EM wave of continuous frequency to solve the prablom of planetary model: Bohr: Quantum atomic structureP…

算符优先文法语法分析

1、实验目的及要求 1.1、实验目的 加深对语法分析器工作过程的理解;加强对算符优先分析法实现语法分析程序的掌握;能够采用一种编程语言实现简单的语法分析程序;能够使用自己编写的分析程序对简单的程序段进行语法翻译。 1.2、实验要求 花一…

小龟带你妙写排序之选择排序

选择排序 一. 原理二. 题目三. 思路分析四. 代码 一. 原理 选择排序(Selection-sort)是一种简单直观的排序算法。 工作原理:首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置,然后,再从剩余未…

C语言快速回顾(三)

前言 在Android音视频开发中,网上知识点过于零碎,自学起来难度非常大,不过音视频大牛Jhuster提出了《Android 音视频从入门到提高 - 任务列表》,结合我自己的工作学习经历,我准备写一个音视频系列blog。C/C是音视频必…

AtCoder Beginner Contest 314

A.直接模拟就行 #include <bits/stdc.h> using namespace std; const int N 2e510; #define int long long int n,m; string s"3.1415926535897932384626433832795028841971693993751058209749445923078164062862089986280348253421170679";void solve(){cin…

【电池-超级电容器混合存储系统】单机光伏电池-超级电容混合储能系统的能量管理系统(Simulink仿真)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

Three.js 实现材质边缘通道发光效果

相关API的使用&#xff1a; 1. EffectComposer&#xff08;渲染后处理的通用框架&#xff0c;用于将多个渲染通道&#xff08;pass&#xff09;组合在一起创建特定的视觉效果&#xff09; 2. RenderPass(是用于渲染场景的通道。它将场景和相机作为输入&#xff0c;使用Three.…

MySQL数据库----------安装anaconda---------python与数据库的链接

作者前言 &#x1f382; ✨✨✨✨✨✨&#x1f367;&#x1f367;&#x1f367;&#x1f367;&#x1f367;&#x1f367;&#x1f367;&#x1f382; ​&#x1f382; 作者介绍&#xff1a; &#x1f382;&#x1f382; &#x1f382; &#x1f389;&#x1f389;&#x1f389…

【福建事业单位-数学运算】04计算、最值和几何

【福建事业单位-数学运算】04计算、最值和几何 一、计算1.1 基础计算1.2 数列计算等差数列等比数列 总结 二、最值问题2.1 最不利构造最不利加排列组合 2.2 构造数列 三、几何问题2.1 公式计算类规则图形非规则图形 2.2结论技巧性&#xff08;三角形&#xff09;总结 一、计算 …

【Zabbix安装-5.5版本】

Zabbix安装&#xff08;rpm包安装&#xff09; Index of /zabbix/zabbix/5.5/rhel/8/x86_64/ | 清华大学开源软件镜像站 | Tsinghua Open Source Mirror rpm包链接&#xff1a;https://mirrors.tuna.tsinghua.edu.cn/zabbix/zabbix/5.5/rhel/8/x86_64/zabbix-release-5.5-1.e…

日常BUG——通过命令行创建vue项目报错

&#x1f61c;作 者&#xff1a;是江迪呀✒️本文关键词&#xff1a;日常BUG、BUG、问题分析☀️每日 一言 &#xff1a;存在错误说明你在进步&#xff01; 一、问题描述 在使用vue命令行创建一个vue项目时&#xff0c;出现一下的错误&#xff1a; vue create my…

无涯教程-Perl - ref函数

描述 如果EXPR为引用,则此函数返回真值&#xff1b;如果未提供EXPR,则为$_。返回的实际值还定义了引用所引用的实体的类型。 内置类型为- REFSCALARARRAYHASHCODEGLOBLVALUEIO::Handle 如果使用bless()函数为变量设置了祝福,则将返回新的数据类型。新的数据类型通常将是一个…

homebrew安装

1.国内镜像安装 /bin/zsh -c "$(curl -fsSL https://gitee.com/huwei1024/HomebrewCN/raw/master/Homebrew.sh)"2.选中科大下载源 3.输入密码 4.排错 5.常见错误网址 添加链接描述 6.配置环境变量

texmaker-Latex,设置biber/bibtex

打开texmaker&#xff0c;【选项】–>配置texmaker–>[命令]–>bib(la)tex&#xff0c;然后在该选项里面已有的路径下改为添加biber的路径

【数据结构】树和二叉树的概念及结构

1.树概念及结构 1.1树的概念 树是一种非线性的数据结构&#xff0c;它是由n&#xff08;n>0&#xff09;个有限结点组成一个具有层次关系的集合。把它叫做树是因为它看起来像一棵倒挂的树&#xff0c;也就是说它是根朝上&#xff0c;而叶朝下的。 有一个特殊的结点&#…

【算法基础20-单调栈】

算法原理: 用单调递增栈&#xff0c;当该元素可以入栈的时候&#xff0c;栈顶元素就是它左侧第一个比它小的元素。 以&#xff1a;3 4 2 7 5 为例&#xff0c;过程如下&#xff1a; 动态模拟过程 题目&#xff1a; 给定一个长度为 N 的整数数列&#xff0c;输出每个数左边第一…