【Kafka系列】(一)Kafka入门
有的时候博客内容会有变动,首发博客是最新的,其他博客地址可能会未同步,认准
https://blog.zysicyj.top
首发博客地址
系列文章地址
Kafka是什么?
一句话概括:「Apache Kafka 是一款开源的消息引擎系统」
什么是消息引擎系统?
消息引擎系统(Message Broker System)是一种中间件软件或服务,用于在分布式系统中进行异步消息传递。它提供了可靠的消息传输、消息路由和消息处理的功能,使不同的应用程序和组件能够通过发送和接收消息进行通信。
消息引擎系统通常由以下几个核心组件组成:
-
发布者(Publisher):负责将消息发布到消息引擎系统中。发布者将消息发送到指定的主题(Topic)或队列(Queue)中。
-
订阅者(Subscriber):订阅者可以通过订阅特定的主题或队列来接收消息。订阅者可以按照自己的需求选择订阅的消息类型和主题。
-
主题/队列(Topic/Queue):主题或队列是消息的目的地,消息发布者将消息发送到特定的主题或队列,而订阅者可以从中接收相应的消息。
-
消息路由(Message Routing):消息引擎系统负责将消息路由到正确的订阅者。它根据订阅者的订阅关系和消息的标识(如主题、标签等)来确定消息的路由方式。
-
消息持久化(Message Persistence):消息引擎系统通常会将消息持久化到存储介质中,以确保消息的可靠性和持久性。这样即使在系统故障或重启后,消息仍然可以被正确地传递和处理。
-
消息传递模式(Message Delivery Patterns):消息引擎系统支持多种消息传递模式,如点对点模式(Point-to-Point)、发布/订阅模式(Publish/Subscribe)、请求/响应模式(Request/Response)等,以满足不同的通信需求。
消息引擎系统具有解耦性、可靠性和扩展性等优点,使得分布式系统中的不同组件能够进行异步通信,提高系统的可靠性、可伸缩性和性能。常见的消息引擎系统包括Apache Kafka、RabbitMQ、ActiveMQ等。
为什么要引入消息引擎呢?直接A发送给B不好吗?
引入消息引擎系统的主要目的是解耦和提高系统的可伸缩性、可靠性和性能。下面是一些使用消息引擎系统的优点:
-
「解耦性」:通过引入消息引擎系统,发送者和接收者之间可以解耦。发送者只需要将消息发送到消息引擎中的特定主题或队列,而不需要直接知道接收者的详细信息。接收者可以根据自己的需求选择订阅相应的主题或队列来接收消息。这种解耦可以使系统的组件可以独立演化和扩展,避免了紧耦合的依赖关系。
-
「异步通信」:消息引擎系统支持异步通信模式,发送者可以将消息发送到消息引擎中后立即返回,而不需要等待接收者的响应。这种异步通信模式可以提高系统的响应速度和并发处理能力,使得发送者和接收者可以独立地进行任务处理,提高系统的整体性能和吞吐量。
-
「可靠性」:消息引擎系统通常会将消息持久化到存储介质中,以确保消息的可靠性和持久性。即使在系统故障或重启后,消息仍然可以被恢复和传递,避免了消息的丢失。此外,消息引擎系统还提供了消息的确认机制和重试机制,确保消息的可靠传递。
-
「扩展性」:使用消息引擎系统可以轻松地扩展系统的规模和容量。通过增加消息引擎的实例或增加消息队列的分区,可以实现水平扩展,以处理更大的消息流量和更高的并发请求。
-
「消息传递模式」:消息引擎系统支持多种消息传递模式,如点对点模式、发布/订阅模式、请求/响应模式等。不同的模式适用于不同的业务场景,可以根据需求选择合适的模式。
引入消息引擎系统可以提供更灵活、可靠和高效的消息传递方式,使得系统可以更好地适应复杂的业务需求和分布式环境。它提供了解耦、异步通信、可靠性、可伸缩性和性能等优势,使系统设计更具弹性和可维护性。
常见的消息传输模型有哪些呢
在计算机系统中,常见的消息传输模型有以下几种:
-
「点对点模型」(Point-to-Point Model):在点对点模型中,消息的发送者将消息发送到特定的接收者。每个消息只被一个接收者接收,类似于一对一的通信。这种模型通常使用队列或消息中间件来实现,例如JMS(Java Message Service)中的点对点模型。
-
「发布/订阅模型」(Publish/Subscribe Model):在发布/订阅模型中,消息的发送者(发布者)将消息发布到一个主题(Topic),多个接收者(订阅者)可以订阅该主题,接收发布的消息。这种模型通常用于广播消息给多个接收者,类似于一对多的通信。常见的实现包括消息队列、消息中间件、事件总线等。
-
「请求/响应模型」(Request/Response Model):在请求/响应模型中,客户端发送请求消息给服务端,服务端处理请求并发送响应消息给客户端。这种模型通常用于客户端向服务端请求数据或执行操作,并等待服务端返回响应。常见的实现包括HTTP协议、RPC(Remote Procedure Call)等。
-
「发布/订阅加请求/响应模型」:这种模型结合了发布/订阅模型和请求/响应模型的特性。消息的发送者可以发布消息到一个主题,多个接收者可以订阅该主题并接收消息。同时,某些接收者还可以向发送者发送请求消息,并等待发送者的响应消息。这种模型通常用于实现复杂的分布式系统和消息传递模式。
这些消息传输模型可以根据具体的需求和场景进行选择和组合,以实现灵活、可靠的消息传输和通信。不同的模型适用于不同的应用场景,需根据具体的业务需求来选择合适的模型。
那么,kafka支持哪些消息传输模型?
Kafka是一个分布式流处理平台,它支持以下几种常见的消息传输模型:
-
「发布/订阅模型」(Publish/Subscribe Model):Kafka的核心特性就是基于发布/订阅模型的消息传输。生产者(发布者)将消息发布到一个主题(Topic),多个消费者(订阅者)可以订阅该主题,以并行方式消费消息。Kafka使用消息日志来持久化消息,保证消息的持久性和可靠性。
-
「队列模型」(Queue Model):尽管Kafka主要是基于发布/订阅模型,但也可以通过使用单个消费者组来实现类似队列模型的行为。在这种情况下,每个主题的每个分区只能由一个消费者消费,确保消息按顺序进行处理。
-
「请求/响应模型」(Request/Response Model):尽管Kafka主要是用于流式处理,但也可以使用请求/响应模式。客户端可以向Kafka发送请求消息,并等待Kafka返回响应消息。这种模型通常用于需要以请求/响应方式与Kafka进行交互的应用场景。
-
「批量处理模型」(Batch Processing Model):Kafka支持从生产者端进行消息批量发送,以及从消费者端进行消息批量消费。这种模型可以更有效地利用网络和IO资源,提高消息的吞吐量和性能。
Kafka的灵活性和可扩展性使其适用于许多不同的应用场景,包括实时数据流处理、消息队列、日志收集和分析等。根据具体的需求,可以选择合适的模型来构建基于Kafka的消息传输系统。
不同模型对应的使用场景是什么呢
-
「点对点模型」(Point-to-Point Model):
-
适用场景:单个消息只能被一个接收者处理的场景。例如,任务分发系统、异步请求-响应系统等。
-
-
「发布/订阅模型」(Publish/Subscribe Model):
-
适用场景:需要将消息广播给多个订阅者的场景。例如,实时数据推送、事件通知、日志订阅等。
-
-
「请求/响应模型」(Request/Response Model):
-
适用场景:需要进行请求和响应的场景。例如,客户端与服务器之间的请求-响应交互、RPC(远程过程调用)等。
-
-
「队列模型」(Queue Model):
-
适用场景:需要确保消息按顺序处理的场景,每个消息只能被一个接收者处理。例如,任务队列、工作流系统等。
-
-
「扇出/扇入模型」(Fan-Out/Fan-In Model):
-
适用场景:需要将消息复制给多个不同的接收者的场景。例如,日志记录和分析系统、消息广播等。
-
-
「请求/异步响应模型」(Request/Async Response Model):
-
适用场景:需要异步处理请求并返回响应的场景。例如,长时间运行的任务、异步通知等。
-
-
「分布式事务模型」(Distributed Transaction Model):
-
适用场景:需要保证多个分布式系统之间的事务一致性的场景。例如,分布式订单处理、分布式支付系统等。
-
Kafka术语说明
![alt](https://img-blog.csdnimg.cn/img_convert/79d8546c8582dd05301d04eafc2d7c7c.png)
-
「消息:Record」。Kafka 是消息引擎嘛,这里的消息就是指 Kafka 处理的主要对象。 -
「主题:Topic」。主题是承载消息的逻辑容器,在实际使用中多用来区分具体的业务。 -
「分区:Partition」。一个有序不变的消息序列。每个主题下可以有多个分区。 -
「消息位移:Offset」。表示分区中每条消息的位置信息,是一个单调递增且不变的值。 -
「副本:Replica」。Kafka 中同一条消息能够被拷贝到多个地方以提供数据冗余,这些地方就是所谓的副本。副本还分为领导者副本和追随者副本,各自有不同的角色划分。副本是在分区层级下的,即每个分区可配置多个副本实现高可用。 -
「生产者:Producer」。向主题发布新消息的应用程序。 -
「消费者:Consumer」。从主题订阅新消息的应用程序。消费者位移: -
「Consumer Offset」。表征消费者消费进度,每个消费者都有自己的消费者位移。消费者组: -
「Consumer Group」。多个消费者实例共同组成的一个组,同时消费多个分区以实现高吞吐。 -
「重平衡:Rebalance」。消费者组内某个消费者实例挂掉后,其他消费者实例自动重新分配订阅主题分区的过程。Rebalance 是 Kafka 消费者端实现高可用的重要手段。
我们要注意的几个点
Kafka的副本并不像MySQL那样对外提供服务
Kafka的副本(Replicas)和MySQL的副本(Replicas)在功能和设计上有一些不同,因此它们在对外提供服务方面有所不同。
-
「数据复制目的不同」:Kafka的副本是为了提供数据冗余和高可用性而设计的,它们用于备份主题的分区数据,以防止数据丢失。副本之间的数据同步和复制是Kafka集群的核心机制。而MySQL的副本则是为了提供数据的冗余备份和读取负载均衡而设计的,副本之间通过复制和同步来保证数据的一致性和可用性。
-
「数据读写方式不同」:Kafka的副本只用于读取数据,不直接对外提供写入服务。生产者将消息写入主题的分区,然后Kafka集群负责将消息复制到副本中,以提供冗余和容错能力。消费者可以从任意副本中读取数据,实现高可用性和负载均衡。而MySQL的副本是通过主从复制实现数据的读写分离,主节点负责写入操作,从节点负责读取操作。
-
「数据一致性要求不同」:Kafka的副本之间的数据同步是异步进行的,即主题的分区数据在写入主节点后,可能会有一些延迟才被复制到副本。这种异步复制方式可以提高Kafka的吞吐量和性能,但可能导致副本之间存在一定的数据延迟。而MySQL的副本之间的数据同步是同步进行的,确保数据在主节点写入后立即被复制到所有副本,以保证数据的一致性和可用性。
Kafka只是一个消息引擎吗?
Kafka通常被描述为一个分布式流处理平台,而不仅仅是一个消息引擎。尽管Kafka的核心功能是消息引擎,它提供了高性能、可靠的分布式消息传递,但Kafka还具备其他重要的特性和功能,使其成为一个全面的分布式流处理平台。
如果你通读全篇文字但只能记住一句话,我希望你记住的就是这句。「再强调一遍,Kafka 是消息引擎系统,也是分布式流处理平台。」
Kafka发展史
Kafka的设计历史可以追溯到2010年,当时由LinkedIn的工程师Jay Kreps、Neha Narkhede和Jun Rao共同开发和推出。
-
「起初的需求」:在LinkedIn,存在一个需要处理大规模数据流的问题。传统的消息队列系统无法满足其高吞吐量和低延迟的需求。因此,Jay Kreps、Neha Narkhede和Jun Rao决定自行开发一种新的解决方案。
-
「项目开始」:2010年,Kafka项目正式启动。最初的目标是构建一个高性能的分布式提交日志系统,用于LinkedIn内部的数据管道和实时流式处理。
-
「发布开源」:2011年,LinkedIn将Kafka作为开源项目发布,成为Apache软件基金会的孵化项目。这使得更多的公司和开发者开始参与和贡献Kafka的发展。
-
「Kafka 0.8版本」:2012年,发布了Kafka的第一个重要版本0.8。该版本引入了新的存储层设计,使用分段日志(Segmented Log)来提高吞吐量和可靠性。此外,0.8版本还引入了新的消息消费模型(Consumer Model),支持多个消费者组和消息的持久化存储。
-
「Kafka 0.9版本」:2015年,发布了Kafka的0.9版本。这是一个重要的里程碑,引入了Kafka的新的消费者API,增强了安全性和可靠性。此外,0.9版本还引入了Kafka Connect和Kafka Streams,使Kafka成为一个全面的流处理平台。
-
「Kafka 1.0版本」:2017年,发布了Kafka的1.0版本。这是一个重要的稳定版本,引入了许多改进和性能优化。1.0版本还引入了幂等写入和事务支持等重要功能,使Kafka成为更可靠和全面的分布式流处理平台。
自那时以来,Kafka持续发展和改进,不断增加新的功能和特性。它已经成为一个广泛使用的分布式流处理平台,被许多公司和组织用于构建实时数据管道、事件驱动应用程序和大规模数据处理。
言归正传,Kafka 在设计之初就旨在提供三个方面的特性:
-
「提供一套 API 实现生产者和消费者」; -
「降低网络传输和磁盘存储开销」; -
「实现高伸缩性架构」。
后续的文章中,我们将陆续探讨 Kafka 是如何做到以上三点的。
Kafka生态
![alt](https://img-blog.csdnimg.cn/img_convert/b94a51bd590c2b191793e80f51406adf.png)
Kafka有哪些版本?
-
「Apache Kafka」:这是Kafka的官方发行版,由Apache软件基金会进行维护和管理。Apache Kafka是一个开源项目,提供了稳定的版本和官方支持。
-
「Confluent Platform」:Confluent是一家专注于Kafka的公司,他们提供了Confluent Platform作为Kafka的一个企业级发行版。Confluent Platform在Apache Kafka的基础上扩展了一些企业级功能和工具,包括集成的Schema Registry、Kafka Connect、KSQL等。
-
「Cloudera Distribution Including Apache Kafka(CDH)」。CDH是Cloudera提供的一个发行版,它基于Apache Kafka,并与Cloudera生态系统中的其他工具和框架集成。CDH提供了一套集成的工具和管理界面,帮助用户更方便地部署、管理和监控Kafka集群。
Apache Kafka
对 Apache Kafka 而言,它现在依然是开发人数最多、版本迭代速度最快的 Kafka。在 2018 年度 Apache 基金会邮件列表开发者数量最多的 Top 5 排行榜中,Kafka 社区邮件组排名第二位。如果你使用 Apache Kafka 碰到任何问题并提交问题到社区,社区都会比较及时地响应你。这对于我们 Kafka 普通使用者来说无疑是非常友好的。
但是 Apache Kafka 的劣势在于它仅仅提供最最基础的组件,特别是对于前面提到的 Kafka Connect 而言,社区版 Kafka 只提供一种连接器,即读写磁盘文件的连接器,而没有与其他外部系统交互的连接器,在实际使用过程中需要自行编写代码实现,这是它的一个劣势。另外 Apache Kafka 没有提供任何监控框架或工具。显然在线上环境不加监控肯定是不可行的,你必然需要借助第三方的监控框架实现对 Kafka 的监控。好消息是目前有一些开源的监控框架可以帮助用于监控 Kafka(比如 Kafka manager)。
Confluent Kafka
下面来看 Confluent Kafka。Confluent Kafka 目前分为免费版和企业版两种。前者和 Apache Kafka 非常相像,除了常规的组件之外,免费版还包含 Schema 注册中心和 REST proxy 两大功能。前者是帮助你集中管理 Kafka 消息格式以实现数据前向 / 后向兼容;后者用开放 HTTP 接口的方式允许你通过网络访问 Kafka 的各种功能,这两个都是 Apache Kafka 所没有的。
除此之外,免费版包含了更多的连接器,它们都是 Confluent 公司开发并认证过的,你可以免费使用它们。至于企业版,它提供的功能就更多了。在我看来,最有用的当属跨数据中心备份和集群监控两大功能了。多个数据中心之间数据的同步以及对集群的监控历来是 Kafka 的痛点,Confluent Kafka 企业版提供了强大的解决方案帮助你“干掉”它们。
不过 Confluent Kafka 的一大缺陷在于,Confluent 公司暂时没有发展国内业务的计划,相关的资料以及技术支持都很欠缺,很多国内 Confluent Kafka 使用者甚至无法找到对应的中文文档,因此目前 Confluent Kafka 在国内的普及率是比较低的。
「一言以蔽之,如果你需要用到 Kafka 的一些高级特性,那么推荐你使用 Confluent Kafka。」
CDH/HDP Kafka
最后说说大数据云公司发布的 Kafka(CDH/HDP Kafka)。这些大数据平台天然集成了 Apache Kafka,通过便捷化的界面操作将 Kafka 的安装、运维、管理、监控全部统一在控制台中。如果你是这些平台的用户一定觉得非常方便,因为所有的操作都可以在前端 UI 界面上完成,而不必去执行复杂的 Kafka 命令。另外这些平台提供的监控界面也非常友好,你通常不需要进行任何配置就能有效地监控 Kafka。
但是凡事有利就有弊,这样做的结果是直接降低了你对 Kafka 集群的掌控程度。毕竟你对下层的 Kafka 集群一无所知,你怎么能做到心中有数呢?这种 Kafka 的另一个弊端在于它的滞后性。由于它有自己的发布周期,因此是否能及时地包含最新版本的 Kafka 就成为了一个问题。比如 CDH 6.1.0 版本发布时 Apache Kafka 已经演进到了 2.1.0 版本,但 CDH 中的 Kafka 依然是 2.0.0 版本,显然那些在 Kafka 2.1.0 中修复的 Bug 只能等到 CDH 下次版本更新时才有可能被真正修复。
「简单来说,如果你需要快速地搭建消息引擎系统,或者你需要搭建的是多框架构成的数据平台且 Kafka 只是其中一个组件,那么我推荐你使用这些大数据云公司提供的 Kafka。」
最后说一说Kafka版本演进
-
「Kafka 0.8.x系列」:这是Kafka的初始版本系列。它引入了Kafka的基本功能,如高吞吐量、持久性、分布式消息传递等。在这个系列中,Kafka引入了生产者和消费者API,以及基本的消息存储和复制机制。
-
「Kafka 0.9.x系列」:这个版本系列引入了一些重要的改进和新特性。其中最显著的是引入了Kafka Connect和Kafka Streams。Kafka Connect提供了可插拔的连接器,用于将Kafka与外部系统集成。Kafka Streams是一个用于构建实时流处理应用程序的库。
-
「Kafka 0.10.x系列」:这个版本系列引入了一些重要的改进和新特性。其中包括了Exactly-Once语义的支持,这是通过引入事务API来实现的。此外,Kafka 0.10.x还引入了Kafka Mirror Maker,用于在不同的Kafka集群之间进行数据复制和同步。
-
「Kafka 0.11.x系列」:这个版本系列引入了一些重要的改进和新特性。其中包括了Kafka Streams的重大改进,如窗口操作和KTable。此外,Kafka 0.11.x还引入了Kafka Admin Client,用于管理和配置Kafka集群。
-
「Kafka 1.0.x系列」:这个版本系列是Kafka的一个重要里程碑。它引入了许多重要的改进和新特性,包括Kafka Streams的重大改进、更好的安全性支持、更好的监控和管理工具等。
-
「Kafka 2.0.x系列」:这个版本系列引入了一些重要的改进和新特性。其中包括了KIP-98,引入了Exactly-Once语义的增强支持。此外,Kafka 2.0.x还引入了KRaft,这是一种新的复制协议,用于提供更强大的数据一致性保证。
本文由 mdnice 多平台发布
相关文章:
![](https://img-blog.csdnimg.cn/img_convert/b94a51bd590c2b191793e80f51406adf.png)
【Kafka系列】(一)Kafka入门
有的时候博客内容会有变动,首发博客是最新的,其他博客地址可能会未同步,认准https://blog.zysicyj.top 首发博客地址 系列文章地址 Kafka是什么? 一句话概括:「Apache Kafka 是一款开源的消息引擎系统」 什么是消息引擎系统&#…...
![](https://img-blog.csdnimg.cn/0ca8d630b88940d7b06a406d4041ca57.gif)
外包干了2个月,技术退步明显了...
先说一下自己的情况,大专生,19年通过校招进入湖南某软件公司,干了接近4年的功能测试,今年8月份,感觉自己不能够在这样下去了,长时间呆在一个舒适的环境会让一个人堕落!而我已经在一个企业干了四年的功能测试…...
![](https://img-blog.csdnimg.cn/1f2caad5f1224ffd814a2953d544262a.png)
python实现语音识别
1. 首先安装依赖库 pip install playsound # 该库用于播放音频文件 pip install speech_recognition # 该库用于语音识别 pip install PocketSphinx # 语音识别模块中只有sphinx支持离线的,使用该模块需单独安装 pip install pyttsx3 # 该库用于将文本转换为语音播…...
![](https://img-blog.csdnimg.cn/img_convert/999a7fa69b18b787b0a1f693d0a1f00f.png)
java八股文面试[多线程]——线程的状态
5种状态一般是针对传统的线程状态来说(操作系统层面) 6种状态:Java中给线程准备的 NEW:Thread对象被创建出来了,但是还没有执行start方法。 RUNNABLE:Thread对象调用了start方法,就为RUNNABLE状…...
![](https://www.ngui.cc/images/no-images.jpg)
Go学习[合集]
文章目录 Go学习-Day1Go学习-Day2标识符变量基础语法字符串类型类型转换string和其他基本类型转换其他类型转stringstring转其他类型 指针类型运算符标准IO分支语句 Go学习-Day3循环语句函数声明init函数匿名函数闭包defer Go学习-Day4函数值传递,引用传递常用的函数…...
![](https://img-blog.csdnimg.cn/img_convert/2095e6c508d4246caa0f43e8391507f0.png)
代码随想录算法训练营第42天 | ● 01背包问题,你该了解这些! ● 01背包问题,你该了解这些! 滚动数组 ● 416. 分割等和子集
文章目录 前言一、01背包问题,你该了解这些!二、01背包问题,你该了解这些! 滚动数组三、416. 分割等和子集总结 前言 01背包 一、01背包问题,你该了解这些! 确定dp数组以及下标的含义 对于背包问题&#x…...
![](https://img-blog.csdnimg.cn/img_convert/8ba1cfd70369b5b488e70f19055d8b11.png)
解决DNS服务器未响应错误的方法
当你将设备连接到家庭网络或具有互联网接入功能的Wi-Fi热点时,由于各种原因,互联网连接可能无法正常工作。本文中的说明适用于Windows 10、Windows 8和Windows 7。 无法连接到DNS服务器的原因 故障的一类与域名系统有关,域名系统是世界各地互联网提供商使用的分布式名称…...
![](https://img-blog.csdnimg.cn/1d1606a5fea844f98707c8e17dfb7106.png)
SpringBoot的HandlerInterceptor拦截器使用方法
一、创建拦截器 通过实现HandlerInterceptor接口创建自己要使用的拦截器 import org.springframework.context.annotation.Configuration; import org.springframework.web.servlet.HandlerInterceptor; import org.springframework.web.servlet.ModelAndView; import javax.…...
![](https://www.ngui.cc/images/no-images.jpg)
java 常用 jar 包
1 Lombok 是一个 java 类库,它利用注解方式自动生成 java bean 中 getter、setter、equals 等方法,还能自动生成 logger、toString、hashCode、builder 等 日志相关变量、Object 类方法或设计模式相关的方法,能够让你的 代码更简洁࿰…...
![](https://img-blog.csdnimg.cn/img_convert/b888c20841068f3233de6dfdfd6ba03b.png)
C#面试十问
1:C#中变量类型分为哪两种?它们的区别是什么?2:Class和Struct的区别?3:C#中类的修饰符和类成员的修饰符有哪些?4:面向对象的三个特征(特点)是什么?…...
![](https://img-home.csdnimg.cn/images/20230724024159.png?origin_url=https%3A%2F%2Fassets.leetcode.com%2Fuploads%2F2021%2F01%2F18%2Funiquebstn3.jpg&pos_id=I74nfN8B)
Day 41 动态规划part03 : 343. 整数拆分 96.不同的二叉搜索树
96. 不同的二叉搜索树 给你一个整数 n ,求恰由 n 个节点组成且节点值从 1 到 n 互不相同的 二叉搜索树 有多少种?返回满足题意的二叉搜索树的种数。 示例 1: 输入:n 3 输出:5示例 2: 输入:n 1…...
![](https://img-blog.csdnimg.cn/1e04ed8b485f4932bf0673d90bbbdb2c.png)
四轴飞行器的电池研究(MatlabSimulink仿真)
💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…...
![](https://img-blog.csdnimg.cn/img_convert/a4b7035c1f9ddb0cca707a6300b9035f.png)
准备HarmonyOS开发环境
引言 在开始 HarmonyOS 开发之前,需要准备好开发环境。本章将详细指导你如何安装 HarmonyOS SDK、配置开发环境、创建 HarmonyOS 项目。 目录 安装 HarmonyOS SDK 配置开发环境 创建 HarmonyOS 项目 总结 1. 安装 HarmonyOS SDK HarmonyOS SDK 是开发 Harmo…...
![](https://img-blog.csdnimg.cn/06ceee0d2ad14c11a92d94241839e298.jpeg)
Java 面试 - Redis
Redis Redis 是基于键值对的非关系型数据库。Redis 拥有string、hash、list、set、zset等多种数据结构, redis具有惊人的读写性能, 其优秀的持久化机制是的它在断电和机械故障时也不会发生数据丢失, 可以用于热点数据存放, 还提供了键过期、发布订阅、食物、流水线、LUA脚本等多…...
![](https://img-blog.csdnimg.cn/922029c30717493fb93ec7f6f9236b66.png)
【Go 基础篇】Go语言结构体之间的转换与映射
在Go语言中,结构体是一种强大的数据类型,用于定义和组织不同类型的数据字段。当我们处理复杂的数据逻辑时,常常需要在不同的结构体之间进行转换和映射,以便实现数据的转移和处理。本文将深入探讨Go语言中结构体之间的转换和映射技…...
![](https://img-blog.csdnimg.cn/971f3c2631094100ab640eaccacdc8d3.png)
Java 多线程系列Ⅳ(单例模式+阻塞式队列+定时器+线程池)
多线程案例 一、设计模式(单例模式工厂模式)1、单例模式2、工厂模式 二、阻塞式队列1、生产者消费者模型2、阻塞对列在生产者消费者之间的作用3、用标准库阻塞队列实现生产者消费者模型4、模拟实现阻塞队列 三、定时器1、标准库中的定时器2、模拟实现定时…...
![](https://img-blog.csdnimg.cn/img_convert/dbbbd6d03ff6903aebdf56c117e2ca69.png)
将 ordinals 与 比特币智能合约集成 : 第 1 部分
将序数与比特币智能合约集成:第 1 部分 最近,比特币序数在区块链领域引起了广泛关注。 据称,与以太坊 ERC-721 等其他代币标准相比,Ordinals 的一个主要缺点是缺乏对智能合约的支持。 我们展示了如何向 Ordinals 添加智能合约功…...
![](https://img-blog.csdnimg.cn/674bc85291254e91a85812b7910c7248.png)
【USRP】集成化仪器系列1 :信号源,基于labview实现
USRP 信号源 1、设备IP地址:默认为192.168.10.2,请勿 修改,运行阶段无法修改。 2、天线输出端口是TX1,请勿修改。 3、通道:0 对应RF A、1 对应 RF B,运行 阶段无法修改。 4、中心频率:当需要…...
![](https://img-blog.csdnimg.cn/1ad1a35a30a0484d95e3a624dd3da9c5.png)
串行协议——USB驱动[基础]
多年前的学习记录,整理整理。 一、USB协议基础 二、Linux内核USB驱动源码分析 USB中不同类型设备使用的 设备描述符(设备类\设备子类\设备协议) 配置不同,典型的以下几种:1)HID设备: Human Input Device人工输入设备, 如鼠标\键盘\游戏手柄等.2)CDC设备: Communi…...
![](https://img-blog.csdnimg.cn/img_convert/54ca8d1e3f2c46b3b775e7a01f29d0b3.jpeg)
健康舒适的超满意照明体验!SUKER书客SKY护眼台灯测评
健康舒适的超满意照明体验!SUKER书客SKY护眼台灯测评 2022年全国儿童青少年总体近视率为53.6%,其中6岁儿童为14.5%,小学生为36%,初中生为71.6%,高中生为81%,近视已成为当下人们遇到的比较普遍的眼健康问题…...
![](https://img-home.csdnimg.cn/images/20230724024159.png?origin_url=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_png%2FZUHCFZqSZztFSTdict6hPGXmO0hboia08xPJlDqrIp0yQM3QQCReM1icLdqOMtKnffyFo1Ze8Qa60hPQOSh8MC3tw%2F640&pos_id=AzNnGziD)
PID 算法
1.1 概述 比例(Proportion)积分(Integral)微分(Differential)控制器(PID控制器或三项控制器)是一种采用反馈的控制回路机制,广泛应用于工业控制系统和需要连续调制控制的…...
![](https://img-blog.csdnimg.cn/c8724980a54d45ccae62df342b7c644e.png)
13.Redis 事务
Redis 事务 redis 事务事务操作multi 开启事务exec 执行事务discard 放弃当前事务watchunwatch redis 事务 Redis 的事务和 MySQL 的事务概念上是类似的。 都是把⼀系列操作绑定成⼀组。 让这⼀组能够批量执⾏。 Redis 的事务和 MySQL 事务的区别: 弱化的原⼦性: 这里指的是 …...
![](https://www.ngui.cc/images/no-images.jpg)
李宏毅机器学习课程笔记(更新ing)
CNN 为什么AlphaGo可以用CNN?棋盘抽象成图片时需要注意什么? 首先图片有两个特点: 1,只观察局部就可以显示某种pattern,比如要得出一个鸟嘴的结论,只需要观察局部图片 2,某种pattern可以出现在图…...
![](https://img-blog.csdnimg.cn/89e2a3e1f2cc4f63bc73bc5b2d3d6df1.png)
SIP mini 对讲终端,带sip热点功能
SV-A10/SV-A10W SIP mini 对讲终端,带sip热点功能 SV-A10/SV-A10W 是专门针对行业用户需求研发的一款 SIP mini 对讲产品,外观小巧,功能 强大,集智能安防、音/视频对讲和广播功能于一体,性价比高。支持壁挂式安装/86…...
![](https://www.ngui.cc/images/no-images.jpg)
PHP中根据出生年月日计算年龄的封装函数
在 PHP 中,你可以使用以下函数来根据出生年月日计算年龄: 封装函数 function calculateAge($birthday) {$currentDate date(Y-m-d);$birthdayDate date(Y-m-d, strtotime($birthday));$age date_diff(date_create($currentDate), date_create($birt…...
![](https://www.ngui.cc/images/no-images.jpg)
Linux巡检脚本
做运维的朋友都知道,大家经常要对一些系统做月度维护或者自查,在这个过程中,如果只是小工作量的查询,进入系统直接输入命令即可。但是如果说要查询的系统很多,每个系统中要查询的项目也很多,那么每次都要一…...
![](https://www.ngui.cc/images/no-images.jpg)
SQLite 3.43.0 发布,又有啥新功能?
SQLite 开发团队于 2023 年 08 月 24 日发布了 SQLite 3.43.0 版本。本文给大家分析一下该版本的更新。 全文索引 SQLite 3.43.0 增加了 Contentless-Delete FTS5 索引。这是一种 FTS5 全文索引的变种,不存储被索引的内容,同时支持数据的删除操作。 例…...
![](https://img-blog.csdnimg.cn/img_convert/d14d858285ca124295aeab3319d66b12.png)
百度自研高性能ANN检索引擎,开源了
作者 | Puck项目组 导读 Puck是百度自研的开源ANN检索引擎。Puck开源项目包含两种百度自研的检索算法,以高召回、高准确、高吞吐为目标,适用于多种数据规模和场景。随着业务发展不断的优化和迭代,进行充分的技术开发和测试,确保了…...
![](https://www.ngui.cc/images/no-images.jpg)
golang遍历map的方法
在Go语言中,可以使用range关键字来遍历一个map。range关键字会返回两个值:key和value。 以下是遍历map的示例代码: package main import "fmt" func main() { myMap : map[string]int{ "apple": 1, "banana…...
![](https://img-blog.csdnimg.cn/img_convert/78691534e9e683a1df02a78e7db4b130.png)
如何让Android平台像网络摄像机一样实现GB28181前端设备接入?
技术背景 好多开发者在做国标对接的时候,首先想到的是IPC(网络摄像头),通过参数化配置,接入到国标平台,实现媒体数据的按需查看等操作。 像执法记录仪等智能终端,跑在Android平台,…...
![](https://itimetraveler.github.io/gallery/android_common/adbtransport_auth.png)
做团膳有哪些网站/宁波seo快速优化课程
ADB简介 Android Debug Bridge (adb) 是一个Android的命令行工具。可以用来连接模拟器或实际的移动设备。比如 adb logcat, adb shell。Dalvik Debug Monitor Server(DDMS) 后台也是运行的adb来实现监控调试移动设备。 总体而言,adb有两个用途: 监控连…...
![](https://img-blog.csdnimg.cn/8cc712c2ccbd4fae8fdb235389cdd94d.png)
wordpress 复杂 密码/东莞网站推广优化公司
聚类Clustering机器学习 聚类ClusteringK-Means K均值分类K-Means 算法K-Means 的loss functionK-mean 的收敛K-means 一些限制kernel K-means层次聚类 Hierarchical Clustering度量两个数据点间的距离的方法如何度量两个集合之间的距离Flat vs Hierarchical Clustering机器学习…...
![](/images/no-images.jpg)
凡科2网站需要备案吗/品牌企业seo咨询
文章目录Kafka两种消费方式consumer端重要参数处理消息丢失Spring KafkaKafka Spring Kafka用于简化Kafka Client的使用,避免大量样板代码,处理大量错误重试,异常重启兜底等业务之外的逻辑,让业务专注于在回调中处理消息。 两种…...
![](https://img-blog.csdnimg.cn/img_convert/a1544c9fdaf1f105027d44f0a5ad61cd.png)
成都哪家公司做网站比较好/网站关键词推广工具
序列是python中最基本的数据结构。所谓的序列,指的是可以连续存放多个值的内存空间,序列中的每个元素都会有一个数字,即它的位置或索引。通过这个索引就能找到序列中的元素 。在python的序列中,包括列表,字符串&#x…...
![](http://hi.csdn.net/attachment/201108/1/0_13121789685QY4.gif)
网站制作布局/线上推广的三种方式
OpenGL ES 03 – 转化今天,我们要在之前的基础 上,在屏幕上同时显示三角形和矩形。为了做到这点,我们需要移动它们。移动物体这个动作我们称之为转化。(坐标转换)在OpenGL ES中,对模型/物体进行…...
![](/images/no-images.jpg)
旅游景区网站建设方案/百度快速收录网站
步骤: 1、在Activity布局文件中定义framelayout用于添加Fragment 2、创建两个Fragment用于切换 3、获取Fragment管理器,并开启事物FragmentTransaction 4、通FragmentTransaction.add(resource id, fragment)将fragment添加到布局上,提交事物…...