Kafka--高吞吐量消息中间件

news2024/11/10 11:25:11

文章目录

  • Kafka特点和优势
    • Kafka特点
    • Kafka优势
    • Kafka角色
    • 分区和副本的优势
    • Kafka写入流程
  • Kafka部署
    • 单机
    • 集群部署
      • 1.环境准备ZooKeeper
      • 2.配置文件说明
      • 3.各节点部署Kafka
      • 4.启动服务
      • 5.确保服务启动
  • Kafka读写数据
    • 创建Topic
    • 获取Topic
    • 验证Topic详情
    • 生成Topic
    • 消费Topic
    • 删除 Topic

Kafka特点和优势

官方网站:https://kafka.apache.org/

在这里插入图片描述

Kafka特点

Kafka特点
  1.分布式: 多机实现,不允许单机
  2.分区: 一个消息可以拆分出多个,分别存储在多个位置·
  3.多副本: 防止信息丢失,可以多来几个备份
  4.多订阅者: 可以有很多应用连接kafka
  5.Zookeeper: 早期版本的Kafka依赖于zookeeper,2021年4月19日Kafka 2.8.0正式发布,
    此版本包括了很多重要改动,最主要的是kafka通过自我管理的仲裁来替代ZooKeeper,即Kafka将不再需要ZooKeeper!

Kafka优势

1.Kafka通过O(1)的磁盘数据结构提供消息的持久化,这种结构对于即使数以TB级别以上的消息存储也能够保持长时间的稳定性能·

o(1)就是最低的时空复杂度,也就是耗时/耗空间与输入数据大小无关,无论输入数据增大多少倍,耗时/耗空间都不变,
哈希算法就是典型的o(1)时间复杂度,无论数据规模多大,都可以在一次计算后找到目标。

2.高吞吐量: 即使是非常普通的硬件,Kafka也可以支持每秒数百万的消息。支持通过Kafka服务器分区消息。

3.分布式: Kafka基于分布式集群实现高可用的容错机制,可以实现自动的故障转移。

4.顺序保证:︰在大多数使用场景下,数据处理的顺序都很重要。大部分消息队列本来就是排序的,并且能保证数据会按照特定的顺序来处理。Kafka保证一个Partiton内的消息的有序性(分区间数据是无序的,如果对数据的顺序有要求,应将在创建主题时将分区数partitions设置为1)

5.支持Hadoop并行数据加载。

6.通常用于大数据场合,传递单条消息比较大,而Rabbitmq消息主要是传输业务的指令数据,单条数据较小。

Kafka角色

在这里插入图片描述

Producer

 Producer:即生产者,消息的产生者,是消息的入口。负责发布消息到Kafka broker。

Consumer

 Consumer: 消费者,用于消费消息,即处理消息。

Broker:

Broker是kafka实例,
  每个服务器上可以有一个或多个kafka的实例,假设每个broker对应一台服务器。
  每个kafka集群内的broker都有一个不重复的编号,如: broker-O、broker-1等…...

Topic

Topic:消息的主题,可以理解为消息的分类,一个Topic相当于数据库中的一张表一条消息相当于关系数据库的一条记录,
  一个Topic或者相当于Redis中列表类型的一个Key,一条消息即为列表中的一个元素。kafka的数据就保存在topic。
  在每个broker上都可以创建多个topic。物理上不同topic的消息分开存储在不同的文件夹,
  逻辑上一个topic的消息虽然保存于一个或多个broker上,但用户只需指定消息的topic即可生产或消费数据而不必关心数据存于何处,
  topic在逻辑上对record(记录、日志)进行分组保存,消费者需要订阅相应的topic才能消费topic中的消息。

Consumer group

Consumer group:
  每个consumer属于一个特定的consumer group(可为每个consumer指定group name,若不指定group name则属于默认的group),
  同一topic的一条消息只能被同一个consumer group内的一个consumer消费,
  类似于一对一的单播机制,但多个consumer group可同时消费这一消息,类似于一对多的多播机制。

Partition

Partition:
  是物理上的概念,每个topic分割为一个或多个partition,即一个topic切分为多份.
  创建topic时可指定partition数量,partition的表现形式就是一个一个的文件夹.
  该文件夹下存储该partition的数据和索引文件,分区的作用还可以实现负载均衡,提高kafka的吞吐量。
  同一个topic在不同的分区的数据是不重复的,一般Partition数不要超过节点数,
  注意同一个partition数据是有顺序的,但不同的partition则是无序的。

Replication

Replication:同样数据的副本,包括leader和follower的副本数
  基于数据安全,建议至少2个是Kafka的高可靠性的保障,
  和ES的副本有所不同,Kafka中的副本数包括主分片数,而ES中的副本数不包括主分片数。
  为了实现数据的高可用,比如将分区0的数据分散到不同的kafka节点,
  每一个分区都有一个broker作为Leader和一个broker作为Follower,类似于ES中的主分片和副本分片,
  
  假设分区为3,即分三个分区0-2,副本为3,即每个分区都有一个leader,再加两个follower,
  分区0的leader为服务器A,则服务器B和服务器C为A的fllower,
  而分区1的leader为服务器B,则服务器A和C为服务器B的follower,
  而分区2的leader为C,则服务器A和B为C的follower。

分区和副本的优势

  1.实现存储空间的横向扩容,即将多个kafka服务器的空间组合利用
  2.提升性能,多服务器并行读写
  3.实现高可用,每个分区都有一个主分区即leader分布在不同的kafka服务器,并且有对应follower分布在和leader不同的服务器

在这里插入图片描述

Kafka写入流程

在这里插入图片描述

Kafka部署

官方部署文档:https://kafka.apache.org/quickstart

单机

$ apt update && apt -y install openjdk-8-jdk
$ tar -xzf kafka_2.13-3.4.0.tgz
$ cd kafka_2.13-3.4.0
# Start the zooKeeper servi ce
$ bin/zookeeper-server-start.sh config/zookeeper.properties
# Start the Kafka broker service
$ bin/kafka-server-start.sh config/server.properties

集群部署

当前版本Kafka依赖Zookeeper服务,但以后将不再依赖

1.环境准备ZooKeeper

安装kafka之前,确保的zookeeper集群节点的启动。

注意:生产中zookeeper和kafka一般是分开独立部署的, kafka安装前需要安装java环境。

2.配置文件说明

Kafka节点配置,配置文件说明
./ conf/server.propertiest

#配置文件 ./conf/server.properties内容说明

################################## Server Basics ##################################
#broker的id,值为整数,且必须唯一,在一个集群中不能重复
broker.id=1

################################## Socket ServerSettings ###################################
#kafka监听端口,默认9092
listeners=PLAINTEXT://10.0.0.101:9092

#处理网络请求的线程数量,默认为3个
num.network.threads=3

#执行磁盘IO操作的线程数量,默认为8个
num.io.threads=8

#socket服务发送数据的缓冲区大小,默认100KB
socket.send.buffer.bytes=102400

#socket服务接受数据的缓冲区大小,默认100KB
socket.receive.buffer.bytes=102400

#socket服务所能接受的一个请求的最大大小,默认为100M
socket.request.max.bytes=104857600

################################## Log Basics##################################
#kafka存储消息数据的目录
log.dirs= ../data

#每个topic默认的partition
num.partitions=1

#设置副本数量为3,当Leader的Replication故障,会进行故障自动转移。
default.replication.factor=3

#在启动时恢复数据和关闭时刷新数据时每个数据目录的线程数量
num.recovery.threads.per.data.dir=1

################################## Log FlushPolicy #################################
#消息刷新到磁盘中的消息条数阙值
log.flush.interval.messages=10000

#消息刷新到磁盘中的最大时间间隔,1s
log.flush.interval.ms=1000

################################## Log RetentionPolicy ##################################
#日志保留小时数,超时会自动删除,默认为7天
log.retention.hours=168

#日志保留大小,超出大小会自动删除,默认为1G
log.retention.bytes=1073741824

#日志分片策略,单个日志文件的大小最大为1G,超出后则创建一个新的日志文件
log.segment.bytes=1073741824

#每隔多长时间检测数据是否达到删除条件,300s
log.retention.check.interval.ms=300000

################################## zookeeper##################################
#zookeeper连接信息,如果是zookeeper集群,则以逗号隔开
zookeeper.connect=10.0.0.101:2181,10.0.0.102:2181,10.0.0.103:2181

#连接zookeeper的超时时间,6s
zookeeper.connection.timeout.ms=6000

#是否允许删除topic,默认为false,topic只会标记为marked for deletion
delete.topic.enable=true

3.各节点部署Kafka

#在所有节点上执行安装java
[root@node1 ~]#apt install openjdk-8-jdk -y

#在所有节点上执行下载,官方下载
[root@node1 ~]#wget https://downloads.apache.org/kafka/3.3.1/kafka_2.13-3.3.1.tgz
[root@node1 ~]#wget https://archive.apache.org/dist/kafka/2.7.0/kafka_2.13-2.7.0.tgz

#解压缩
[root@node1 ~]#tar xf kafka_2.13-2.7.0.tgz -C /usr/local/
[root@node1 ~]#ln -s /usr/local/kafka_2.13-2.7.0/ /usr/local/kafka

#配置PATH变量
[root@node1 ~]#echo 'PATH=/usr/local/kafka/bin:SPATH' >/etc/profile.d/kafka.sh
[root@node1 ~]#. /etc/profile.d/kafka.sh

#修改配置文件
[root@node1 ~]#vim /usr/loca1/kafka/config/server.properties
broker.id=1   #每个broker在集群中每个节点的正整数唯一标识,此值保存在1og.dirs下的meta.properties文件
listeners=PLAINTEXT://10.0.0.101:9092#指定当前主机的IP做为监听地址,注意:不支持0.0.0.0
log.dirs=/usr/loca1/kafka/data #kakfa用于保存数据的目录,所有的消息都会存储在该目录当中
num.partitions=1 #设置创建新的topic时默认分区数量,建议和kafka的节点数量一致
default.replication.factor=3 #指定默认的副本数为3,可以实现故障的自动转移
log.retention.hours=168#设置kafka中消息保留时间,默认为168小时即7天
zookeeper.connect=10.0.0.101:2181,10.0.0.102:2181,10.0.0.103:2181#指定连接的zk的地址,zk中存储了broker的元数据信息
zookeeper.connection.timeout.ms=6000 #设置连接zookeeper的超时时间,单位为ms ,默认6秒钟

#准备数据目录
[root@node1 ~]#mkdir /usr/local/kafka/data
[root@node1 ~]#scp /usr/local/kafka/config/server.properties 10.0.0.102:/usr/1ocal/kafka/config
[root@node1 ~]#scp /usr/local/kafka/config/server.properties 10.0.0.103:/usr/local/kafka/config

#修改第2个节点配置
[root@node2~]#vim /usr/local/kafka/config/server.properties
broker.id=2    每个broker在集群中的唯一标识,正整数。
listeners=PLAINTEXT://10.0.0.102:9092   指定当前主机的IP做为监听地址,注意:不支持0.0.0.0

#修改第2个节点配置
[root@node3~]#vim /usr/local/kafka/config/server.properties
broker.id=3    每个broker在集群中的唯一标识,正整数。
listeners=PLAINTEXT://10.0.0.103:9092   指定当前主机的IP做为监听地址,注意:不支持0.0.0.0

#可以调整内存
[root@node1 ~]#vim /usr/local/kafka/bin/kafka-server-start.sh
......
if[ $KAFKA_HEAP_OPTs"="x" ] ; then
   export KAFKA_HEAP_OPTS=" -Xmx1G -xms16"
fi
.....

4.启动服务

在所有kafka节点执行下面操作

[root@node1 ~-]#kafka-server-start.sh -daemon /usr/local/kafka/config/server.properties

5.确保服务启动

[root@node1 ~]#ss -ntl|grep 9092
LISTEN  0        50          [: :ffff:10.0.0.101] : 9092
[root@node1 ~]#tail /usr/local/kafka/logs/server.log
[2024-02-16 12:10:01,276] INFO [ExpirationReaper-1-AlterAc1s]: starting
(kafka.server.DelayedoperationPurgatory$ExpiredoperationReaper)
[2024-02-16 12:10:01,311] INFO [/config/changes-event-process-thread]: starting(kafka . common.zkNodechangeNotificationListener$changeEventProcessThread)
[2024-02-16 12:10:01,332] INFO [Socketserver brokerId=l] starting socket server acceptors and processors(kafka.ne twork. socketserver)
[2024-02-16 12:10:01,339] INFO [socketserver brokerTd=1] started data-plane acceptor and processor(s) forendpoint : ListenerName(PLAINTEXT)(kafka.ne twork. Socketserver)
[2024-02-16 12:10:01,340] INFO [socketserver brokerTd=1] started socket server acceptors and processors(kafka. network. Socketserver)
[2024-02-16 12:10:01,344] INFO Kafka version: 2.7.0 (org.apache.kafka.common .uti1s.AppInfoParser)
[2024-02-16 12:10:01,344] INFO Kafka commitId: 448719dc99a19793 (org.apache.kafka.common.uti1s.AppInfoParser)
[2024-02-16 12:10:01,344]INFO Kafka startTimews: 1613448601340 (org.apache .kafka .common.uti1s.AppInfoParser)
[2024-02-16 12:10:01,346] INFo [Kafkaserver id=1] started (kafka. server.KafkaServer)
[2024-02-16 12:10:01,391] IMFO [broker-1-to-controller-send-thread] : Recorded new controller,from now on wi11use broker 1 (kafka.server . BrokerTocontro1lerRequestThread)

#如果使用id,还需要修改/usr/loca1/ kafka/data/meta.properties
#打开zooinspector可以看到三个id

在这里插入图片描述

Broker依赖于Zookeeper,
  每个Broker的id和Topic、Partition这些元数据信息都会写入Zookeeper的ZNode节点中

consumer依赖于Zookeeper,
  Consumer在消费消息时,每消费完一条消息,会将产生的offset保存到Zzookeeper中,
  下次消费在当前offset往后继续消费.kafka0.9之前Consumer的offset存储在Zookeeper中,
  kafka0.9以后offset存储在本地。
  
Partition依赖于Zookeeper,
  Partition完成Replication备份后,选举出一个Leader,这个是依托于Zookeeper的选举机制实现的。

准备Kafka的service文件
/lib/systemd/ system/ kafka.service

[root@node1 ~]#cat /lib/systemd/system/kafka.service
[Unit]
Description=Apache kafka
After=network.target

[Service]
Type=simple
#Environment=AVA_HOME=/data/server/java
PIDFile=/usr/local/kafka/ kafka.pid
Execstart=/usr/local/kafka/bin/kafka-server-start.sh   /usr/local/kafka/config/server. propertiesExecstop=/bin/kill  -TERM ${MAINPID}
Restart=always
Restartsec=20

[Install]
wantedBy=multi-user.target

[root@node1 ~]#systemctl daemon-load
[root@node1 ~]#systemctl restart kafka.service

Kafka读写数据

常见命令
kafka-topics.sh               #消息的管理命令
kafka-console-producer.sh     #生产者的模拟命令
kafka-console-consumer.sh     #消费者的模拟命令

创建Topic

创建topic名为wang,partitions(分区)为3,replication(每个分区的副本数/每个分区的分区因子)为2

#新版命令
[root@node1 ~]#/usr/loca1/kafka/bin/kafka-topics.sh --create --topic wang --bootstrap-server 10.0.0.101:9092 --partitions 3 --replication-factor 2

#在各节点上观察生成的相关数据
[root@node1 ~]#ls /usr/local/kafka/data/
[root@node2 ~]#ls /usr/local/kafka/data/
[root@node3 ~]#ls /usr/local/kafka/data/

#旧版命令
[root@node1 ~]#/usr/loca1/kafka/bin/kafka-topics.sh --create --zookeeper
10.0.0.101:2181,10.0.0.102:2181,10.0.0.103:2181 --partitions 3 --replication-factor 2 --topic wang
created topic wang.

获取Topic

#新版命令
[root@node1 ~]#/usr/local/kafka/bin/kafka-topics.sh --list --bootstrap-server 10.0.0.101:9092

#旧版命令
[root@node1 ~]#/usr/local/kafka/bin/kafka-topics.sh --list --zookeeper10.0.0.101:2181,10.0.0.102 :2181,10.0.0.103:2181
wang

在这里插入图片描述

验证Topic详情

状态说明: wang有三个分区分别为0、1、2,分区0的leader是3(broker.id);分区0有2个副本,并且状态都为 Isr (In-sync,表示可以参加选举成为leader) .

#新版命令
[root@node1 ~]#/usr/local/kafka/bin/kafka-topics.sh --describe --bootstrap-server 10.0.0.101:9092 --topi cwang
Topic: wang TopicId: beg6bPXwTowlyp7cuv7F8w PartitionCount: 3  ReplicationFactor: 2   configs:
    Topic: wang Partition: 0   Leader: 3   Replicas: 3,1  ISr: 3,1
    Topic: wang Partition: 1   Leader: 1   Replicas: 1,2  Isr: 1,2
    Topic: wang Partition: 2   Leader: 2   Replicas: 2,3  Isr: 2,3

#旧版命令
[root@node1 ~]#/usr/local/kafka/bin/kafka-topics.sh --describe --zookeeper10.0.0.101:2181,10.0.0.102:2181,10.0.0.103:2181 --topic wang
Topic: wang Partitioncount: 3  ReplicationFactor: 2  configs:
    Topic: wang Partition:0    Leader: 3   Replicas: 3,2  Isr: 3,2
    Topic: wang Partition:1    Leader: 1   Replicas: 1,3  Isr: 1,3
    Topic: wang Partition:2    Leader: 2   Replicas: 2,1  Isr: 2,1

生成Topic

kafka-console-producer.sh格式

#发送消息命令格式:
kafka-console-producer.sh --broker-1ist <kafkaIP1>:<端口>,<kafkaIP2> :<端口> --topic <topic名称>

范例

#交互式输入消息,按ctr1+C退出
[root@node1 ~]#/usr/local/kafka/bin/kafka-console-producer.sh --broker-list
10.0.0.101:9092,10.0.0.102:9092,10.0.0.103:9092 --topic wang
>message1
>message2
>message3

#或者下面方式
[root@node1 ~]#/usr/local/kafka/bin/kafka-console-producer.sh --topic wang --bootstrap-server 10.0.0.101:9092

消费Topic

kafka-console-consumer.sh格式

#接收消息命令格式:
kafka-console-consumer.sh --bootstrap-server <host>:<post> --topic <topic名称> --from-beginning --consumer-property group.id=<组名称>
注意:
  ·生产者先生产消息,消费者后续启动也能收到之前生产的消息
  
  ·同一个消息在同一个group内的消费者只有被一个消费者消费,
   比如:共100条消息,在一个group内有A,B两个消费者,其中A消费50条,B消费另外的50条消息。
   从而实现负载均衡,不同group内的消费者则可以同时消费同一个消息
   
  ·--from-beginning表示消费前发布的消息也能收到,默认只能收到消费后发布的新消息
#交互式持续接收消息,按Ctrl+C退出
[root@node1 ~]#/usr/local/kafka/bin/kafka-console-consumer.sh --topic wang --bootstrap-server 10.0.0.102:9092 --from-beginning
message1
message3
message2

#一个消息同时只能被同一个组内一个消费者消费(单播机制),实现负载均衡,而不能组可以同时消费同一个消息(多播机制)
[root@node2~]#/usr/local/kafka/bin/kafka-console-consumer.sh --topic wang --bootstrap-server 10.0.0.102:9092 --from-beginning --consumer-property group.id=group1

[root@node2~]#/usr/local/kafka/bin/kafka-console-consumer.sh --topic wang --bootstrap-server 10.0.0.102:9092 --from-beginning --consumer-property group.id=group1

删除 Topic

#注意:需要修改配置文件server.properties中的delete.topic.enable=true并重启
#新版本
[root@node3 ~]#/usr/local/kafka/bin/kafka-topics.sh --delete --bootstrap-server10.0.0.101:9092,10.0.0.102:9092,10.0.0.103:9092 --topic wang

#旧版本
[root@node3 ~-]#/usr/local/kafka/bin/kafka-topics.sh --delete --zookeeper10.0.0.101:2181,10.0.0.102:2181,10.0.0.103:2181 --topic wang
Topic wang is marked for deletion.
Note: This will have no impact if delete.topic.enable is not set to true.

范例:删除zk下面topic test

#无需修改配置文件server.properties,此方法很危险
[root@zookeeper-node1 ~]#zkCli.sh -server 10.0.0.103:2181
[zk: 10.0.0.103:2181(CONNECTED)0] ls /brokers/topics
[zk: 10.0.0.103:2181(CONNECTED)0] delete all /brokers/topics/test
[zk: 10.0.0.103:2181(CONNECTED)0] ls /brokers/topics

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

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

相关文章

IP网络广播服务平台upload接口存在任意文件上传漏洞

免责声明&#xff1a;请勿利用文章内的相关技术从事非法测试&#xff0c;由于传播、利用此文所提供的信息或者工具而造成的任何直接或者间接的后果及损失&#xff0c;均由使用者本人负责&#xff0c;所产生的一切不良后果与文章作者无关。该文章仅供学习用途使用。 漏洞描述 …

解决常见 Android 问题的 9 大 Android 手机修复软件

许多人发现 Android 手机或平板电脑上的 Android 操作系统起初运行良好&#xff0c;但随着时间的推移&#xff0c;可能会出现各种 Android 系统问题。您可能会遇到一些问题&#xff0c;例如系统速度变慢、启动无响应、挂起错误、界面冻结、短信停滞、应用程序崩溃等。好吧&…

具体函数的卡诺图填入

目录 用卡诺图表示逻辑函数 基本步骤 例子1 例子2 例子3 用卡诺图表示逻辑函数 基本步骤 例子1 由真值表得卡诺图。 在函数值为1的地方在卡诺图上画上1。 例子2 例子3 非标准与或式&#xff0c;要找到公共部分。 将AB所在的那一行填上1。 将A非D的那个部分也填上1。 再…

平价蓝牙耳机哪个牌子好?四款宝藏机型独家推荐

在如今这个科技迅速发展的时代&#xff0c;蓝牙耳机已成为我们日常生活中不可或缺的一部分&#xff0c;尤其是对于那些寻求性价比的消费者来说&#xff0c;平价蓝牙耳机市场是一个充满选择的广阔天地&#xff0c;那么平价蓝牙耳机哪个牌子好&#xff1f;面对繁多的品牌和机型&a…

为什么有人说 PMP 是水证,它的含金量到底怎么样?

关于 PMP 证书是否值得考&#xff1f;有没有价值这个问题争议一直很大。 网传 pmp 培训机构的通过率高达 97%&#xff0c;很多人考了吐槽PMP没用&#xff0c;是“水证”&#xff0c;但是每年考 PMP 的人不减反增&#xff0c;大家可以想一下&#xff0c;这是为什么呢&#xff1…

如何选择?速卖通卖家必知的真人测评与自养号测评对比

速卖通平台上的真人测评和自养号测评各有其优缺点&#xff0c;选择哪种方式更好取决于卖家的具体需求和资源情况。 真人测评 优点&#xff1a; 1. 高权重和可信度&#xff1a;真实用户的账号权重较高&#xff0c;其评价在平台上具有更高的可信度和影响力&#xff0c;能够显著…

海纳百川林宇川:别怕,这个时候应该勇敢加贪婪

海纳百川作为一家资产管理公司&#xff0c;不仅致力于产生自身的利润&#xff0c;还通过其创始人林宇川的领导和战略布局&#xff0c;展现了其正规与专业性。林宇川凭借其丰富的华尔街投行高管经验&#xff0c;以及对国际资本市场的深入了解&#xff0c;为海纳百川的发展奠定了…

Microbiome | 基因组所张江/湖北大学张凤娟揭示菌群在植物抵御害虫中的作用

新型昆虫病原菌假单胞菌的富集增强了柳树对柳蓝叶甲的抗性 2024年9月9日&#xff0c;中国农业科学院农业基因组研究所张江、王海涛、湖北大学张凤娟等团队在Microbiome在线联合发表了题为 “Enrichment of novel entomopathogenic Pseudomonas species enhances willow resista…

HTML5中元素的拖放详解

第11章 HTML5中元素的拖放 只要为元素添加draggable属性&#xff0c;就可实现元素的拖放 11.1 拖放基础 11.1.1 使用JavaScript代码实现拖放 1.功能描述 H5页面中&#xff0c;添加两个div,divFrame包含divTitle&#xff0c;用鼠标移到divTitle上时&#xff0c;按下鼠标左键…

大模型LLM:合成训练样本的数据分布问题

近几天在研究大模型LLM数数问题时&#xff0c;使用合成数据集来训练LLM“统计字符串&#xff08;100个单词以内&#xff09;中字母的个数”的能力&#xff0c;基于Word进行分词。原始的合成代码在生成随机字符串时&#xff0c;采用如下代码&#xff1a; # self.words为常见英文…

盘古信息:做新能源行业数字化转型升级的领航员

随着全球能源转型的加速与可持续发展目标的明确&#xff0c;新能源行业正步入一个前所未有的广阔发展空间。然而&#xff0c;在迅猛发展的浪潮中&#xff0c;新能源行业也面临着诸多挑战&#xff0c;为应对当前市场环境&#xff0c;新能源行业正积极寻求数字化转型的突破路径&a…

低代码 + BI 数字化转型如何助力制造业供应链协同?

引言 在当今快速变化的商业环境中&#xff0c;制造业面临着前所未有的挑战和机遇。全球化竞争、消费者需求的快速变化、技术创新的加速以及不断增加的成本压力&#xff0c;都要求制造企业不断提高其供应链的效率和灵活性。供应链协同作为一种先进的管理理念和实践&#xff0c;…

实现C程序绑定TCP端口

实现C程序绑定TCP端口 步骤概述伪代码C代码实现解释在网络编程中,TCP(传输控制协议)是一种面向连接的、可靠的、基于字节流的传输层通信协议。绑定TCP端口是服务器端应用程序在网络通信中的一个关键步骤,它允许服务器监听来自客户端的连接请求。 本文将介绍如何使用C语言…

MybatisPlus的学习

[MyBatis-Plus] &#xff08;简称 MP&#xff09;是一个 [MyBatis] [ (opens new window)] 的增强工具&#xff0c;在 MyBatis 的基础上只做增强不做改变&#xff0c;为简化开发、提高效率而生。 基于Mapper接口CRUD Insert方法 // 插入一条记录 // T 就是要插入的实体对象 …

直播录屏怎么录视频?自制教程分享,一键录制精彩瞬间

在数字时代&#xff0c;直播已成为连接观众与内容创作者的重要桥梁&#xff0c;想要留住直播中的每一个精彩瞬间&#xff0c;录屏工具不可或缺。今天&#xff0c;我们就来分享一份自制教程&#xff0c;介绍三款实用的录屏方法&#xff0c;需要的朋友抓紧来看看吧~ 方法一&#…

【Python机器学习】循环神经网络(RNN)——传递数据并训练

与其他Keras模型一样&#xff0c;我们需要向.fit()方法传递数据&#xff0c;并告诉它我们希望训练多少个训练周期&#xff08;epoch&#xff09;&#xff1a; model.fit(X_train,y_train,batch_sizebatch_size,epochsepochs,validation_data(X_test,y_test)) 因为个人小电脑内…

Python函数:匿名函数(lambda)④

文章目录 引言1. 什么是匿名函数&#xff08;lambda&#xff09;&#xff1f;1.1 lambda 函数的语法1.2 示例 2. lambda 函数的使用场景2.1 作为参数传递给高阶函数2.1.1 使用 map2.1.2 使用 filter2.1.3 使用 reduce 2.2 排序2.3 在数据结构中使用lambda函数 3. lambda 函数的…

油耳要怎么清洁耳朵才干净?比较推荐哪种可视耳勺

油耳朵的小伙伴们有没有这样的烦恼呢&#xff1f;一两天不清理耳朵就会发痒&#xff0c;日常用棉签清洁耳朵老是清理不干净&#xff0c;而且在转动棉签时还会把棉絮残留在耳道中&#xff1b;用普通耳勺清理又容易刮破耳道&#xff0c;导致耳朵感染。对于油耳朵的小伙伴&#xf…

潘多拉的盒子还是阿拉丁的神灯:揭示RAG噪声在大语言模型中的作用

一、结论写在前面 论文来自清华大学、北京国家信息科学与技术研究中心 论文标题&#xff1a;Pandora’s Box or Aladdin’s Lamp: A Comprehensive Analysis Revealing the Role of RAG Noise in Large Language Models 论文链接&#xff1a;https://arxiv.org/pdf/2408.135…

参赛心得和思路分享:2021第二届云原生编程挑战赛2: 实现一个柔性集群调度机制

关联比赛: 2021第二届云原生编程挑战赛2&#xff1a;实现一个柔性集群调度机制 参赛心得 历时快两个月的第二届云原生编程挑战赛结束了&#xff0c;作为第一次参赛的萌新&#xff0c;拿下了28名的成绩&#xff0c;与第一名差了19万分&#xff0c;因为赛制时间太长&#xff0c…