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

大数据-kafka学习笔记

Kafka

Kafka 是一个分布式的基于发布/订阅模式的消息队列(Message Queue),主要应用于大数据实时处理领域。

Kafka可以用作Flink应用程序的数据源。Flink可以轻松地从一个或多个Kafka主题中消费数据流。这意味着您可以使用Kafka来捕获和传输实时数据,并将其发送到Flink进行进一步处理。

Flink和Kafka在实时数据处理和流处理应用程序中通常协同工作,Kafka用于数据传输和捕获,而Flink用于数据处理和分析。

Kafka由 生产者 Broker 消费者组成,生产者和消费者是由Java语言编写的,Broker由Scala语言写的。

基础架构

在这里插入图片描述

  1. Producer:kafka 生产者,用于接收外部数据,然后将数据发送给kafka集群存储,假如要发100T的数据。
  2. Consumer:消费者,就是到kafka中取数据的客户端,比如:flink就是一个消费者,到kafka中取出数据计算处理。
  3. Broker:一个Broker就是一个kafka服务器,如果你在一个虚拟机上安装了kafka,那么这个虚拟机就是一个Broker。
  4. Partition:分区。前面说了,要发送100T的数据给kafka,那如果只用一台kafka服务器(Broker)接收肯定不好,太大了。所以就有了kafka集群一起处理,这100T的数据是一个主题,太大了,就考虑分区,分成3个区,每个分区分到不同的kafka服务器上,一个分区存33T。
  5. Consumer Group:消费者组。由多个消费者组成,消费者就是来取kafka中的数据来处理使用的。现在kafka已经存储了100T的数据,假如一个消费者来取使用,肯定比较慢,所以就可以引入多个消费者一起来取数据处理。一个分区中的数据只能由一个消费者
  6. Replica:副本。每个分区可以设置一个或多个副本,我理解是副本会同步主分区中的数据,假如主分区挂了,副本就可以顶上去了。
  7. Leader:领导。主分区,所有副本分区中的主分区,生产者和消费者都只操作主分区。
  8. Follower:除了主分区,其他的副本分区都是Follower,Follower会从Leader中同步数据,当Leader挂了,某个Follower会成为新的Leader。
  9. zookeeeper: ZooKeeper 用于协调和管理 Kafka 集群的各个组件,包括 Broker、Topic 配置、分区分配、Leader 选举等。Kafka 使用 ZooKeeper 来维护集群的整体状态和配置信息,以确保各个组件之间的协同工作。

生产者

在消息发送的过程中,涉及到了两个线程——main 线程和 Sender 线程。在 main 线程中创建了一个双端队列 RecordAccumulator。main 线程将消息发送给 RecordAccumulator, Sender 线程不断从RecordAccumulator 中拉取消息发送到Kafka Broker。
在这里插入图片描述

生产者的main线程

main线程先创建Producer对象,然后调用send方法,数据会经过拦截器,进行过滤处理,如果不需要可以不设置拦截器,拦截器用的较少。接着经过序列化器对数据进行序列化(在网络中传输数据需要序列化将数据转成通用的字节流便于网络传输),然后经过分区器,分区器决定每条数据要发往哪个分区,然后将每条数据发给对应的分区,一个分区对应一个DQuee(双端队列),队列中会有一批一批数据,一批数据默认大小是16k。

总的来说,main线程将数据发到RecordAccumulator记录累加器中,默认大小是32m,这个是在内存中,起到缓存的作用,将大量的数据一批一批发给kafka,提高网络传输速率。累加器使用有限的内存,当内存耗尽时(生成者产生数据的速度超过发送给服务器的速度),追加调用将阻塞,除非显式禁用此行为。

sender线程,负责将数据发给kafka。数据是分批次发给kafka,当一个批次的数据达到16k或等待的时间达到linger.ms设置的时间,一个批次的数据就会被sender发给kafka,一个批次就是分区队列中那个小正方形。

sender发送数据:broker1(request1,request2,request3,request4,request5),每个kafka节点维护一个发送数据的请求缓存,这个请求缓存最多缓存5个请求,如果请求发送失败了,会使用后面的请求继续发。批数据到达对应的broker后,会先同步副本。

生产者分区

分区好处:

1)便于合理使用存储资源,每个Partition在一个Broker上存储,可以把海量的数据按照分区切割成一

块一块数据存储在多台Broker上。合理控制分区的任务,可以实现负载均衡的效果。

2)提高并行度,生产者可以以分区为单位发送数据;消费者可以以分区为单位进行消费数据。
在这里插入图片描述

生产者发送消息的分区策略

ProducerRecord是生产者发送数据的单位
在这里插入图片描述

自定义分区器

也可以自定义分区器,自己决定数据要发到哪个分区中

import org.apache.kafka.clients.producer.Partitioner;
import org.apache.kafka.common.Cluster;
import java.util.Map;
/**
发送过来的数据中如果包含 atguigu,就发往 0 号分区,不包含 atguigu,就发往 1 号分区定义类实现 Partitioner 接口,重写 partition()方法。* 1. 实现接口 Partitioner
* 2. 实现 3 个方法:partition,close,configure
* 3. 编写 partition 方法,返回分区号
*/
public class MyPartitioner implements Partitioner {/*** 返回信息对应的分区* @param topic 主题* @param key 消息的 key* @param keyBytes 消息的 key 序列化后的字节数组* @param value 消息的 value* @param valueBytes 消息的 value 序列化后的字节数组* @param cluster 集群元数据可以查看分区信息* @return*/@Overridepublic int partition(String topic, Object key, byte[] keyBytes, Object value, byte[] valueBytes, Cluster cluster) {// 获取消息String msgValue = value.toString();// 创建 partitionint partition;// 判断消息是否包含 atguiguif (msgValue.contains("atguigu")){partition = 0;}else {partition = 1;}// 返回分区号return partition;}// 关闭资源@Overridepublic void close() {}// 配置方法@Overridepublic void configure(Map<String, ?> configs) {}
}

然后在生产者配置里加上自定义分区器

// 添加自定义分区器
properties.put(ProducerConfig.PARTITIONER_CLASS_CONFIG,"com.atguigu.kafka.producer.MyPartitioner");

生产者如何提高吞吐量

如何提高生产者发送数据的速度,主要是调整以下四个参数

• batch.size:批次大小,默认16k • linger.ms:等待时间,修改为5-100ms
默认是0ms,就是数据一到队列中就发给broker,这样的好处就是实时性好,但是效率低,一次发几条数据总比一次发一条效率高。也不能改太大,太大时效性不好。• compression.type:压缩snappy
压缩数据,这样一批次就可以存更多的数据• RecordAccumulator:缓冲区大小,可修改为64m

在这里插入图片描述

生产者数据可靠性

主要是当broker收到数据后的应答机制
在这里插入图片描述

ISR队列是只一个分区的Leader和所有的Followers的集合,ISR(0,1,2),为了解决那个问题,如果Leader长时间没收到某个Follower同步数据的请求,就会认为这个Follower故障了,就会从ISR队列中踢出这个Follower,ISR(0,1)。

如果Follower长时间未向Leader发送通信请求或同步数据,则 该Follower将被踢出ISR。该时间阈值由replica.lag.time.max.ms参 数设定,默认30s。例如2超时,(leader:0, isr:0,1)。

数据完全可靠条件 = ACK级别设置为-1 + 分区副本大于等于2 + ISR里应答的最小副本数量大于等于2
数据可靠性越强,效率越慢

在这里插入图片描述

// 设置 acksproperties.put(ProducerConfig.ACKS_CONFIG, "all");// 重试次数 retries,默认是 int 最大值,2147483647properties.put(ProducerConfig.RETRIES_CONFIG, 3);

消费者

消费者消费一个分区中的数据时,会跟踪他们自己消费到的偏移量,Kafka 会定期将偏移量提交到 Kafka 主题中的特殊主题(__consumer_offsets)中,这样,消费者如果停止或重新启动后,会从上次的偏移量继续消费。偏移量是每条消息在分区中的位置。

主题

在这里插入图片描述

上面那样肯定不好,各种消息的的生产者(生产圆蛋蛋、生产方框框、生产小心心)将消息都发给kafka,然后kafka将消息都分类,每种分类都有相应的主题,然后消费者根据需要订阅相应的主题。就能收到对应的消息。
在这里插入图片描述

分区

如果一个主题的消息比较多,就可以考虑分区,分区可以分布在不同的服务器上,所以主题也可以分布在不同的服务器上,这样比单服务器处理快。
在这里插入图片描述

如果生成者没有指定分区,分区器就会根据每条消息的键算出消息该去哪个分区。键:就是每条消息的一个标记,决定了消息该去哪个分区。分区器:就是一个算法,算消息该去哪个分区,输入是键,输出是消息去的分区。
在这里插入图片描述

偏移量

偏移量就是消息在每个分区中的位置,kafka在收到消息的时候,会为每个消息设置偏移量,然后将消息存到磁盘中。

消费者只能按顺序消费读取。消费者如果要分区0的第四个,kafka就会说第三个还没读取,不给第四个。

kafka集群

一个broker就是一个kafka服务器。下面有两个broker构成了kafka集群,他们的数据通过复制同步,当有一个kafka宕机了,另一台就可以先顶上,保证了kafka的可靠性。

在这里插入图片描述

监控kafka

这个前提得先安装jdk

1、修改kafka的启动脚本

vim bin/kafka-server-start.sh

if [ "x$KAFKA_HEAP_OPTS" = "x" ]; thenexport KAFKA_HEAP_OPTS="-Xmx1G -Xms1G"
fi

改为

if [ "x$KAFKA_HEAP_OPTS" = "x" ]; thenexport  KAFKA_HEAP_OPTS="-server        -Xms2G  -Xmx2G-XX:PermSize=128m      -XX:+UseG1GC    -XX:MaxGCPauseMillis=200-XX:ParallelGCThreads=8        -XX:ConcGCThreads=5-XX:InitiatingHeapOccupancyPercent=70"export JMX_PORT="9999"#export KAFKA_HEAP_OPTS="-Xmx1G -Xms1G"
fi
修改kafka进程信息:
-Xms2G:设置 Kafka 进程的初始堆内存大小为 2 GB。
-Xmx2G:设置 Kafka 进程的最大堆内存大小为 2 GB。
XX:PermSize=128m:设置持久代(PermGen)的初始大小为 128 MB。请注意,这个选项在 Java 8 和更新的版本中不再适用,因为 PermGen 已被 Metaspace 取代。
-XX:+UseG1GC:指定使用 G1 垃圾收集器。
-XX:MaxGCPauseMillis=200:设置最大垃圾收集暂停时间为 200 毫秒。
XX:ParallelGCThreads=8:设置并行垃圾收集线程的数量为 8。
XX:ConcGCThreads=5:设置并发垃圾收集线程的数量为 5。
XX:InitiatingHeapOccupancyPercent=70:设置堆内存占用百分比,当堆内存使用达到 70% 时,启动并发垃圾收集。
这些参数的目的是调整 Kafka 进程的性能和垃圾收集行为,以满足特定的性能需求。请注意,这些参数的值可以根据你的 Kafka 部署和硬件资源进行调整。堆内存的大小和垃圾收集器的选择将影响 Kafka 的性能和稳定性。最后,这段脚本还设置了 JMX 端口为 9999,这是用于监控 Kafka 进程的 Java Management Extensions(JMX)端口。通过此端口,你可以使用 JMX 工具监控 Kafka 进程的性能指标和状态。如果需要监控 Kafka,你可以使用 JMX 工具连接到此端口。

2、官网下载安装包

https://www.kafka-eagle.org/

3、上传解压

第一次解压后,里面有个压缩包再解压才是真正的。
在这里插入图片描述

/opt/module/efak/conf/system-config.properties

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

5、配置环境变量

$ sudo vim /etc/profile.d/my_env.sh# kafkaEFAK
export KE_HOME=/opt/module/efak 
export PATH=$PATH:$KE_HOME/binsource /etc/profile

6、启动

/bin/kf.sh start

压力测试

# 单Kafka服务器,生成者发送1000000条数据,每条大小1k,总共发送大约
bin/kafka-producer-perf-test.sh --topic test --record-size 1024 --num-records 1000000 --throughput 10000 --producer-props bootstrap.servers=linjl:9092 batch.size=16384 linger.ms=0batch.size=16384 linger.ms=0      9.76 MB/sec

record-size 是一条信息有多大,单位是字节,本次测试设置为 1k。

BUG

1、Error while fetching metadata with correlation id : {LEADER_NOT_AVAILABLE}

在这里插入图片描述

2、

[root@linjl kafka_2.12-3.0.0]# ./bin/kafka-console-consumer.sh --topic quickstart-events --bootstrap-server linjl:9092[2023-09-13 16:51:54,710] WARN [Consumer clientId=consumer-console-consumer-32025-1, groupId=console-consumer-32025] Error while fetching metadata with correlation id 2 : {quickstart-events=LEADER_NOT_AVAILABLE} (org.apache.kafka.clients.NetworkClient)

这个警告消息 “Error while fetching metadata with correlation id 2 : {quickstart-events=LEADER_NOT_AVAILABLE}” 表示 Kafka 消费者在尝试订阅主题 “quickstart-events” 时遇到了 “LEADER_NOT_AVAILABLE” 错误。这个错误通常表示消费者无法找到主题的 leader 分区,因此它无法读取消息。

我的猜想: 可能是因为 Kafka 服务器无法从 ZooKeeper 获取到有关 “quickstart-events” 主题的元数据信息,包括分区的 Leader 信息。

3、Received invalid metadata error in produce request on partition quickstart-events-0

due to org.apache.kafka.common.errors.KafkaStorageException: Disk error when trying to access log file on the disk… Going to request metadata update now (org.apache.kafka.clients.producer.internals.Sender)

表示在尝试将消息写入分区 “quickstart-events-0” 时,Kafka 生产者遇到了磁盘错误,无法访问日志文件。这个错误通常与磁盘故障或磁盘空间不足有关。

4、Java客户端创建生产者,发送消息给kafka没响应。

        Properties properties = new Properties();properties.put(ProducerConfig.BOOTSTRAP_SERVERS_CONFIG,"192.168.239.128:9092");// key,value 序列化(必须):key.serializer,value.serializerproperties.put(ProducerConfig.KEY_SERIALIZER_CLASS_CONFIG, StringSerializer.class.getName());properties.put(ProducerConfig.VALUE_SERIALIZER_CLASS_CONFIG, StringSerializer.class.getName())

网络连接都能通,而且防火墙也都关了。

解决:在server.properties配置文件中配置

# The address the socket server listens on. If not configured, the host name will be equal to the value of
# java.net.InetAddress.getCanonicalHostName(), with PLAINTEXT listener name, and port 9092.
#   FORMAT:
#     listeners = listener_name://host_name:port
#   EXAMPLE:
#     listeners = PLAINTEXT://your.host.name:9092
listeners=PLAINTEXT://192.168.239.128:9092

1.png

2.png

kafka和flink结合案例

数据写入kafka,flink订阅消费

image

安装kafka单服务

1、官方下载地址:http://kafka.apache.org/downloads.html

2、解压安装包

下载完将安装包上传到centos中,然后解压

$ tar -zxvf kafka_2.12-3.0.0.tgz -C /opt/module/

3、 修改解压后的文件名称

$ mv kafka_2.12-3.0.0/ kafka

4、进入到/opt/module/kafka 目录,修改配置文件

$ cd config/$ vim server.properties
#broker 的全局唯一编号,不能重复,只能是数字。
broker.id=0#处理网络请求的线程数量
num.network.threads=3 #用来处理磁盘 IO 的线程数量
num.io.threads=8#发送套接字的缓冲区大小
socket.send.buffer.bytes=102400 #接收套接字的缓冲区大小
socket.receive.buffer.bytes=102400 #请求套接字的缓冲区大小
socket.request.max.bytes=104857600#kafka 运行日志(数据)存放的路径,路径不需要提前创建,kafka 自动帮你创建,可以配置多个磁盘路径,路径与路径之间可以用","分隔
log.dirs=/opt/module/kafka/datas#topic 在当前 broker 上的分区个数
num.partitions=1#用来恢复和清理 data 下数据的线程数量
num.recovery.threads.per.data.dir=1 # 每个 topic 创建时的副本数,默认时 1 个副本
offsets.topic.replication.factor=1 #segment 文件保留的最长时间,超时将被删除
log.retention.hours=168#每个 segment 文件的大小,默认最大 1G 
log.segment.bytes=1073741824# 检查过期数据的时间,默认 5 分钟检查一次是否数据过期
log.retention.check.interval.ms=300000#配置连接Zookeeper 集群地址(在 zk 根目录下创建/kafka,方便管理)
zookeeper.connect=hadoop102:2181,hadoop103:2181,hadoop104:2181/kafka

5、配置kafka环境变量

vim /etc/profile.d/my_env.sh
#KAFKA_HOME
export KAFKA_HOME=/opt/module/kafka 
export PATH=$PATH:$KAFKA_HOME/bin

刷新

$ source /etc/profile

6、启动kafka

./kafka/bin/kafka-server-start.sh 

创建生产者,将数据写入kafka

相关文章:

大数据-kafka学习笔记

Kafka Kafka 是一个分布式的基于发布/订阅模式的消息队列&#xff08;Message Queue&#xff09;&#xff0c;主要应用于大数据实时处理领域。 Kafka可以用作Flink应用程序的数据源。Flink可以轻松地从一个或多个Kafka主题中消费数据流。这意味着您可以使用Kafka来捕获和传输…...

详述RPA项目管理流程,RPA项目管理流程是什么?

RPA&#xff08;Robotic Process Automation&#xff0c;机器人流程自动化&#xff09;是一种通过软件机器人模拟人类在计算机上执行重复性任务的技术。RPA可以帮助企业提高工作效率、降低成本、减少错误并提高客户满意度。然而&#xff0c;为了确保RPA项目的成功实施&#xff…...

爬虫 — Js 逆向

目录 一、概念1、爬虫2、反爬虫3、加密解密4、加密5、步骤 二、常用加密方式1、加密方式2、常见加密算法3、JS 中常见的算法4、MD5 算法4.1、MD5 加密网站4.2、特点 5、DES/AES 算法6、RSA 算法7、base64 算法 三、环境配置1、node.js 环境配置2、PyCharm 环境配置 一、概念 1…...

Python 网络爬取的时候使用那种框架

尽管现代的网站多采取前后端分离的方式进行开发了&#xff0c;但是对直接 API 的调用我们通常会有 token 的限制和可以调用频率的限制。 因此&#xff0c;在一些特定的网站上&#xff0c;我们可能还是需要使用网络爬虫的方式获得已经返回的 JSON 数据结构&#xff0c;甚至是处理…...

CentOS7安装源设置

此处的安装源地址需要填写&#xff1a;&#xff08;适用于centos7&#xff09; http://mirrors.aliyun.com/centos/7/os/x86_64/...

pool = multiprocessing.Pool()报错:module object has no attribute Pool

pool multiprocessing.Pool()报错&#xff1a;module object has no attribute Pool&#xff0c;为什么&#xff1f; 我很抱歉&#xff0c;前面提供的回答是错误的。在Python的multiprocessing模块中&#xff0c;确实有一个名为Pool的类。如果你在使用multiprocessing.Pool()…...

Linux Shell 实现一键部署podman

podman 介绍 使用 Podman 管理容器、Pod 和映像。从本地环境中无缝使用容器和 Kubernetes&#xff0c;Podman 提供与 Docker 非常相似的功能&#xff0c;它不需要在你的系统上运行任何守护进程&#xff0c;并且它也可以在没有 root 权限的情况下运行。 Podman 可以管理和运行…...

Biome-BGC生态系统模型与Python融合技术

Biome-BGC是利用站点描述数据、气象数据和植被生理生态参数&#xff0c;模拟日尺度碳、水和氮通量的有效模型&#xff0c;其研究的空间尺度可以从点尺度扩展到陆地生态系统。 在Biome-BGC模型中&#xff0c;对于碳的生物量积累&#xff0c;采用光合酶促反应机理模型计算出每天…...

Matlab图像处理-区域描述

一旦一幅图像的目标区域被确定&#xff0c;我们往往用一套描述子来表示其特性。选择区域描述子的动机不单纯为了减少在区域中原始数据的数量&#xff0c;而且也应有利于区别带有不同特性的区域。因此&#xff0c;当目标区域有大小、旋转、平移等方面的变化时&#xff0c;针对这…...

openGauss学习笔记-69 openGauss 数据库管理-创建和管理普通表-更新表中数据

文章目录 openGauss学习笔记-69 openGauss 数据库管理-创建和管理普通表-更新表中数据 openGauss学习笔记-69 openGauss 数据库管理-创建和管理普通表-更新表中数据 修改已经存储在数据库中数据的行为叫做更新。用户可以更新单独一行、所有行或者指定的部分行。还可以独立更新…...

Flink RowData 与 Row 相互转化工具类

RowData与Row区别 &#xff08;0&#xff09;都代表了一条记录。都可以设置RowKind&#xff0c;和列数量Aritry。 &#xff08;1&#xff09;RowData 属于Table API&#xff0c;而Row属于Stream API &#xff08;2&#xff09;RowData 属于Table内部接口&#xff0c;对用户不友…...

企业架构LNMP学习笔记48

数据结构类型操作&#xff1a; 数据结构&#xff1a;存储数据的方式 数据类型 算法&#xff1a;取数据的方式&#xff0c;代码就把数据进行组合&#xff0c;计算、存储、取出。 排序算法&#xff1a;冒泡排序、堆排序 二分。 key&#xff1a; key的命名规则不同于一般语言…...

docker部署neo4j

拉取镜像 docker pull neo4j:3.5.35-community查看镜像 [rootlocalhost data]# docker images REPOSITORY TAG IMAGE ID CREATED SIZE neo4j 3.5.35-community 3548ff943256 13 months ago 446MB创建容器并运行 docker run -d …...

融云观察:AI Agent 是不是游戏赛道的下一个「赛点」?

本周四 融云直播间&#xff0c;点击报名~ ChatGPT 的出现&#xff0c;不仅让会话成为了未来商业的基本形态&#xff0c;也把大家谈论 AI 的语境从科技产业转向了 AI 与全产业的整合。 关注【融云全球互联网通信云】了解更多 而目前最热衷于拥抱生成式 AI 的行业中&#xff0c…...

运用谷歌浏览器的开发者工具,模拟搜索引擎蜘蛛抓取网页

第一步&#xff1a;按压键盘上的F12键打开开发这工具&#xff0c;并点击右上角三个小黑点 第二步&#xff1a;选择More tools 第三步&#xff1a;选择Network conditions 第四步&#xff1a;找到User agent一列&#xff0c;取消复选框的勾选 第五步&#xff1a;选择谷歌爬虫…...

uni-app 点击蒙版层时关闭自定义弹窗

click.stop&#xff1a;用于阻止冒泡 click.stop 标签范围内&#xff0c;点击任何区域(包括 click 点击事件)都不会关闭弹窗。标签范围外会关闭弹窗 click.stop 标签内的 click 等事件&#xff1a;如果事件内有关闭弹窗的代码可关闭弹窗 在 template 中 <view class&quo…...

【红包雨功能的】环境部署(弹性伸缩、负载均衡、Redis读写分离、云服务器部署)

文章目录 创建环境创建专用网络VPC安全组创建云服务器打包部署2. Java环境启动项目开机启动任意服务1. 制作服务文件2. 制作启动脚本3. 制作停止脚本4. 增加执行权限5. 设置开机启动 创建镜像继续创建多台云服务器负载均衡弹性伸缩redis的报警规则白名单1. LAMP 环境1. 安装Apa…...

基于Java的设计模式-策略模式

策略模式就是定义一系列的算法,把它们一个个封装起来, 并且使它们可相互替换。 基本概念 策略模式主要是解决多种算法相似的情况下&#xff0c;使用if...else所带来的复杂和难以维护。当存在系统中有多个类&#xff0c;但是区分它们的是只是它们的直接行为&#xff0c;那我们…...

小程序多种姿势更换文章

概述 简单的文章切换demo&#xff0c;通过倒计时、摇一摇、双击进行文章切换 详细 直接看效果图吧&#xff01;比较简单&#xff0c;主要是练习一下... 小程序不带双击事件&#xff0c;可以记录第一次单击事件和第二次单机事件进行双击操作。 1、摇一摇是通过调用官方的 …...

读书笔记-《ON JAVA 中文版》-摘要25[第二十二章 枚举]

文章目录 第二十二章 枚举1. 基本功能1.1 基本 enum 特性 2. 方法添加2.1 方法添加2.2 覆盖 enum 的方法 3 switch 语句中的 enum4. values 方法的神秘之处5. 实现而非继承6. 随机选择7. 使用接口组织枚举8. 使用 EnumSet 替代 Flags9. 使用 EnumMap10. 常量特定方法11. 本章小…...

DNDC模型建模方法及应用

DNDC&#xff08;Denitrification-Decomposition&#xff0c;反硝化-分解模型&#xff09;是目前国际上最为成功的模拟生物地球化学循环的模型之一&#xff0c;自开发以来&#xff0c;经过不断完善和改进&#xff0c;从模拟简单的农田生态系统发展成为可以模拟几乎所有陆地生态…...

Kafka为什么是高性能高并发高可用架构

目录 1 前言2 顺序写入3 页缓存4 零拷贝5 Broker 性能6 流数据并行7 总结 1 前言 我们都知道 Kafka 是基于磁盘进行存储的&#xff0c;但 Kafka 官方又称其具有高性能、高吞吐、低延时的特点&#xff0c;其吞吐量动辄几十上百万。小伙伴们是不是有点困惑了&#xff0c;一般认为…...

QT-day3

完成文本编辑器的保存工作 void Widget::on_savebton_clicked() {QString fileName QFileDialog::getSaveFileName(this,"保存","./","All(*.*);;Images(*.png *.xpm *.jpg);;Text files (*.txt);;XML files (*.xml)");QFile file(fileName);i…...

开发自测的测试用例设计方法

测试用例设计方法有&#xff1a;等价类划分法、边界值分析法、错误推测法、判定表法、正交实验法。 测试用例就是一个文档&#xff0c;描述输入、动作、或者时间和一个期望的结果&#xff0c;其目的是确定应用程序的某个特性是否正常的工作。 一.等价类划分法 顾名思义&#x…...

【AI视野·今日Sound 声学论文速览 第七期】Tue, 19 Sep 2023

AI视野今日CS.Sound 声学论文速览 Tue, 19 Sep 2023 Totally 1 papers &#x1f449;上期速览✈更多精彩请移步主页 Daily Sound Papers Frame-to-Utterance Convergence: A Spectra-Temporal Approach for Unified Spoofing Detection Authors Awais Khan, Khalid Mahmood Ma…...

MySQL 清空表 截断表

清空表&#xff1a;delete from users&#xff1b; 清空表只是清空表中的逻辑数据&#xff0c;但是物理数据不清除&#xff0c;如主键值、索引等不被清除&#xff0c;还是原来的值。 截断表&#xff1a;truncate table users&#xff1b; 截断表可以用于删除表中 的所有数据…...

2020-2023中国高等级自动驾驶产业发展趋势研究-中国高等级自动驾驶发展近况

1.2 中国高等级自动驾驶发展近况 通过对中国高等级自动驾驶行业的观察和分析&#xff0c;亿欧汽车认为&#xff0c;除技术解决方案提供商外&#xff0c;如今的车企、政府、资本同样在产业链中扮演重要角色。此外&#xff0c;车路协同技术的发展也为高等级自动驾驶的发展提供了更…...

Spring学习之ImportBeanDefinitionRegistrar接口

一、本文内容分类 1、接口功能 2、接口运用场景 3、使用案例 4、注意事项 二、接口功能介绍 描述&#xff1a;ImportBeanDefinitionRegistrar接口是也是spring的扩展点之一,它可以支持我们自己写的代码封装成BeanDefinition对象,注册到Spring容器中&#xff0c;功能类似于注…...

React 全栈体系(八)

第四章 React ajax 三、案例 – github 用户搜索 2. 代码实现 2.3 axios 发送请求 Search /* src/components/Search/index.jsx */ import React, { Component } from "react"; import axios from axiosexport default class Search extends Component {search …...

4.开放-封闭原则

这个原则其实是有两个特征&#xff0c;一个是说‘对于扩展是开放的(Open for extension)&#xff0c;另一个是说‘对于更改是封闭的(Closed for modification)[ASD]。...

小米手机如何做游戏视频网站/百度竞价推广思路

luxiaolai UID: 55425最后登录: 2013-02-03登录IP: 27.128.21.143退出 设置 短消息 本站淘宝店铺无图版会员列表统计排行论坛帮助网站首页 高级论坛友善官网软件下载常见问题客服中心A8来啦!淘宝店铺等级:新手上路, 帖子:22, 我的主题, 我的回复 更多黄天一笑 编辑 热门版块: …...

县门户网站建设方案/自己建个网站要多少钱

this this 是自身的一个对象&#xff0c;代表对象本身&#xff0c;可以理解为&#xff1a;指向对象本身的一个指针。 this 的用法在 java 中大体可以分为 3 种&#xff1a; 普通的直接引用 这种就不用讲了&#xff0c;this 相当于是指向当前对象本身。 形参与成员名字重名&…...

网站建设规划方案ppt/抖音自动推广引流app

/ 网站根路径 ./ 当前路径 ../ 上一级路径 ../../ 上两级路径 例如&#xff1a;本地静态网站 index页面地址 127.0.0.1/bootstrap_test/index.html在这里页面里面引入css和js路径应该怎么写呢? 1、 <link href"css/bootstrap.min.css" rel"style…...

网站系统建设管理制度/网站搭建步骤

1. JS为什么是单线程的&#xff1f; JS最初被设计用在浏览器中&#xff0c;那么想象一下&#xff0c;如果浏览器中的JS是多线程的。 那么现在有2个进程&#xff0c;process1 process2&#xff0c;由于是多进程的JS&#xff0c;所以他们对同一个dom&#xff0c;同时进行操作。 p…...

网站上做旅游卖家要学什么/引流软件有哪些

很久之前就看过attention的相关知识&#xff0c;只是没有动手实践&#xff0c;所以很多小细节没有考虑到&#xff0e; &#xff08;&#xff11;&#xff09;sequence-to-sequence model中&#xff0c;在解码的第一步S0_00​是如何计算的就晕了好一阵&#xff0c;下面的图给出了…...

网站开发前端和后端的区别/北京seo排名服务

这篇文章主要介绍了简单了解python数组的基本操作,文中通过示例代码介绍的非常详细&#xff0c;对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 一&#xff0c;创建列表 创建一个列表&#xff0c;只要把逗号分隔的不同的数据项使用方括号括起来&#xff1a;…...