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

flink连接kafka报:org.apache.kafka.common.errors.TimeoutException

测试flink1.12.7 连接kafka:

package org.test.flink;import org.apache.flink.api.common.serialization.SimpleStringSchema;
import org.apache.flink.streaming.api.datastream.DataStream;
import org.apache.flink.streaming.api.environment.StreamExecutionEnvironment;
import org.apache.flink.streaming.connectors.kafka.FlinkKafkaConsumer;import java.util.Properties;public class FlinkKafka {public static void main(String[] args) throws Exception {// 1. 执行环境-envStreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment();env.setParallelism(1);// 2. 数据源-source// 2-1. 创建消费Kafka数据时属性Properties props = new Properties();props.setProperty("bootstrap.servers", "11.0.24.216:9092");props.setProperty("group.id", "test1111");System.out.println("--2-2. 构建FlinkKafkaConsumer实例对象--");// 2-2. 构建FlinkKafkaConsumer实例对象FlinkKafkaConsumer<String> kafkaConsumer = new FlinkKafkaConsumer<String>("testtopic", //new SimpleStringSchema(), //props);System.out.println("--2-3. 添加Source--");// 2-3. 添加SourceDataStream<String> kafkaStream = env.addSource(kafkaConsumer);// 3. 数据转换-transformation// 4. 数据接收器-sinkSystem.out.println("--kafkaStream.print();--");kafkaStream.print();// 5. 触发执行-executeenv.execute("ConnectorFlinkKafkaConsumerDemo") ;}
}

执行报错如下:

Exception in thread "main" org.apache.flink.runtime.client.JobExecutionException: Job execution failed.at org.apache.flink.runtime.jobmaster.JobResult.toJobExecutionResult(JobResult.java:144)at org.apache.flink.runtime.minicluster.MiniClusterJobClient.lambda$getJobExecutionResult$2(MiniClusterJobClient.java:117)at java.util.concurrent.CompletableFuture.uniApply(CompletableFuture.java:616)at java.util.concurrent.CompletableFuture$UniApply.tryFire(CompletableFuture.java:591)at java.util.concurrent.CompletableFuture.postComplete(CompletableFuture.java:488)at java.util.concurrent.CompletableFuture.complete(CompletableFuture.java:1975)at org.apache.flink.runtime.rpc.akka.AkkaInvocationHandler.lambda$invokeRpc$0(AkkaInvocationHandler.java:237)at java.util.concurrent.CompletableFuture.uniWhenComplete(CompletableFuture.java:774)at java.util.concurrent.CompletableFuture$UniWhenComplete.tryFire(CompletableFuture.java:750)at java.util.concurrent.CompletableFuture.postComplete(CompletableFuture.java:488)at java.util.concurrent.CompletableFuture.complete(CompletableFuture.java:1975)at org.apache.flink.runtime.concurrent.FutureUtils$1.onComplete(FutureUtils.java:1061)at akka.dispatch.OnComplete.internal(Future.scala:264)at akka.dispatch.OnComplete.internal(Future.scala:261)at akka.dispatch.japi$CallbackBridge.apply(Future.scala:191)at akka.dispatch.japi$CallbackBridge.apply(Future.scala:188)at scala.concurrent.impl.CallbackRunnable.run(Promise.scala:64)at org.apache.flink.runtime.concurrent.Executors$DirectExecutionContext.execute(Executors.java:73)at scala.concurrent.impl.CallbackRunnable.executeWithValue(Promise.scala:72)at scala.concurrent.impl.Promise$DefaultPromise.$anonfun$tryComplete$1(Promise.scala:288)at scala.concurrent.impl.Promise$DefaultPromise.$anonfun$tryComplete$1$adapted(Promise.scala:288)at scala.concurrent.impl.Promise$DefaultPromise.tryComplete(Promise.scala:288)at akka.pattern.PromiseActorRef.$bang(AskSupport.scala:573)at akka.pattern.PipeToSupport$PipeableFuture$$anonfun$pipeTo$1.applyOrElse(PipeToSupport.scala:22)at akka.pattern.PipeToSupport$PipeableFuture$$anonfun$pipeTo$1.applyOrElse(PipeToSupport.scala:21)at scala.concurrent.Future.$anonfun$andThen$1(Future.scala:536)at scala.concurrent.impl.Promise.liftedTree1$1(Promise.scala:33)at scala.concurrent.impl.Promise.$anonfun$transform$1(Promise.scala:33)at scala.concurrent.impl.CallbackRunnable.run(Promise.scala:64)at akka.dispatch.BatchingExecutor$AbstractBatch.processBatch(BatchingExecutor.scala:55)at akka.dispatch.BatchingExecutor$BlockableBatch.$anonfun$run$1(BatchingExecutor.scala:91)at scala.runtime.java8.JFunction0$mcV$sp.apply(JFunction0$mcV$sp.java:23)at scala.concurrent.BlockContext$.withBlockContext(BlockContext.scala:85)at akka.dispatch.BatchingExecutor$BlockableBatch.run(BatchingExecutor.scala:91)at akka.dispatch.TaskInvocation.run(AbstractDispatcher.scala:40)at akka.dispatch.ForkJoinExecutorConfigurator$AkkaForkJoinTask.exec(ForkJoinExecutorConfigurator.scala:44)at akka.dispatch.forkjoin.ForkJoinTask.doExec(ForkJoinTask.java:260)at akka.dispatch.forkjoin.ForkJoinPool$WorkQueue.runTask(ForkJoinPool.java:1339)at akka.dispatch.forkjoin.ForkJoinPool.runWorker(ForkJoinPool.java:1979)at akka.dispatch.forkjoin.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:107)
Caused by: org.apache.flink.runtime.JobException: Recovery is suppressed by NoRestartBackoffTimeStrategyat org.apache.flink.runtime.executiongraph.failover.flip1.ExecutionFailureHandler.handleFailure(ExecutionFailureHandler.java:118)at org.apache.flink.runtime.executiongraph.failover.flip1.ExecutionFailureHandler.getFailureHandlingResult(ExecutionFailureHandler.java:80)at org.apache.flink.runtime.scheduler.DefaultScheduler.handleTaskFailure(DefaultScheduler.java:233)at org.apache.flink.runtime.scheduler.DefaultScheduler.maybeHandleTaskFailure(DefaultScheduler.java:224)at org.apache.flink.runtime.scheduler.DefaultScheduler.updateTaskExecutionStateInternal(DefaultScheduler.java:215)at org.apache.flink.runtime.scheduler.SchedulerBase.updateTaskExecutionState(SchedulerBase.java:666)at org.apache.flink.runtime.scheduler.SchedulerNG.updateTaskExecutionState(SchedulerNG.java:89)at org.apache.flink.runtime.jobmaster.JobMaster.updateTaskExecutionState(JobMaster.java:446)at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)at java.lang.reflect.Method.invoke(Method.java:498)at org.apache.flink.runtime.rpc.akka.AkkaRpcActor.handleRpcInvocation(AkkaRpcActor.java:305)at org.apache.flink.runtime.rpc.akka.AkkaRpcActor.handleRpcMessage(AkkaRpcActor.java:212)at org.apache.flink.runtime.rpc.akka.FencedAkkaRpcActor.handleRpcMessage(FencedAkkaRpcActor.java:77)at org.apache.flink.runtime.rpc.akka.AkkaRpcActor.handleMessage(AkkaRpcActor.java:158)at akka.japi.pf.UnitCaseStatement.apply(CaseStatements.scala:26)at akka.japi.pf.UnitCaseStatement.apply(CaseStatements.scala:21)at scala.PartialFunction.applyOrElse(PartialFunction.scala:127)at scala.PartialFunction.applyOrElse$(PartialFunction.scala:126)at akka.japi.pf.UnitCaseStatement.applyOrElse(CaseStatements.scala:21)at scala.PartialFunction$OrElse.applyOrElse(PartialFunction.scala:175)at scala.PartialFunction$OrElse.applyOrElse(PartialFunction.scala:176)at scala.PartialFunction$OrElse.applyOrElse(PartialFunction.scala:176)at akka.actor.Actor.aroundReceive(Actor.scala:517)at akka.actor.Actor.aroundReceive$(Actor.scala:515)at akka.actor.AbstractActor.aroundReceive(AbstractActor.scala:225)at akka.actor.ActorCell.receiveMessage(ActorCell.scala:592)at akka.actor.ActorCell.invoke(ActorCell.scala:561)at akka.dispatch.Mailbox.processMailbox(Mailbox.scala:258)at akka.dispatch.Mailbox.run(Mailbox.scala:225)at akka.dispatch.Mailbox.exec(Mailbox.scala:235)... 4 more
Caused by: org.apache.kafka.common.errors.TimeoutException: Timeout of 60000ms expired before the position for partition testtopic-0 could be determinedProcess finished with exit code 1

经排除,找到文章:flink连接kafka报:org.apache.kafka.common.errors.TimeoutException: Timeout expired while fetching topic_未来的资深Java架构师的博客-CSDN博客

因为工程中log4j默认等级是error,所以,先配置resource/log4j.properties,日志等级改成info:

log4j.rootLogger = info,console### 配置输出到控制台 ###
log4j.appender.console = org.apache.log4j.ConsoleAppender
log4j.appender.console.Target = System.out
log4j.appender.console.layout = org.apache.log4j.PatternLayout
#log4j.appender.console.layout.ConversionPattern =  %d{ABSOLUTE} %5p %c{ 1 }:%L - %m%n

再运行,发现如下错误:

java.net.UnknownHostException: kafkaat java.net.InetAddress.getAllByName0(InetAddress.java:1281)at java.net.InetAddress.getAllByName(InetAddress.java:1193)at java.net.InetAddress.getAllByName(InetAddress.java:1127)at org.apache.kafka.clients.ClientUtils.resolve(ClientUtils.java:104)at org.apache.kafka.clients.ClusterConnectionStates$NodeConnectionState.currentAddress(ClusterConnectionStates.java:403)at org.apache.kafka.clients.ClusterConnectionStates$NodeConnectionState.access$200(ClusterConnectionStates.java:363)at org.apache.kafka.clients.ClusterConnectionStates.currentAddress(ClusterConnectionStates.java:151)at org.apache.kafka.clients.NetworkClient.initiateConnect(NetworkClient.java:949)at org.apache.kafka.clients.NetworkClient.access$500(NetworkClient.java:71)at org.apache.kafka.clients.NetworkClient$DefaultMetadataUpdater.maybeUpdate(NetworkClient.java:1122)at org.apache.kafka.clients.NetworkClient$DefaultMetadataUpdater.maybeUpdate(NetworkClient.java:1010)at org.apache.kafka.clients.NetworkClient.poll(NetworkClient.java:545)at org.apache.kafka.clients.consumer.internals.ConsumerNetworkClient.poll(ConsumerNetworkClient.java:262)at org.apache.kafka.clients.consumer.internals.ConsumerNetworkClient.poll(ConsumerNetworkClient.java:233)at org.apache.kafka.clients.consumer.internals.ConsumerNetworkClient.poll(ConsumerNetworkClient.java:224)at org.apache.kafka.clients.consumer.internals.ConsumerNetworkClient.awaitMetadataUpdate(ConsumerNetworkClient.java:161)at org.apache.kafka.clients.consumer.internals.AbstractCoordinator.ensureCoordinatorReady(AbstractCoordinator.java:240)at org.apache.kafka.clients.consumer.internals.ConsumerCoordinator.fetchCommittedOffsets(ConsumerCoordinator.java:788)at org.apache.kafka.clients.consumer.internals.ConsumerCoordinator.refreshCommittedOffsetsIfNeeded(ConsumerCoordinator.java:750)at org.apache.kafka.clients.consumer.KafkaConsumer.updateFetchPositions(KafkaConsumer.java:2338)at org.apache.kafka.clients.consumer.KafkaConsumer.position(KafkaConsumer.java:1725)at org.apache.kafka.clients.consumer.KafkaConsumer.position(KafkaConsumer.java:1684)at org.apache.flink.streaming.connectors.kafka.internals.KafkaConsumerThread.reassignPartitions(KafkaConsumerThread.java:446)at org.apache.flink.streaming.connectors.kafka.internals.KafkaConsumerThread.run(KafkaConsumerThread.java:243)

因为服务器的kafka我是装的docker版,用于测试:

.env配置如下:

KAFKA_LOG_RETENTION_HOURS=16
KAFKA_BROKER_ID=0
KAFKA_ZOOKEEPER_CONNECT=zk-host:2181
# 这个参数不能用0.0.0.0,不然会报错,需要设置成实际访问的ip
KAFKA_ADVERTISED_LISTENERS=PLAINTEXT://kafka:9092
KAFKA_LISTENERS=PLAINTEXT://0.0.0.0:9092

查了下KAFKA_ADVERTISED_LISTENERS这个参数的解释:

深入理解KAFKA_ADVERTISED_LISTENERS_kafka_cfg_listeners_jason.zeng@1502207的博客-CSDN博客

KAFKA_ADVERTISED_LISTENERS:负责发布外网地址,这个地址会发布到zookeeper中。

所以最终会去访问kafka。

目前有两种方案:

1、在本地的hosts中配置域名指向;

C:\Windows\System32\drivers\etc\HOSTS
11.0.24.216 kafka

2、修改kafka安装的配置,把kafka改成具体的ip

我通过1成功解决。

具体代码参考(gitee上):flink-java-1.12.7: flink1.12.7的java demo,包括flink wordcount示例,如何连接kafka

参考:flink连接kafka报:org.apache.kafka.common.errors.TimeoutException: Timeout expired while fetching topic_未来的资深Java架构师的博客-CSDN博客

docker安装kafka:Docker 安装Kafka_在奋斗的大道的博客-CSDN博客

相关文章:

flink连接kafka报:org.apache.kafka.common.errors.TimeoutException

测试flink1.12.7 连接kafka&#xff1a; package org.test.flink;import org.apache.flink.api.common.serialization.SimpleStringSchema; import org.apache.flink.streaming.api.datastream.DataStream; import org.apache.flink.streaming.api.environment.StreamExecutio…...

sql order by 排序 null值放最后,怎么写

在 SQL 中&#xff0c;可以使用 ORDER BY 子句对结果进行排序。如果要将 NULL 值放在最后&#xff0c;可以在排序列中使用 CASE 表达式来处理。 下面是一个示例查询&#xff0c;将 NULL 值放在最后进行排序&#xff1a; SELECT column1, column2 FROM your_table ORDER BY CAS…...

HDMI字符显示实验

FPGA教程学习 第十五章 HDMI字符显示实验 文章目录 FPGA教程学习前言实验原理程序设计像素点坐标模块字符叠加模块 实验结果知识点总结 前言 在HDMI输出彩条的基础上输出osd叠加信息。 实验原理 实验通过字符转换工具将字符转换为 16 进制 coe 文件存放到单端口的 ROM IP 核…...

Spring Cloud 框架搭建

Spring Cloud 框架搭建之一基础框架 创建父项目创建子项目 创建父项目 第一步&#xff1a;新建项目&#xff0c;填写基础信息 第二步&#xff1a;这里不需要其他组件直接点next即可。 第三步&#xff1a;pom文件添加下述代码&#xff0c;将父项目设置为pom文件形式打包&#…...

20个非常有用的单行Python代码片段

1. 写在前面 继上篇&#xff0c;继续在本文分享 20 个 Python 单行代码&#xff0c;可以在 30 秒或更短时间内轻松学会。这些单行代码不仅可以提高效率&#xff0c;同时使代码看起来更整洁、更易读。&#xff1a;&#xff09; 个人博客&#xff1a; https://jianpengzhang.git…...

【LangChain系列 9】Prompt模版——MessagePromptTemplate

原文地址&#xff1a;【LangChain系列 9】Prompt模版——MessagePromptTemplate 本文速读&#xff1a; MessagePromptTemplate MessagesPlaceholder 在对话模型(chat model) 中&#xff0c; prompt主要是封装在Message中&#xff0c;LangChain提供了一些MessagePromptTemplat…...

ROS2的学习路径

学习ROS2的建议学习路径&#xff1a; 理解基础知识&#xff1a; 熟悉机器人操作系统&#xff08;ROS&#xff09;的概念及其架构。了解ROS2相对于ROS1的优势以及其提供的关键功能。 安装和配置&#xff1a; 在你选择的操作系统上安装ROS2&#xff08;如Ubuntu、Windows、macOS…...

Maintaining leader role through timed lease mechanism

Continuous understanding of distributed systems design On the one hand 基于定时的租约机制来保持leader角色 基于定时的租约机制来保持leader角色的设计思想是一种在分布式系统中确保高可用性和系统一致性的解决方法。 在分布式系统中&#xff0c;通常会有一个角色被选举…...

Mysql InnoDB引擎 的hash索引

Mysql InnoDB引擎不支持hash索引&#xff0c;但是在内存结构中有一个自适应hash索引&#xff0c;来提高查询性能 当设置hash索引时会自动转换成btree索引 查一下mysql官方文档&#xff1a;https://dev.mysql.com/doc/refman/5.7/en/create-index.html innodb_adaptive_hash_i…...

23年PMP考试如何备考?

接下来我要分享的备考建议分为三个部分&#xff0c;考试相关、备考期间注意和刷题建议。 1、PMP考试相关 PMP考试时间一定不能忘记&#xff0c;要密切关注&#xff0c;或许会出现延期的情况。考试教材现在是第七版教材&#xff0c;建议买一本或者用pdf电子版打印出来&#xf…...

mysql数据库增量备份方案、备份计划(InsCode AI 创作助手)

一、备份计划 以下是MySQL数据库增量备份的一般计划&#xff1a; 创建完整备份&#xff1a;在自动备份计划开始前&#xff0c;先创建一次完整备份。这个备份将包含所有数据和表结构。保存增量备份&#xff1a;在每次备份计划完成后&#xff0c;保存增量备份。这个备份将包含从…...

【Flink】FlinkCDC获取mysql数据时间类型差8小时时区解决方案

1、背景: 在我们使用FlinkCDC采集mysql数据的时候,日期类型是我们很常见的类型,但是FlinkCDC读取出来会和数据库的日期时间不一致,情况如下 FlinkCDC获取的数据中create_time字段1694597238000转换为时间戳2023-09-13 17:27:18 而数据库中原始数据如下,并没有到下午5点…...

Javas | DecimalFormat类、BigDecimal类、Random类

目录&#xff1a; 1.DecimalFormat类2.BigDecimal类3.Random类4.需求&#xff1a;编写程序&#xff0c;生成5个不重复的随机数 1.DecimalFormat类 DecimalFormat 是 NumberFormat 的一个具体子类&#xff0c;用于格式十进制数字。 /*** 关于数字的格式化*/ public class Decima…...

机器学习 实战系列 总目录

1、机器学习实战-系列教程1&#xff1a;线性回归入门教程&#xff08;项目实战、原理解读、源码解读&#xff09; 机器学习实战-系列教程1&#xff1a;线性回归入门教程&#xff08;项目实战、原理解读、源码解读&#xff09; 2、机器学习实战-系列教程2&#xff1a;手撕线性回…...

机器学习——贝叶斯(三种分布)/鸢尾花分类分界图/文本分类应用

0、前言&#xff1a; 机器学习中的贝叶斯的理论基础是数学当中的贝叶斯公式。这篇博客强调使用方法&#xff0c;至于理论未作深究。机器学习中三种类型的贝叶斯公式&#xff1a;高斯分布&#xff08;多分类&#xff09;、多项式分布&#xff08;文本分类&#xff09;、伯努利分…...

SOLIDWORKS Composer位置关键帧的使用

SOLIDWORKS Composer是专业的SOLIDWORKS及3D文件处理的动画制作软件&#xff0c;作为SOLIDWORKS 产品线下的一个明星存在。 SOLIDWORKS Composer几乎可以处理任何SOLIDWORKS的模型文件并将之转化成可以动作的机械动画&#xff0c;可以引用在企业的网站、产品说明书以及工作指导…...

PostgreSQL 流复制搭建与维护

文章目录 前言1. 配置环境1.1 环境介绍1.2 主库白名单1.3 主库参数配置 2. 流复制搭建2.1 备份恢复2.2 创建复制用户2.3 参数修改2.4 启动并检查2.5 同步流复制2.6 同步复制级别 3. 流复制监控3.1 角色判断3.2 主库查看流复制3.3 延迟监控3.4 备库查询复制信息 前言 PostgreSQ…...

【Redis】关于过期数据清除的一些策略

这里要讨论的为过期的数据是如何被清除的&#xff0c;也就是网上常常讨论的过期清除策略。 需要注意的是&#xff0c;redis除了会对过期的数据进行淘汰&#xff0c;也可以通过对内存大小进行限制&#xff0c;并对超出内存限制后进行数据淘汰。此时淘汰的数据未必是过期的&…...

动态SQL

Mybatis框架的动态SQL技术是一种根据特定条件动态拼装SQL语句的功能&#xff0c;它存在的意义是为了解决拼接SQL语句字符串时的痛点问题。 1、if if标签可通过test属性的表达式进行判断&#xff0c;若表达式的结果为true&#xff0c;则标签中的内容会执行&#xff1b;反之标签…...

uniapp:OCR识别身份证上传原图失败,问题解决

1、上传普通图片成功 2、上传>4M | >5M图片失败检查&#xff1a;1、uni.uploadFile自身没有文件大小限制。然而&#xff0c;这仍然取决于你的应用程序所在的平台和存储空间容量。 2、上传照片后不在fail&#xff0c;在sucess 提交照片-3 {"data": "<h…...

多模态2025:技术路线“神仙打架”,视频生成冲上云霄

文&#xff5c;魏琳华 编&#xff5c;王一粟 一场大会&#xff0c;聚集了中国多模态大模型的“半壁江山”。 智源大会2025为期两天的论坛中&#xff0c;汇集了学界、创业公司和大厂等三方的热门选手&#xff0c;关于多模态的集中讨论达到了前所未有的热度。其中&#xff0c;…...

VB.net复制Ntag213卡写入UID

本示例使用的发卡器&#xff1a;https://item.taobao.com/item.htm?ftt&id615391857885 一、读取旧Ntag卡的UID和数据 Private Sub Button15_Click(sender As Object, e As EventArgs) Handles Button15.Click轻松读卡技术支持:网站:Dim i, j As IntegerDim cardidhex, …...

逻辑回归:给不确定性划界的分类大师

想象你是一名医生。面对患者的检查报告&#xff08;肿瘤大小、血液指标&#xff09;&#xff0c;你需要做出一个**决定性判断**&#xff1a;恶性还是良性&#xff1f;这种“非黑即白”的抉择&#xff0c;正是**逻辑回归&#xff08;Logistic Regression&#xff09;** 的战场&a…...

UE5 学习系列(三)创建和移动物体

这篇博客是该系列的第三篇&#xff0c;是在之前两篇博客的基础上展开&#xff0c;主要介绍如何在操作界面中创建和拖动物体&#xff0c;这篇博客跟随的视频链接如下&#xff1a; B 站视频&#xff1a;s03-创建和移动物体 如果你不打算开之前的博客并且对UE5 比较熟的话按照以…...

关于iview组件中使用 table , 绑定序号分页后序号从1开始的解决方案

问题描述&#xff1a;iview使用table 中type: "index",分页之后 &#xff0c;索引还是从1开始&#xff0c;试过绑定后台返回数据的id, 这种方法可行&#xff0c;就是后台返回数据的每个页面id都不完全是按照从1开始的升序&#xff0c;因此百度了下&#xff0c;找到了…...

Cilium动手实验室: 精通之旅---20.Isovalent Enterprise for Cilium: Zero Trust Visibility

Cilium动手实验室: 精通之旅---20.Isovalent Enterprise for Cilium: Zero Trust Visibility 1. 实验室环境1.1 实验室环境1.2 小测试 2. The Endor System2.1 部署应用2.2 检查现有策略 3. Cilium 策略实体3.1 创建 allow-all 网络策略3.2 在 Hubble CLI 中验证网络策略源3.3 …...

系统设计 --- MongoDB亿级数据查询优化策略

系统设计 --- MongoDB亿级数据查询分表策略 背景Solution --- 分表 背景 使用audit log实现Audi Trail功能 Audit Trail范围: 六个月数据量: 每秒5-7条audi log&#xff0c;共计7千万 – 1亿条数据需要实现全文检索按照时间倒序因为license问题&#xff0c;不能使用ELK只能使用…...

Python爬虫(二):爬虫完整流程

爬虫完整流程详解&#xff08;7大核心步骤实战技巧&#xff09; 一、爬虫完整工作流程 以下是爬虫开发的完整流程&#xff0c;我将结合具体技术点和实战经验展开说明&#xff1a; 1. 目标分析与前期准备 网站技术分析&#xff1a; 使用浏览器开发者工具&#xff08;F12&…...

【AI学习】三、AI算法中的向量

在人工智能&#xff08;AI&#xff09;算法中&#xff0c;向量&#xff08;Vector&#xff09;是一种将现实世界中的数据&#xff08;如图像、文本、音频等&#xff09;转化为计算机可处理的数值型特征表示的工具。它是连接人类认知&#xff08;如语义、视觉特征&#xff09;与…...

Rust 异步编程

Rust 异步编程 引言 Rust 是一种系统编程语言,以其高性能、安全性以及零成本抽象而著称。在多核处理器成为主流的今天,异步编程成为了一种提高应用性能、优化资源利用的有效手段。本文将深入探讨 Rust 异步编程的核心概念、常用库以及最佳实践。 异步编程基础 什么是异步…...