HTMT超链接网站怎么做/写软文的平台有哪些

HTMT超链接网站怎么做,写软文的平台有哪些,www.北京网站建设,网站上的验证码怎么做Kafka 名词介绍 Topic: 消息队列,生产者和消费者面向的都是一个TopicBroker: 一个Kafka服务器就是一个Broker,一个集群由多个Broker组成。一个Broker可以容纳多个TopicProducer: 消息生产者,向Kafka Broker发生消息的客户端Consumer: 消息消…

Kafka

名词介绍

在这里插入图片描述

  • Topic: 消息队列,生产者和消费者面向的都是一个Topic
  • Broker: 一个Kafka服务器就是一个Broker,一个集群由多个Broker组成。一个Broker可以容纳多个Topic
  • Producer: 消息生产者,向Kafka Broker发生消息的客户端
  • Consumer: 消息消费者,向Kafka Broker取消息的客户端
  • Consumer Group(CG): 消费者组,有多个Consumer组成。消费者组内每个消费者负责不同分区的数据,一个分区只能有一个组内消费者消费;消费者组之间互不影响。所有消费者都属于某一个消费者组
  • Partition: 为了实现扩展性,一个非常大的Topic可以分布到多个Broker上,一个topic可以分为多个partition
  • Replica: 副本,每一个分区都有若干个副本,保证系统的稳定性
  • Leader: 分区副本的“领导者”,生产者发送数据的对象,消费者消费数据的对象
  • Follower: 分区副本的“从”,保持和Leader数据的同步。Leader发送故障,会从Follower中选举新的Leader

Kafka集群安装

使用docker对Kafka进行集群安装,docker-compose.yaml

# 切换到目标目录
# 目录结构
#.
#├── docker-compose.yaml
#│
#├── kafka_data1
#│
#├── kafka_data2
#│
#├── kafka_data3
#│
#├── zookeeper_data1
#│
#├── zookeeper_data2
#│
#└── zookeeper_data3
# 启动
docker-compose up -d

配置

详情见server.properties配置

操作命令

进入容器docker exec -it kafka1 /bin/bash

Topic

可以使用kafka-topics.sh查看操作主题的命令,常用命令如下

参数描述
--bootstrap-server <String: server to connect to>连接的 Kafka Broker 主机名称和端口号。
--topic <String: topic>操作的主题名称。
--create创建主题。
--delete删除主题。
--alter修改主题配置。
--list列出所有主题。
--describe查看指定主题的详细信息。
--partitions <Integer: # of partitions>设置主题的分区数量(仅在创建主题时使用)。
--replication-factor <Integer: replication factor>设置分区的副本因子(仅在创建主题时使用)。
--config <String: name=value>更新或设置主题的配置参数。
# 创建一个主题
kafka-topics.sh --bootstrap-server kafka1:9093 --create --partitions 1 --replication-factor 3 --topic first
## --partitions 分区数
## --replication-factor 副本数
## --topic 主题名称# 查看主题列表
kafka-topics.sh --bootstrap-server kafka1:9093 --list# 查看主题详情
kafka-topics.sh --bootstrap-server kafka1:9093 --describe --topic first
Topic: first	TopicId: nmM8zHmmRsqm5WjhTXuYHw	PartitionCount: 1	ReplicationFactor: 3	Configs: Topic: first	Partition: 0	Leader: 2	Replicas: 2,3,1	Isr: 2,3,1	Elr: N/A	LastKnownElr: N/A
## TopicId Topic 唯一标识符(UUID)
## Partition: 0 Topic 中的第一个分区(编号从 0 开始) 
## Leader: 2 分区 0 的 Leader 是 Broker 2# 修改分区数,分区数只能增加,不能减少
kafka-topics.sh --bootstrap-server kafka1:9093 --alter --topic first --partitions 3
# 删除分区
kafka-topics.sh --bootstrap-server kafka1:9093 --topic first --delete

Producer

可以使用kafka-console-producer.sh查看生产者的命令,常用命令如下

参数描述
--bootstrap-server <String: server to connect to>连接的 Kafka Broker 主机名称和端口号。
--topic <String: topic>操作的主题名称。
# 生产消息
kafka-console-producer.sh --bootstrap-server kafka2:9094 --topic first
发送消息流程

生产者代码

  1. kafkaProducer需要配置一些基本的参数,比如 Kafka 集群的地址、序列化方式、重试策略等
  2. 发送消息,当batch.size=16k || linger.ms = 0ms时会调用send()方法将消息发送到指定的 topic 和 partition
  3. 发送请求到Broker Kafka生产者将序列化后的消息发送给目标broker。生产者与Kafka broker之间的通信通常基于TCP协议,生产者发送的消息会经过 Kafka 的网络层,最终到达目标 broker
  4. 确认机制acks
    • acks=0:生产者不等待确认,发送后就认为消息发送成功。
    • acks=1:生产者等待 leader 节点的确认,消息在 leader 节点写入成功后返回确认。
    • acks=all(或 acks=-1):生产者等待所有副本的确认,只有所有副本都成功写入后才返回确认,保证消息的持久性。
  5. 错误处理与重试,如果消息发送失败,Kafka 生产者会根据 retries 配置进行重试
生产数据可靠性

主要设置acks应答级别可以解决

  • acks=0:生产者不等待确认,发送后就认为消息发送成功。可靠性差,效率高
  • acks=1:生产者等待 leader 节点的确认,消息在 leader 节点写入成功后返回确认。可靠性中等,效率中等
  • acks=all(或 acks=-1):生产者等待所有副本的确认,只有所有副本都成功写入后才返回确认,保证消息的持久性。可靠性高,效率低,数据可能会重复
幂等性

幂等性是指Producer不论向Broker发送多少次重复数据,Broker只会持久化一条
重复数据的判断标准:具有<PID,Partition,SeqNumber>相同主键的消息提交时,Broker只会持久化一条。其中PID是Kafka每次重启都会分配一个新的;Partition表示分区号;SeqNumber是单调递增的
开启参数 enable.idempotence 默认为 true,false关闭

Broker

工作流程
  1. Kafka 启动成功后,会在zk中注册
  2. 注册的先后顺序可以争夺leader,broker 获取Controller权限
  3. 选举出Controller之后,监听Brokers节点变化
  4. Controller决定Leader选举,选举规则:在isr中存活为前提。按照AR中排在前面的优先
  5. Controller将节点信息上传到ZK上
  6. 其他Controller同步Leader Controller 信息

如果Brokers中的Leader挂了,根据第4点的选举规则,选举新的Leader,更新Leader,以及isr

Kafka副本

Kafka副本主要作用,提高数据可靠性
Kafka默认1个副本,生产环境一般配置2个
Kafka分区中的所有副本统称为AR(Assigned Repllicas)
AR = isr + osr

isr: 表示和Leader保持同步的Follower集合。如果Follower长时间未向Leader发送通信请求或同步数据(30s),则该Follower将被踢出isr

osr: 表示Follower与Leader副本同步时,延迟过多的副本

Kafka 文件存储机制

Topic是逻辑上的概念,而partition是物理上的概念,每一个partition对应一个log文件,该log文件中存储的就是Producer生产的数据。Producer生产的数据会被不断追加到该log文件末端,为防止log文件过大导致数据定位效率低下,Kafka采取了分片和索引机制,将每个partition分为多个segment。每一个segment包含:“.index"文件、”.log"文件、".timeindex"文件。

Kafka存储日志的索引使用的是稀疏索引,大约每往log文件写入4kb数据,会往index文件写入一条索引

Kafka集群日志,默认7天后被清除,清楚策略有两种:删除、压缩策略

  • delete 删除日志,log.cleanup.policy=delete,基于时间或者基于大小
  • compact 日志压缩,对于相同key的不同的value值,保留最后一个版本
Kafka高效读写数据
  1. Kafka本身是分布式集群,可以采用分区技术,并行度高
  2. 读数据采用稀疏索引,可以快速定位要消费的数据
  3. 顺序写磁盘,Kafka的producer生产数据,要写入到log文件中,写的过程是一只追加到文件末端,为顺序写
  4. 零拷贝和页缓存(操作系统缓存)
数据积压,提高Kafka吞吐量
  1. 增加分区,增加消费者个数
  2. 提高生产者吞吐量,修改参数配置
    • batch.size批次大小,默认16k
    • linger.ms等待时间,默认0ms
    • compression.type压缩snappy
    • RecordAccumulator缓冲区大小,默认32m
  3. 提高消费者吞吐量,修改参数配置
    • fetch.max.bytes 增加消费者一次拉取的消息条数,默认50m
    • max.poll.records 增加一次poll拉取数据返回消息的最大条数

Consumer

消费方式
  • pull(拉)模式,消费只主动拉去消息,Kafka采用这一个
  • push(推)模式,集群推送消息到消费者,网络消耗比较大
常用操作

可以使用kafka-console-consumer.sh查看生产者的命令,常用命令如下

参数描述
--bootstrap-server <String: server to connect to>连接的 Kafka Broker 主机名称和端口号。
--topic <String: topic>操作的主题名称。
--from-beginning从头开始消费
--group <String: consumer group id>指定消费者组名称
# 接收消息
## 注意如果没有--from-beginning 参数,不会获取到订阅之前的消息
## 先订阅再有消息
kafka-console-consumer.sh --bootstrap-server kafka2:9094 --topic first --from-beginning
Consumer Group 消费者组

由多个consumer组成,形成一个消费者组的条件,消费者组的groupid相同

  • 消费者组内每个消费者负责消费不同分区的数据,一个分区只能由一个组内消费者消费
  • 消费者组之间互不影响。所有消费者都属于某个消费者组,即消费者组是逻辑上的一个订阅者
消费消息流程
  1. 配置消费者配置,集群地址、key和value的反序列化、组名
  2. 消费者订阅主题
  3. 消费者初始化,分区分配
  4. 消费者拉取数据(poll循环)
  5. 消费数据(消息处理)
  6. 提交偏移量,分为自动提交,和手动提交,手动提交有分为同步提交和异步提交
  7. 消费者故障和再平衡
消费者组初始化流程

使用coordinator辅助实现消费者组的初始化和分区,每一个broker都有coordinator。选择一个coordinator作为集群的leader

  1. 每一个消费者都会发送一个JoinGroup请求,发送至coordinator leader
  2. 随机选一个consumer作为leader
  3. 把要消费的topic情况发送给消费者leader
  4. 消费者leader制定消费方案
  5. 把消费方案发给coordinator
  6. coordinator把消费方案发送给各个consumer
  7. 每一个消费者都会和coordinator保持心跳(3ms),一旦超时(45s),该消费者会被移除,并触发再平衡(重新分配任务),或者消费者处理消息的时间过长(超过5分钟)
消费者组详细消费流程
  1. 消费者发送消费请求到ConsumerNetworkClient
  2. ConsumerNetworkClient会每批次抓数据,当数据达到fetch.min.bytes大小或者fetch.max.wat.ms时间
  3. 抓去数据成功回调,进过序列化到达消费者
消费者分区分配

一个consumer group中有多个consumer组成,一个topic有多个partition组成,哪一个consumer来消费哪个partition的数据
Kafka有四种主流分区分配策略:Range、RoundRobin、Sticky、CooperativeSticky

通过partition.assignment.strategy配置分区分配策略,默认策略是Range+CooperativeSticky

Range分区

对于每一个topic都是“均分”,将分区均分给消费者,余的分区分给靠前的消费者

例如:8个分区,分给三个消费者,前两个消费者分的3个分区,最后一个消费者分两个分区

缺点:在45s内停掉消费者A,随机由一个分区会直接承担消费者A的分区数据。从而造成数据倾斜

这里的45s是指分区coordinator的心跳机制,会重新分配

RoundRobin

RoundRobin 针对所有Topic去轮训分区策略,把所有partition和所有的consumer都列出来,然后按照 hashcode 进行排序,最后通过轮询算法来分配

例如:8个分区,分给三个消费者A、B、C
A:0、3、6
B:1、4、7
C:2、5

停掉A分区之后,45秒内分区产生的数据,消费者A负责的分区会被轮询的分给B、C

Sticky 分区

粘性分区定义:分配的结果带有“粘性的”,即在执行一次新的分配之前,考虑上一次分配的结果,尽量少的调整分配的变动。将分区随机均匀的分配给所有的消费者

offset

offset 保存着消费者消费数据的位移,从0.9版本开支,consumer将offset保存在Kafka一个内置的topic中,该topic为_consumer_offsets中,在此之前的版本,是存储在Zookeeper中。保存在Kafka中的目的是降低I/O…

_consumer_offsets主题里面采用key和value的方法存储数据
key是group.id+topic+分区号,value是当前offset的值

修改配置文件consumer.properties,添加exclude.internal.topics=false,默认是true,表示不能消费系统主题。查看事例如下

# 创建一个新的topic
kafka-topics.sh --bootstrap.server kafka1:9093 --create --topic test_offset --partitions 2 --replication-factor 2
# 启动生产者,并生产数据
kafka-console-producer.sh --topic test_offset --bootstrap.server kafka1:9093
# 启动消费者消费数据
kafka-console-consumer.sh --bootstrap.server kafka1:9093 --topic test_offset --group test# 查看消费者消费主题
kafka-console-consumer.sh --bootstrap.server kafka1:9093 --topic _consumer_offsets --consumer.config consumer.properties --formatter "kafka.coordinator.group.GroupMetadataManager\$OffsetMessageFormatter" --from beginning

自动保存和手动保存

消费者消费数据模式

auto.offset.reset=earliest|latest|none去指定消费者从什么位置开始消费

  • earliest: 自动将偏移量重置为最早的偏移量 --from-beginning
  • latest: 自动将偏移量重置为最新偏移量(默认)
  • none: 如果未找到消费者组的先前偏移量,则向消费者抛出异常
  • 任意指定offset位移开始消费

常见问题

如何保证消息队列的高可用?

Kafka分布式部署,将多个Broker分散部署在多个机器上,每一个Broker上放一部分数据。创建一个 topic,这个 topic 可以划分为多个 partition,每个 partition 可以存在于不同的 broker 上,每个 partition 就放一部分数据

如何保证消息不被重复消费?

这个问题就是在问如何保证消息消费的幂等性?

Kafka有offset偏移量这个概念,关闭自动提交,消费者消费完数据,手动提交

幂等性,要结合具体的业务操作,根据全局id去限制,存在则修改,不存在则新增。再加上Redis快速判别

如何保证消息的可靠性传输?

防止消息丢失,从三个角度出发

  1. 生产者
    设置acks=-1和重试机制,确保消息发送到队列,并且同步至follower
  2. Kafka消息队列
    确保一主多从,生产者设置acks和重试次数
  3. 消费者
    关闭自动提交offset,手动提交,确保幂等性,防止重复操作

如何保证消息的顺序性?

把相关消息放在一个分区,单机消费者去消费

如何解决消息队列的延时以及过期失效问题?

  1. 优化消费者
    • 增加消费者
    • 调整消费者配置,调整 fetch.max.bytesfetch.max.wait.ms 配置项
  2. 设置消息队列合理的过期时间
    • log.retention.ms设置过期时间
    • 死信队列保存消息,后续分析

消息队列满了以后该怎么处理?

  1. 增加磁盘空间
  2. 调整消息队列,日志清理策略
  3. 合理控制生产者生产效率
  4. 提高消费者消费效率

有几百万消息持续积压几小时,说说怎么解决?

  1. 修复消费者
  2. 增加消费者
  3. 提高消费者消费性能,单次消费数量

数据积压,提高Kafka吞吐量

  1. 增加分区,增加消费者个数
  2. 提高生产者吞吐量,修改参数配置
    • batch.size批次大小,默认16k
    • linger.ms等待时间,默认0ms
    • compression.type压缩snappy
    • RecordAccumulator缓冲区大小,默认32m
  3. 提高消费者吞吐量,修改参数配置
    • fetch.max.bytes 增加消费者一次拉取的消息条数,默认50m
    • max.poll.records 增加一次poll拉取数据返回消息的最大条数

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

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

相关文章

Unity DeepSeek API 聊天接入教程(0基础教学)

Unity DeepSeek API 聊天接入教程(0基础教学) 1.DeepSeek 介绍 DeepSeek是杭州深度求索人工智能基础技术研究有限公司推出的一款大语言模型。2025年1月20日&#xff0c;DeepSeek-R1正式上线&#xff0c;和当前市面上的主流AI相比&#xff0c;它在仅有极少标注数据的情况下&am…

el-input无法输入0.0001的小数,自动转换为0在vue3中的bug

今天遇到个bug&#xff0c;el-input中只能输入0.1或者输入0.1再加上00成为0.001&#xff0c;不能直接输入0.001&#xff0c;否则自动转换为0。需要去掉 v-model.number后面的 .number 源代码&#xff1a; <el-table-column label"实发数量" width"120"…

Spring事务原理 一

Spring事务管理有 声明式事务 和 编程式事务 两种方式&#xff0c;实现对数据库操作的ACID控制。其核心思想是将事务管理与业务逻辑解耦&#xff0c;开发者通过简单注解或配置即可管理复杂事务。 开启Spring事务&#xff0c;本质上就是在Spring容器中增加了一个Advisor&#x…

一周学会Flask3 Python Web开发-Debug模式开启

锋哥原创的Flask3 Python Web开发 Flask3视频教程&#xff1a; 2025版 Flask3 Python web开发 视频教程(无废话版) 玩命更新中~_哔哩哔哩_bilibili 默认情况&#xff0c;项目开发是普通模式&#xff0c;也就是你修改了代码&#xff0c;必须重启项目&#xff0c;新代码才生效&…

[qt5学习笔记]Application Example示例程序源码解析

开发环境问题 vs2022下直接打开ui、ts文件失败 解决办法如下图&#xff0c; 设置designer独立运行。估计是嵌入运行存在些许bug。 同理&#xff0c;ts编辑工具linguist也存在这个问题。 qrc rc的编辑嵌入编辑都正常&#xff0c;但分离式更稳定可靠。 qt creator编译失败 原…

Jetson Agx Orin平台JP6.0-r36.3版本修复了vi模式下的原始图像损坏(线条伪影)

1.问题描述 这是JP-6.0 GA/ l4t-r36.3.0的一个已知问题 通过vi模式捕获的图像会导致异常线条 参考下面的快照来演示这些线伪影 这个问题只能通过VI模式进行修复,不应该通过LibArgus看到。 此外,这是由于内存问题。 由于upstream已经将属性名称更改为“dma-noncoherent”…

[创业之路-299]:图解金融体系结构

一、金融体系结构 1.1 概述 金融体系结构是一个国家以行政的、法律的形式和运用经济规律确定的金融系统结构&#xff0c;以及构成这个系统的各种类型的银行和非银行金融机构的职能作用和相互关系。以下是对金融体系结构的详细分析&#xff1a; 1、金融体系的构成要素 现代金…

0基础学LabVIEW

对于零基础的朋友来说&#xff0c;学习LabVIEW需要一个科学的学习路径和方法。通过观看优质的B站教程打好基础&#xff0c;再结合实际项目进行实践操作&#xff0c;能够快速提升LabVIEW的应用能力。以下是从入门到进阶的学习建议。 ​ 一、利用B站入门教程打基础 筛选优质教程…

腿足机器人之六- 前向运动学

腿足机器人之六- 前向运动学 刚体运动学基础坐标系定义旋转矩阵与欧拉角齐次变换矩阵&#xff08;平移旋转的统一表示&#xff09; 运动链建模串联运动链结构&#xff08;从基座到末端的关节连接&#xff09;标准Denavit-Hartenberg&#xff08;D-H&#xff09;参数法改进D-H参…

DarkLabel 2.4使用指南:高效标注视频数据目标检测标签

工具概述 DarkLabel 2.4 是一款强大的多功能标注工具&#xff0c;专为计算机视觉开发者设计&#xff0c;旨在提升标注工作的效率和精确度。其智能标注引擎支持两项核心功能&#xff1a;线性插值标注与多目标跟踪&#xff0c;极大地优化了视频标注过程。 &#xff08;1&#x…

rabbitmq五种模式的总结——附java-se实现(详细)

rabbitmq五种模式的总结 完整项目地址&#xff1a;https://github.com/9lucifer/rabbitmq4j-learning 一、简单模式 &#xff08;一&#xff09;简单模式概述 RabbitMQ 的简单模式是最基础的消息队列模式&#xff0c;包含以下两个角色&#xff1a; 生产者&#xff1a;负责发…

网页制作01-html,css,javascript初认识のhtml的基本标记

一、 Html简介 英文全称是 hyper text markup language,超文本标记语言,是全球广域网上描述网页内容和外观的标准. Html作为一款标记语言,本身不能显示在浏览器中.标记语言经过浏览器的解释和编译,才能正确地反映html标记语言的内容. 1.html 的基本标记 1&#xff09;头部标…

Blackbox.AI:高效智能的生产力工具新选择

前言 在当今数字化时代&#xff0c;一款高效、智能且功能全面的工具对于开发者、设计师以及全栈工程师来说至关重要。Blackbox.AI凭借其独特的产品特点&#xff0c;在众多生产力工具中脱颖而出&#xff0c;成为了我近期测评的焦点。以下是我对Blackbox.AI的详细测评&#xff0…

海康摄像头IPV6模式,手动,自动,路由公告

海康摄像头DS-2DC7220IW-A 网络设置中的IPv6配置选项。IPv6是互联网协议&#xff08;IP&#xff09;的第六版&#xff0c;用于替代IPv4&#xff0c;提供更多的IP地址和改进的网络功能。图片中的选项允许用户选择如何配置设备的IPv6网络连接&#xff1a; 手动&#xff1a;用户可…

sql sqlserver的特殊函数COALESCE和PIVOT的用法分析

一、COALESCE是一个返回参数中第一个非NULL值的函数&#xff0c; 列如&#xff1a;COALESCE&#xff08;a,b,c,d,e&#xff09;;可以按照顺序取abcde&#xff0c;中的第一个非空数据&#xff0c;abcde可以是表达式 用case when 加ISNULL也可以实现&#xff0c;但是写法复杂了…

unity学习44:学习Animator 的一个动作捕捉网站,实测好用

目录 1 动作捕捉网站 2 注册和下载 3 比如首页的内容&#xff0c;可以直接下载为fbx模型文件 4 上传并修改 5 在 unity里使用 5.1 下载的fbx文件直接拖入到unity 5.2 动画修改 5.3 游戏里播放 1 动作捕捉网站 一个动作捕捉网站 AI神器集合网站 千面视频动捕 | AI神器…

CPP集群聊天服务器开发实践(六):Redis发布订阅消息队列及服务器集群通信

前文实现了单服务器与多客户端之间的通信以及聊天业务&#xff0c;同时为了增大并发量利用nginx实现多服务器的集群负载均衡&#xff0c;但是一个关键的问题是要实现多服务器之间的通信&#xff0c;这里采用Redis的发布订阅消息队列实现。 不同客户端可能连接在不同服务器上&am…

基于javaweb的SpringBootoa办公自动化系统设计和实现(源码+文档+部署讲解)

&#x1f3ac; 秋野酱&#xff1a;《个人主页》 &#x1f525; 个人专栏:《Java专栏》《Python专栏》 ⛺️心若有所向往,何惧道阻且长 文章目录 运行环境开发工具适用功能说明部分代码展示 运行环境 Java≥8、MySQL≥5.7 开发工具 eclipse/idea/myeclipse/sts等均可配置运行…

LCD屏控制:你需要掌握的理论基础

目录 一、LCD介绍 1. 发展历程 2. 核心优势 3. 主要缺点 二、LCD屏幕工作原理 1. 核心结构 2. 工作原理 三、LCD屏分类 1. 信号类型划分 2. 材质分类 3. 接口类型分类 四、LCD屏常用接口 1. TTL(RGB)接口 2. LVDS接口 3. EDP接口 4. MIPI接口 &#xff08;1&a…

大语言模型简史:从Transformer(2017)到DeepSeek-R1(2025)的进化之路

2025年初&#xff0c;中国推出了具有开创性且高性价比的「大型语言模型」&#xff08;Large Language Model — LLM&#xff09;DeepSeek-R1&#xff0c;引发了AI的巨大变革。本文回顾了LLM的发展历程&#xff0c;起点是2017年革命性的Transformer架构&#xff0c;该架构通过「…