当前位置: 首页 > news >正文

Kafka使用指南

    • Kafka简介
    • 架构设计
      • Kafka的架构设计关键概念
      • Kafka的架构设计关键机制
    • Partition介绍
      • Partition工作机制
    • 应用场景
    • ACK机制介绍
    • ACK机制原理
    • ACK机制对性能的影响
    • ACK控制粒度
    • Kafka分区数对集群性能影响
    • 调整分区优化集群性能
    • 拓展
      • Kafka数据全局有序

Kafka简介

Kafka是由Apache软件基金会开发的一个开源流处理平台,由Scala和Java编写。它是一种高吞吐量的分布式发布订阅消息系统,可以处理消费者在网站中的所有动作流数据。这些数据通常是由于吞吐量的要求而通过处理日志和日志聚合来解决。对于像Hadoop一样的日志数据和离线分析系统,但又要求实时处理的限制,这是一个可行的解决方案。Kafka的目的是通过Hadoop的并行加载机制来统一线上和离线的消息处理,也是为了通过集群来提供实时的消息。

Kafka中的消息被归类为不同的主题,每个主题有若干个分区。当有新消息时,它们会以追加的形式写入分区。由于主题可能有多个分区,因此在整个主题范围内,无法保证消息的顺序。分区可以分布在不同的服务器上,实现数据冗余和伸缩。消费者可以订阅一个或多个主题,并保存消息以进行处理。

Kafka在处理大型数据流方面表现出色,它可以存储和持续处理大型的数据流。它类似于消息中间件,但与传统的消息中间件有很大的差异。传统的消息中间件只会传递数据,而Kafka的流处理能力可以让我们高效地处理数据。

Kafka是一个强大的开源流处理平台,可以用于处理大规模的数据流,并支持实时数据处理。它在现代网络中的许多社会功能中发挥着关键作用。

在这里插入图片描述

架构设计

在这里插入图片描述

Kafka的架构设计关键概念

  1. 生产者(Producer) :负责创建消息,然后投递到Kafka集群中。生产者需要指定消息所属的主题,同时确定好发往哪个分区。
  2. 消费者(Consumer) :根据它所订阅的主题以及所属的消费组,决定从哪些分区中拉取消息。
  3. Broker :消息服务器,可水平扩展,负责分区管理、消息的持久化、故障自动转移等。一个集群由多个Broker组成,一个Broker可以容纳多个主题。
  4. 分区(Partition) :为了实现扩展性,一个非常大的主题可以分布到多个Broker上,每个Partition是一个有序的队列。
  5. 消费组(Consumer Group) :这是Kafka用来实现一个Topic消息的广播(发给所有的Consumer)和单播(发给任意一个Consumer)的手段。一个Topic可以有多个Consumer Group。
  6. Zookeeper :负责集群的元数据管理等功能,比如集群中有哪些broker节点以及Topic,每个Topic又有哪些Partition等。
  7. 主题(Topic) :Topic是Kafka中的一个核心概念,它代表了一类消息,可以被认为是消息被发送到的地方。在Kafka中,每个Topic都由多个Partition组成,Partition是不可修改的有序消息序列,也可以说是消息日志。每个Partition都有自己专属的Partition号,通常是从0开始的,用户对Partition唯一的操作就是在消息序列尾部追加写入消息。Partition上的每条消息都会被分配一个唯一的序列号,该序列号被称为位移(offset)。通常可以使用Topic来区分实际业务,Kafka中的Topic通常会被多个消费者订阅,因此出于性能考虑,kafka并不是Topic-meaaage的两极结构,而是采用了Topic-partition-message的三级结构来分散负载。
  8. 主节点(Leader) : 在Kafka中,每个Topic的Partition都有一个Leader和一个或多个Follower。Leader是处理所有读写请求的Partition,而Follower则复制Leader的数据以保持与Leader的同步。每个Partition都有一个Leader,负责处理该Partition的所有读写请求。Kafka通过选举机制来确定每个Partition的Leader。在Kafka集群中,每个Broker都会参与Leader选举过程。当一个Broker出现故障时,Kafka会自动进行Leader选举以确保数据的高可用性。选举过程中,Kafka会选择一个可用的Broker作为新的Leader,以确保集群的正常运行。需要注意的是,在Kafka中,每个Partition只能有一个Leader,但可以有多个Follower。这种设计确保了数据的一致性和可靠性,因为所有的读写请求都必须通过Leader来处理。同时,Follower可以复制Leader的数据,并在Leader出现故障时接管其角色,从而确保数据的高可用性。
  9. 从节点(Follower) : Follower Partition是Kafka中的一种特殊类型的Partition,它与Leader Partition一起构成了Kafka的分布式存储系统。在Kafka中,每个Partition都有一个Leader和若干个Follower。Leader是处理所有读写请求的Partition,而Follower则实时从Leader中同步数据,保持和Leader数据的同步。当Leader发生故障时,某个Follower会成为新的Leader。Follower Partition的主要作用是备份数据和扩展集群规模。在正常状态下,Follower Partition会从Leader Partition中同步数据,并保持与Leader Partition的数据一致性。当Leader Partition发生故障时,Follower Partition会成为新的Leader,继续为消费者提供服务。此外,当集群规模需要扩展时,可以增加Follower Partition的数量来提高集群的存储能力和吞吐量。

Kafka的架构设计关键机制

  1. 消息持久化 :Kafka支持消息持久化,消费端为拉模型来拉取数据,消费状态和订阅关系有客户端负责维护,消息消费完后,不会立即删除,会保留历史消息。
  2. 分布式机制 :Kafka的分布式机制包括生产者、消费者和代理三部分。生产者可以发送消息至Kafka集群,以供后续的消费者进行消费。消费者可以从Kafka集群中读取数据并对其进行响应的操作。代理是Kafka集群的关键组件之一,它主要负责消息的存储和转发,并通过分布式机制保障Kafka集群的故障恢复能力和高可用性。
  3. 高度可扩展的架构设计 :Kafka基于高度可扩展的架构设计,支持任意数量的生产者和消费者,可以针对不同领域的数据模型、处理技术等进行选择和组合。
  4. 消息流处理 :Kafka提供了一个流处理平台,允许应用程序充当流处理器(stream processor),从一个或者多个主题获取输入流,并生产一个输出流到一个或多个主题,能够有效的变化输入流为输出流。
  5. 连接器API :Kafka提供了连接器API,允许构建和运行可重用的生产者或者消费者,能够把kafka主题连接到现有的应用程序或数据系统。例如:一个连接到关系数据库的连接器可能会获取每个表的变化。

Kafka的架构设计涵盖了多个关键部分,这些部分协同工作,使得Kafka成为一个高效、可扩展、可靠的分布式消息系统。

Partition介绍

Kafka的Partition是一个逻辑概念,是消息在Kafka中的存储单位,也是消息被分发的单位。每个Topic被分成多个Partition,分布在不同的Broker服务器上。

Partition有几个重要的特性:

  1. Partition中的消息是有序的,同一个Partition内的消息会按照发送的顺序进行存储。
  2. Partition是Kafka中消息存储的最小单位,掌握着一个Topic的部分数据。每个Partition都是一个单独的log文件,每条记录都以追加的形式写入。
  3. Kafka集群中的每个Partition都有且只有一个Leader和零个或多个Follower。在正常状态下,Producer和Consumer只与Leader交互,所有的读写请求都必须通过Leader来处理。当Leader发生故障时,某个Follower会成为新的Leader。
  4. Kafka的负载均衡和扩展性很大程度上取决于Partition的数量和分布。为了实现负载均衡,建议将Partition的数量设置为Broker的倍数。
  5. Kafka Producer会将消息发送到指定的Topic的Partition,而Consumer则会从指定的Partition中消费消息。

Partition工作机制

Kafka的Partition是Kafka中消息存储和分发的单位,主要负责消息的存储和管理。以下是Partition在Kafka中的工作方式:

  1. 创建Partition :在创建Topic时,可以指定Partition的数量。一般来说,Partition的数量通常设为Broker节点数的整数倍,这样可以保证分区数据均匀地分配到集群中,并最大化的提升并行读写效率。
  2. 生产者写入Partition :生产者在向某个Topic发送消息时,会根据分配策略将消息发送到对应的Partition。分配策略可以是基于Partition key值进行哈希决定写入哪个Partition,也可以是采用轮询的方式均匀地写入到各个Partition。需要注意的是,如果指定了Partition key值,可能会出现热点数据问题。
  3. 消费者消费Partition :消费者订阅消费一个Topic时,会从该Topic的所有Partition中消费消息。每个Partition的消费组只能由一个消费者组中的一个消费者进行消费,因此可以说Partition是消费并行度的基本单位。从消费者的角度来看,订阅消费了一个Topic,也就订阅了该Topic的所有Partition。
  4. Partition的复制和故障转移 :Kafka的每个Partition都有一个Leader和零个或多个Follower。在正常状态下,Producer和Consumer只与Leader交互,所有的读写请求都必须通过Leader来处理。当Leader发生故障时,某个Follower会成为新的Leader。

Kafka的Partition是Kafka中实现负载均衡、扩展性和可靠性的关键组件之一。通过合理的设置和调整Partition的数量和分布,可以提高Kafka集群的性能和可靠性。

应用场景

  1. 实时数据流处理 :Kafka可以作为数据流处理的中间件,用于接收和传输大量的实时数据。它可以接收来自不同数据源的数据,并将其传输到不同的数据处理系统,如Apache Storm、Apache Flink等。通过使用Kafka,可以实现高吞吐量和低延迟的实时数据处理。
  2. 日志收集与分析 :Kafka可以用于集中式的日志收集和分析。许多应用程序和系统会生成大量的日志数据,使用Kafka可以将这些日志数据集中存储,并提供给日志分析工具进行实时或离线的分析。通过将日志数据发送到Kafka主题中,可以实现高效的日志收集和处理。
  3. 消息系统 :Kafka可以作为消息系统的一种替代方案。它具有更好的吞吐量、内置分区、副本和故障转移等特性,有利于处理大规模的消息。与传统的消息系统(如ActiveMQ或RabbitMQ)相比,Kafka在处理低延迟、高吞吐量的场景下更具优势。
  4. 网站活动追踪 :Kafka原本的使用场景之一是用户的活动追踪。网站的活动(如网页浏览、搜索或其他用户操作信息)可以发布到不同的主题中心,这些消息可实时处理、实时监测,也可加载到Hadoop或离线处理数据仓库。每个用户页面视图都会产生非常高的数据量,Kafka能够高效地处理这些数据。
  5. 指标监测 :Kafka也常用于监测数据。分布式应用程序生成的统计数据可以在Kafka中进行集中聚合,以便实时监测和分析。
  6. 日志聚合 :Kafka可以作为日志聚合的解决方案。通过将日志数据发送到Kafka主题中,可以实现高效的日志收集和处理。
  7. 事件采集 :Kafka可以用于事件采集,将各种事件数据(如用户行为事件、系统事件等)采集到Kafka主题中,以便后续处理和分析。

Kafka的应用场景非常广泛,包括但不限于实时数据处理、日志收集与分析、消息系统、网站活动追踪、指标监测、日志聚合和事件采集等。

ACK机制介绍

在Kafka中,ACK(acknowledgment)机制用于确认生产者发送的消息是否成功被Kafka服务器接收并存储。这是确保消息可靠性的重要机制。

Kafka提供了三种不同级别的消息确认机制,可以根据需求进行选择:

  1. ACK 级别 0 :生产者发送消息后,不会等待任何服务器的确认,直接认为消息发送成功。这种方式下,可能会出现消息丢失的情况。
  2. ACK 级别 1 :生产者发送消息后,会等待 leader 副本(partition 的 leader)确认消息后,认为消息发送成功。这种方式下,如果 leader 副本在确认消息前宕机,可能会导致消息丢失。
  3. ACK 级别 -1 或 all :生产者发送消息后,会等待所有的副本(包括 leader 和 follower)都确认消息后,认为消息发送成功。这种方式下,消息的可靠性最高,但是会对性能产生一定的影响。

选择合适的 ACK 级别取决于对消息可靠性和性能的要求。如果对消息的可靠性要求较高,可以选择 -1 或 all 级别,但需要考虑性能损耗。如果对消息的可靠性要求不高,可以选择 1 或 0 级别,以提高性能。

总的来说,ACK机制的优点是可以确保消息的可靠性,通过等待确认,生产者可以知道消息是否成功处理,从而保证数据的一致性。然而,ACK机制也存在一些缺点,例如延迟和服务器负载问题。需要根据具体的应用场景和需求来选择合适的ACK级别。

除了ACK级别外,Kafka还通过以下方式保证ACK机制的可靠性:

  • 数据复制 :Kafka通过将数据复制到多个副本(partition)中,确保数据的安全性和可靠性。即使某个副本出现问题,其他副本仍然可以正常工作。
  • 消息持久化 :Kafka将消息持久化到磁盘上,确保即使在服务器崩溃的情况下,消息也不会丢失。
  • 数据校验 :Kafka在存储和传输数据时使用校验和(checksum)等技术来检测数据完整性,确保数据的正确性和一致性。
  • 事务支持 :Kafka支持事务,可以在生产者发送消息时保证消息的可靠性。事务可以确保在写入数据之前进行验证和提交,避免因未提交的事务导致的数据不一致问题。
  • 参数配置 :Kafka提供了许多参数来配置ACK机制的可靠性,例如min.insync.replicas、unclean.leader.election.enable等参数。这些参数可以用来控制消息的确认机制和副本同步等行为,以确保数据的可靠性和一致性。

Kafka通过多种机制和参数配置来保证ACK机制的可靠性。在实际应用中,需要根据具体的应用场景和需求来选择合适的ACK级别和配置参数,以实现可靠的消息传递。

ACK机制原理

在Kafka中,ACK机制的原理是确认生产者发送的消息是否成功被Kafka服务器接收并存储。当生产者发送消息后,会向Kafka的代理服务器发送一个ACK(Acknowledgement)确认消息已经被发送。Kafka代理服务器在收到ACK后,会将该消息标记为已接收,然后从分区中删除。如果Kafka代理服务器在一定时间内没有收到ACK确认消息,则会将该消息重新发送给其他生产者,以确保消息的可靠性传递。

ACK机制的可靠性取决于选择的ACK级别。ACK级别为0时,生产者认为消息发送成功,无需等待服务器的确认,可能会出现消息丢失的情况。ACK级别为1时,生产者需要等待leader副本的确认,如果leader副本在确认消息前宕机,可能会导致消息丢失。ACK级别为-1或all时,生产者需要等待所有的副本(包括leader和follower)都确认消息后,才认为消息发送成功,消息的可靠性最高,但会对性能产生一定的影响。

Kafka中的ACK机制原理是生产者发送消息后向Kafka代理服务器发送ACK确认消息已经被发送,代理服务器收到ACK后将消息标记为已接收并删除。通过选择合适的ACK级别和配置参数,可以确保消息的可靠性和一致性。

ACK机制对性能的影响

首先,ACK机制影响吞吐量。ACK级别越高,吞吐量可能越低。这是因为当生产者发送消息并等待确认时,必须等待所有相关副本(包括leader和follower)都确认消息,这会增加延迟。相反,如果ACK级别较低,生产者可能不必等待所有副本的确认,从而提高了吞吐量。

其次,ACK机制影响消息的可靠性。较高的ACK级别可以提高消息的可靠性,因为消息被更多的副本确认。然而,这也可能增加复制延迟和降低吞吐量。相反,较低的ACK级别可能会导致较低的可靠性和较高的消息丢失风险。

因此,在选择ACK级别时需要权衡吞吐量和可靠性。对于需要高吞吐量的应用,可以选择较低的ACK级别;对于需要高可靠性的应用,可以选择较高的ACK级别。

此外,Kafka的ACK机制还影响集群的延迟和持久性。例如,ACK=0时,提供了最低的延迟,但持久性最弱,当服务器发生故障时很可能发生数据丢失。ACK=1时,提供了较低的延迟以及较好的持久性,但是如果leader死亡,而follower尚未复制数据,数据就会丢失。ACK=-1时,leader收到所有消息,且follower同步完数据,才发送下一条数据,这提供了最高的可靠性,但也可能增加延迟。

因此,在选择ACK策略时,需要根据应用的需求和集群的特性进行权衡。

ACK机制对Kafka集群性能的影响主要涉及以下几个方面:

  1. 延迟 :ACK机制会增加消息传递的延迟。当生产者发送消息后,必须等待确认才能继续发送下一条消息。等待确认的时间取决于网络延迟、副本数量和ACK级别等因素。如果延迟较高,可能会影响生产者的发送速率和消费者的消费速率,从而降低集群的整体性能。

  2. 吞吐量 :ACK机制会影响Kafka集群的吞吐量。吞吐量是指集群在单位时间内处理的消息数量。当ACK级别较高时,生产者必须等待更多的确认,这会降低生产者的发送速率,从而影响集群的吞吐量。此外,如果集群中的副本数量较多,也会增加确认的延迟,进一步影响吞吐量。

  3. CPU和内存使用 :ACK机制需要额外的CPU和内存资源来处理确认消息。当集群中的消息数量较多时,处理确认消息的开销也会相应增加。这可能会影响其他任务的性能,例如消费者消费消息的速度。

  4. 数据一致性 :ACK机制是确保数据一致性的重要手段。当生产者发送消息后,如果某个副本未能成功接收消息,可能会导致数据不一致。通过等待所有相关副本的确认,可以确保数据的一致性。但是,这也可能增加延迟和降低吞吐量。

  5. 可靠性 :ACK机制可以提高消息的可靠性。当生产者发送消息并收到确认时,可以认为消息已经被成功接收并存储。这可以避免消息丢失的情况,提高系统的可靠性。

需要注意的是,在选择ACK策略时需要综合考虑应用的需求和集群的特性,权衡延迟、吞吐量、CPU和内存使用、数据一致性和可靠性等因素。

ACK控制粒度

Kafka中的ACK控制粒度是指生产者在发送消息时需要等待确认的副本数量。Kafka提供了三种不同的ACK控制粒度:

  1. ACK_roj(原子性确认) :这种控制粒度要求消息被所有的副本都接收后才能发送下一条消息,可以保证原子性操作。但是这种控制粒度会增加延迟,降低吞吐量,适用于对数据一致性要求较高的场景。
  2. ACK_one(领导者确认) :这种控制粒度要求消息被领导者副本接收后就可以发送下一条消息,可以减少延迟,提高吞吐量。但是这种控制粒度不能保证数据一致性,适用于对数据一致性要求不高的场景。
  3. ACK_all(全部副本确认):这种控制粒度要求消息被所有的副本都接收后才能发送下一条消息,可以保证数据一致性。但是这种控制粒度会增加延迟,降低吞吐量,适用于对数据一致性要求较高的场景。

Kafka客户端可以根据需要选择不同的ACK控制粒度。需要注意的是,不同的ACK控制粒度会对集群的性能和可靠性产生不同的影响,因此需要根据应用的需求和集群的特性进行选择。

Kafka分区数对集群性能影响

Kafka中的分区数对集群性能有显著影响,主要表现在以下几个方面:

  1. 吞吐量 :增加分区数可以增加Kafka集群的吞吐量。每个分区可以并行处理消息,因此更多的分区意味着更高的并行度,从而提高吞吐量。但是,过多的分区数也可能导致资源竞争和开销增加,从而降低性能。

  2. 延迟 :分区数对消息传递的延迟也有影响。较少的分区数可能会导致消息在某个分区上积压,从而增加延迟。增加分区数可以分散消息负载,减少单个分区的压力,降低延迟。但是,过多的分区数也会增加消息在多个分区之间的传播延迟。

  3. 负载均衡 :分区数会影响Kafka集群的负载均衡。如果分区数过少,某些broker可能会成为瓶颈,导致负载不均衡。适当增加分区数可以平衡负载,使消息更均匀地分布在各个broker上。但是,过多的分区数也可能导致过于复杂的负载均衡策略,增加管理和维护的难度。

  4. 存储和I/O :每个分区都需要在磁盘上存储数据日志和索引文件。因此,分区数会增加存储需求和I/O操作。过多的分区数可能会导致磁盘空间不足和I/O性能下降,从而影响集群的整体性能。

  5. 资源消耗 :每个分区都需要在内存中维护缓存和其他相关数据结构。因此,随着分区数的增加,内存消耗也会相应增加。这可能会对集群的资源产生压力,降低性能。

综上所述,选择合适的分区数对于优化Kafka集群的性能至关重要。需要根据应用的需求、集群的规模和硬件资源等因素进行综合考虑和调整。

调整分区优化集群性能

要调整Kafka集群的分区数以优化性能,可以采取以下措施:

  1. 了解业务需求:首先需要了解业务需求和数据量。考虑主题的数据量、消息生产者和消费者的数量,以及消息处理的延迟等因素,以确定合适的分区数。

  2. 调整副本数:副本数是Kafka保证数据可靠性和容错性的重要手段。可以根据需要调整副本数,以提高数据可靠性和容错性。但是,过多的副本数会增加存储和网络开销,因此需要根据实际情况进行权衡。

  3. 调整批处理大小:批处理是Kafka提高消息处理效率的重要手段。可以调整批处理的大小,以适应不同的业务需求和硬件资源。较大的批处理可以减少网络传输次数,提高处理效率,但可能会增加内存消耗和延迟。

  4. 调整主题和分区策略:在设计Kafka主题和分区时,需要考虑主题的数据量、消息生产者和消费者的数量,以及消息处理的延迟等因素,以制定合适的策略。例如,可以将经常被一起消费的消息放在同一个分区,以减少跨分区的消息处理延迟。

  5. 使用SSD存储:使用SSD存储可以显著提高Kafka的性能,因为SSD存储比传统的机械硬盘更快,能够更快地读写数据。使用SSD可以减少磁盘I/O瓶颈,提高Kafka集群的整体性能。

  6. 使用网络加速器:使用网络加速器可以减少网络延迟,提高数据传输的速度和可靠性,从而提高Kafka的性能和可靠性。例如,使用InfiniBand等高速网络技术可以显著提高Kafka集群的性能。

  7. 定期清理过期数据:定期清理过期数据可以减少磁盘空间的占用,从而提高Kafka的性能和可靠性。可以根据业务需求定期清理过期数据,释放磁盘空间,提高Kafka集群的整体性能。

调整Kafka集群的分区数需要综合考虑业务需求、硬件资源、网络环境等因素,并进行测试和优化。通过合理的分区数配置,可以提高Kafka集群的性能和可靠性,满足业务需求。

拓展

Kafka数据全局有序

Kafka的数据不是全局有序的,它只能保证单个Partition内的数据有序。因为Kafka的设计中允许多个生产者并行地向同一个主题写入消息,所以无法保证全局有序性。

如果需要全局有序,可以将所有消息发送到同一个Partition,或者使用一些外部的手段进行排序。但是这样会降低并行度和吞吐量,需要根据实际需求进行权衡。

在这里插入图片描述

相关文章:

Kafka使用指南

Kafka简介架构设计Kafka的架构设计关键概念Kafka的架构设计关键机制 Partition介绍Partition工作机制 应用场景ACK机制介绍ACK机制原理ACK机制对性能的影响ACK控制粒度Kafka分区数对集群性能影响调整分区优化集群性能拓展Kafka数据全局有序 Kafka简介 Kafka是由Apache软件基金…...

HarmonyOS4.0从零开始的开发教程03初识ArkTS开发语言(中)

HarmonyOS(二)初识ArkTS开发语言(中)之TypeScript入门 浅析ArkTS的起源和演进 1 引言 Mozilla创造了JS,Microsoft创建了TS,Huawei进一步推出了ArkTS。 从最初的基础的逻辑交互能力,到具备类…...

西工大计算机学院计算机系统基础实验一(函数编写1~10)

还是那句话,千万不要慌,千万不要着急,耐下性子慢慢来,一步一个脚印,把基础打的牢牢的,一样不比那些人差。回到实验本身,自从​​​​​​按照西工大计算机学院计算机系统基础实验一(…...

VMware 虚拟机 电脑重启后 NAT 模式连不上网络问题修复

问题描述: 昨天 VMware 安装centos7虚拟机,网络模式配置的是NAT模式,配置好后,当时能连上外网,今天电脑重启后,发现连不上外网了 检查下各个配置,都没变动,突然就连不上了 网上查了…...

【桑基图】绘制桑基图

绘制桑基图 一、绘制桑基图(1)方法一:去在线网站直接绘制(2)方法二:写html之后在vscode上运行 二、遇到的问题(1)当导入一些excel的时候,无法绘制出桑基图 一、绘制桑基图…...

ACM32F403/F433 12 位多通道,支持 MPU 存储保护功能,应用于工业控制,智能家居等产品中

ACM32F403/F433 芯片的内核基于 ARMv8-M 架构,支持 Cortex-M33 和 Cortex-M4F 指令集。芯片内核 支持一整套DSP指令用于数字信号处理,支持单精度FPU处理浮点数据,同时还支持Memory Protection Unit (MPU)用于提升应用的…...

7. 从零用Rust编写正反向代理, HTTP及TCP内网穿透原理及运行篇

wmproxy wmproxy是由Rust编写,已实现http/https代理,socks5代理, 反向代理,静态文件服务器,内网穿透,配置热更新等, 后续将实现websocket代理等,同时会将实现过程分享出来&#xff…...

UE4.27-UE5.1设置打包Android环境

打包Android配置文件 1. 配置打包Android的SDK需求文件位于下面文件中: 2. 指定了对应的SDK环境变量名字以及NDK需求等: UE4.27-UE5.1--脚本自动配置 安装前提 1. 务必关闭虚幻编辑器和Epic Games Launcher,以确保NDK组件的安装或引擎环境…...

MySQL授权密码

mysql> crate databases school charcter set utf8; Query OK, 1 row affected, 1 warning (0.00 sec) 2.在school数据库中创建Student和Score表 mysql> use school Database changed mysql> create table student-> -> (id int(10) primary key auto_incremen…...

0X05

打开题目 点击完登录和注册都没有什么反应,所以先扫一下看看 在出现admin.php后就截止了,访问看看,进入后台。。 尝试一下弱口令 admin/12345 或者是demo/demo 设计中-自定义->右上角导出主题 找到一个导出的点,下载了一个1.zip压缩包…...

Doris优化总结

1 查看QueryProfile 利用查询执行的统计结果,可以更好的帮助我们了解Doris的执行情况,并有针对性的进行相应Debug与调优工作。 FE将查询计划拆分成为Fragment下发到BE进行任务执行。BE在执行Fragment时记录了运行状态时的统计值,并将Fragment执行的统计信息输出到日志之中。…...

案例059:基于微信小程序的在线投稿系统

文末获取源码 开发语言:Java 框架:SSM JDK版本:JDK1.8 数据库:mysql 5.7 开发软件:eclipse/myeclipse/idea Maven包:Maven3.5.4 小程序框架:uniapp 小程序开发软件:HBuilder X 小程序…...

利用STM32内置Bootloader实现USB DFU固件升级

本文将介绍如何利用STM32内置的Bootloader来实现USB DFU(Device Firmware Upgrade)固件升级功能。首先,我们会介绍USB DFU的原理和工作流程。然后,我们将详细讲解如何配置STM32芯片以支持USB DFU,并提供相应的代码示例…...

Centos7如何安装MySQL

目录 一、卸载mysql 二、安装mysql 注:本文主要是看了这位大佬安装MySQL,才想着写一篇记录一下。 一、卸载mysql 安装mysql之前一定要将之前安装的mysql相关文件删除干净,防止出现错误。 (1)关闭mysql 开启了mysql就…...

VR远程带看,助力线下门店线上化转型“自救”

VR远程带看,因自身高效的沉浸式在线沟通功能,逐渐走进了大众的视野。身临其境的线上漫游体验以及实时同屏互联的新型交互模式,提升了商家同用户之间的沟通效率,进一步实现了远程线上一对一、一对多的同屏带看,用户足不…...

算法通关村第十七关-白银挑战贪心算法高频题目

大家好我是苏麟 , 今天说说贪心算法的高频题目 . 大纲 区间问题判断区间是否重叠合并区间插入区间 区间问题 判断区间是否重叠 描述 : 给定一个会议时间安排的数组 intervals ,每个会议时间都会包括开始和结束的时间intervalsl[i] [start, end] ,请你…...

【数据结构】动态规划(Dynamic Programming)

一.动态规划(DP)的定义: 求解决策过程(decision process)最优化的数学方法。 将多阶段决策过程转化为一系列单阶段问题,利用各阶段之间的关系,逐个求解。 二.动态规划的基本思想: …...

Redis key过期删除机制实现分析

文章目录 前言Redis key过期淘汰机制惰性删除机制定时扫描删除机制 前言 当我们创建Redis key时,可以通过expire命令指定key的过期时间(TTL),当超过指定的TTL时间后,key将会失效。 那么当key失效后,Redis会立刻将其删除么&#…...

ElasticSearch 谈谈分词与倒排索引的原理

ElasticSearch是一个基于Lucene的搜索服务器。Lucene是Java的一个全文检索工具包,而ElasticSearch则是一个分布式搜索和分析引擎。下面,我们将详细讨论ElasticSearch中的分词和倒排索引的原理。 分词: 在ElasticSearch中,分词是…...

【Java】Java8重要特性——Lambda函数式编程以及Stream流对集合数据的操作

【Java】Java8重要特性——Lambda函数式编程以及Stream流对集合数据的操作 前言Lambda函数式编程Stream流对集合数据操作(一)创建Stream流(二)中间操作之filter(三)中间操作之map(四&#xff09…...

大话数据结构-查找-散列表查找(哈希表)

注:本文同步发布于稀土掘金。 8 散列表查找(哈希表) 8.1 定义 散列技术是在记录的存储位置和它的关键字之间建立一个确定的对应关系f,使得每个关键字key对应一个存储位置f(key)。查找时,根据这个确定的对应关系找到给…...

持续集成交付CICD:Sonarqube自动更新项目质量配置

目录 一、实验 1.Sonarqube手动自定义质量规则并指定项目 2.Sonarqube自动更新项目质量配置 一、实验 1.Sonarqube手动自定义质量规则并指定项目 (1)自定义质量规则 ①新配置 ②更多激活规则③根据需求激活相应规则④已新增配置 ⑤ 查看 &#x…...

Linux设置Docker自动创建Nginx容器脚本

文章目录 前言一、本地新建脚本二、复制本地脚本到服务器三、执行服务器脚本总结如有启发,可点赞收藏哟~ 前言 一、本地新建脚本 在本地新建nginx-generator.sh脚本文件,并保存以下内容 主要动态定义两个变量(容器名称/服务器本地文件名、端…...

技术博客:Vue中各种混淆用法汇总

技术博客:Vue中各种混淆用法汇总 摘要 本文主要介绍了在Vue中使用的一些常见混淆用法,包括new Vue()、export default {}、createApp()、Vue.component、Vue3注册全局组件、Vue.use()等,以及如何使用混淆器对代码进行加固,保护应…...

【python】Python生成GIF动图,多张图片转动态图,pillow

pip install pillow 示例代码: from PIL import Image, ImageSequence# 图片文件名列表 image_files [car.png, detected_map.png, base64_image_out.png]# 打开图片 images [Image.open(filename) for filename in image_files]# 设置输出 GIF 文件名 output_g…...

python/matlab图像去雾/去雨综述

图像去雾和去雨是计算机视觉领域的两个重要任务,旨在提高图像质量和可视化效果。本文将综述图像去雾和去雨的算法、理论以及相关项目代码示例。 一、图像去雾算法 基于暗通道先验的方法: 这是广泛应用于图像去雾的经典算法之一。该方法基于一个观察&…...

Docker+jenkins+gitlab实现持续集成

1.安装环境 服务器ip虚拟机版本192.168.5.132centos7.6192.168.5.152centos7.6 2. 安装docker 安装必要的一些系统工具 yum install -y yum-utils device-mapper-persistent-data lvm2添加软件源信息,要确保centos7能上外网 yum-config-manager --add-repo http:…...

Web前端JS如何获取 Video/Audio 视音频声道(左右声道|多声道)、视音频轨道、音频流数据

写在前面: 根据Web项目开发需求,需要在H5页面中,通过点击视频列表页中的任意视频进入视频详情页,然后根据视频的链接地址,主要是 .mp4 文件格式,在进行播放时实时的显示该视频的音频轨道情况,并…...

MySQL生成UUID并去除-

uuid()函数 uuid() 函数可以使mysql生成uuid,但是uuid中存在-,如下图: 去除uuid的- 默认生成的uuid含有-,我们可以使用replace函数替换掉-,SQL如下 select replace(uuid(),"-","") as uuid;Insert语句中使用UUID 如果…...

包与字符串

包是分类管理的需要,建立包用:package,包中类的引用import 学习使用javaAPI中的字符串类String,学会其成员方法的使用 (必看)eclipse包的分层等级结构设置 因为eclipse的包的结构默认是平行等级的,所以要手…...

【Gradle】mac环境安装Gradle及配置

官网安装说明:Gradle | Installation 由于Gradle运行依赖jvm,所以事先需要安装jdk,并确认你的jdk版本和gradle版本要求的对应关系,这个官网上有说明,但是我试了一下不太准确,供参考,链接如下&a…...

使用C语言操作kafka ---- librdkafka

1 安装librdkafka git clone https://github.com/edenhill/librdkafka.git cd librdkafka git checkout v1.7.0 ./configure make sudo make install sudo ldconfig 在librdkafka的examples目录下会有示例程序。比如consumer的启动需要下列参数 ./consumer <broker> &…...

误用STM32串口发送标志位 “USART_FLAG_TXE” “USART_FLAG_TC”造成的BUG

当你使用串口发送数据时是否出现过这样的情况&#xff1a; 1.发送时第一个字节丢失。 2.发送时出现莫名的字节丢失。 3.各种情况字节丢失。 1.先了解一下串口发送的流程图&#xff08;手动描绘&#xff09;&#xff1a; 可以假想USART_FLAG_TXE是用于检测"弹仓"&…...

指针(三)

函数指针 定义&#xff1a;整型指针是指向整形的指针,数组指针式指向数组的指针,其实函数指针就是指向函数的指针。 函数指针基础&#xff1a; &#xff08;&#xff09;优先级要高于*&#xff1b;一个变量除去了变量名&#xff0c;便是它的变量类型&#xff1b;一个指针变量…...

labelimg遇到的标签修改问题:修改一张图像的标签时,保存后导致classes.txt改变

问题描述&#xff1a;修改一张图像的标签时候&#xff0c; classes.txt 会同步更新&#xff0c;导致重新生成了 classes.txt 但是这个 classes.txt 只有你现在写的那个类别名&#xff0c;以前的没有了。 解决&#xff1a;设置一个 predefined_classes.txt&#xff0c;内容和模…...

Spring Cloud Gateway使用和配置

Spring Cloud Gateway是Spring官方基于Spring 5.0&#xff0c;Spring Boot 2.0和Project Reactor等技术开发的网关&#xff0c;Spring Cloud Gateway旨在为微服务架构提供一种简单而有效的统一的API路由管理方式。Spring Cloud Gateway作为Spring Cloud生态系中的网关&#xff…...

RT-Thread 时钟管理

时钟管理 时钟是非常重要的概念&#xff0c;和朋友出去游玩需要约定时间&#xff0c;完成任务也需要花费时间&#xff0c;生活离不开时间。 操作系统也一样&#xff0c;需要通过时间来规范其任务的执行&#xff0c;操作系统中最小的时间单位是时钟节拍&#xff08;OS Tick&…...

User: zhangflink is not allowed to impersonate zhangflink

使用hive2连接进行添加数据是报错&#xff1a; [08S01][1] Error while processing statement: FAILED: Execution Error, return code 1 from org.apache.hadoop.hive.ql.exec.mr.MapRedTask. User: zhangflink is not allowed to impersonate zhangflink 有些文章说需要修…...

深入理解Sentinel系列-1.初识Sentinel

&#x1f44f;作者简介&#xff1a;大家好&#xff0c;我是爱吃芝士的土豆倪&#xff0c;24届校招生Java选手&#xff0c;很高兴认识大家&#x1f4d5;系列专栏&#xff1a;Spring源码、JUC源码、Kafka原理、分布式技术原理&#x1f525;如果感觉博主的文章还不错的话&#xff…...

vue中字典的使用

1.引入字典 dicts: [order_status,product_type],2.表单中使用 select下拉 <el-form-item label"订单状态" prop"orderStatus"><el-select v-model"form.orderStatus" clearable placeholder"请输入订单状态" :disabled"…...

AWS基于x86 vs Graviton(ARM)的RDS MySQL性能对比

概述 这是一个系列。在前面&#xff0c;我们测试了阿里云经济版&#xff08;“ARM”&#xff09;与标准版的性能/价格对比&#xff1b;华为云x86规格与ARM&#xff08;鲲鹏增强&#xff09;版的性能/价格对比。现在&#xff0c;再来看看AWS的ARM版本的RDS情况 在2018年&#…...

ESP32 蓝牙音箱无法链接上电脑的解决:此项不起作用,请确保你的蓝牙设备仍可检测到

ESP32 被我加了放大器后通过A2DP链接手机播放一直正常&#xff0c;但是怎么都链接不到电脑&#xff0c;蓝牙设备可以被发现和配对&#xff0c;但是始终无法连接&#xff0c;显示&#xff1a; 此项不起作用&#xff0c;请确保你的蓝牙设备仍可检测到&#xff0c;然后再试一次 …...

会声会影2024软件还包含了视频教学以及模板素材

会声会影2024中文版是一款加拿大公司Corel发布的视频编软件。会声会影2024官方版支持视频合并、剪辑、屏幕录制、光盘制作、添加特效、字幕和配音等功能&#xff0c;用户可以快速上手。会声会影2024软件还包含了视频教学以及模板素材&#xff0c;让用户剪辑视频更加的轻松。 会…...

[Swift]RxSwift常见用法详解

RxSwift 是 ReactiveX API 的 Swift 版。它是一个基于 Swift 事件驱动的库&#xff0c;用于处理异步和基于事件的代码。 GitHub:https://github.com/ReactiveX/RxSwift 一、安装 首先&#xff0c;你需要安装 RxSwift。你可以使用 CocoaPods&#xff0c;Carthage 或者 Swift …...

探索鸿蒙_ArkTs开发语言

ArkTs 在正常的网页开发中&#xff0c;实现一个效果&#xff0c;需要htmlcssjs三种语言实现。 但是使用ArkTs语言&#xff0c;就能全部实现了。 ArkTs是基于TypeScript的&#xff0c;但是呢&#xff0c;TypeScript是基于javascript的&#xff0c;所以ArkTs不但能完成js的工作&a…...

案例049:基于微信小程序的校园外卖平台设计与实现

文末获取源码 开发语言&#xff1a;Java 框架&#xff1a;SSM JDK版本&#xff1a;JDK1.8 数据库&#xff1a;mysql 5.7 开发软件&#xff1a;eclipse/myeclipse/idea Maven包&#xff1a;Maven3.5.4 小程序框架&#xff1a;uniapp 小程序开发软件&#xff1a;HBuilder X 小程序…...

通过提示工程释放人工智能

在快速发展的技术领域&#xff0c;人工智能 (AI) 处于前沿&#xff0c;不断重塑我们与数字系统的交互。这一演变的一个关键方面是大型语言模型 (LLM) 的开发和完善&#xff0c;它在从客户服务机器人到高级数据分析的各种应用中已变得不可或缺。利用这些法学硕士的潜力的核心是提…...

亚马逊云科技Serverless视频内容摘要提取方案

概述 随着GenAI的普及&#xff0c;视频内容摘要生成成为一个备受关注的领域。通过将视频内容转化为文本&#xff0c;可以探索到更广泛的应用场景&#xff0c;其中包括&#xff1a; 视频搜索与索引&#xff1a;将视频内容转化为文本形式&#xff0c;可以方便地进行搜索和索引操作…...

c语言:整数与浮点数在内存中的存储方式

整数在内存中的存储&#xff1a; 在计算机内存中&#xff0c;整数通常以二进制形式存储。计算机使用一定数量的比特&#xff08;bit&#xff09;来表示整数&#xff0c;比如32位或64位。在存储整数时&#xff0c;计算机使用补码形式来表示负数&#xff0c;而使用原码形式来表示…...

dockerdesktop 导出镜像,导入镜像

总体思路 备份时 容器 > 镜像 > 本地文件 恢复时 本地文件 > 镜像 > 容器 备份步骤 首先,把容器生成为镜像 docker commit [容器名称] [镜像名称] 示例 docker commit nginx mynginx然后,把镜像备份为本地文件,如果使用的是Docker Desktop,打包备份的文件会自动存…...