Pulsar-Schema 数据结构

Pulsar-Schema 数据结构

  • 为什么需要使用Schema?
  • 怎么使用?
  • 生产者端
  • 消费者端
  • 使用用例
  • Schema定义
  • Schema类型
  • 基本类型
  • 复合类型
    • KeyValue schema
    • Struct schema
    • Pulsar提供了以下方法来使用结构模式
      • static
      • generic
  • 自动Schema
  • Schema验证实施
  • Schema演化
  • Schema版本控制
  • Schema兼容性检查
  • Schema兼容性检查策略
  • Schema自动更新
    • 生产者端(producer)
    • 消费端(Consume)
  • 客户端升级顺序

Pulsar消息存储为非结构化字节数组,数据结构(称为模式)仅在读取数据时应用于该数据。因此,生产者和消费者都需要就消息的数据结构(包括字段及其相关类型)达成一致
Pulsar Schema是定义如何将原始消息字节转换为更正式的结构类型的元数据,作为生成消息的应用程序和使用消息的应用程序之间的协议。它在将数据发布到主题之前将数据序列化为原始字节,
并在将原始字节交付给消费者之前将其反序列化
Pulsar使用Schema注册中心作为存储已注册Schema信息的中央存储库,通过代理协调主题消息的Schema
在这里插入图片描述

为什么需要使用Schema?

类型安全在任何围绕消息传递和流系统构建的应用程序中都非常重要,原始字节对于数据传输来说很灵活,但灵活性和中立性是有代价的:
我们必须覆盖数据类型检查,需要序列化和反序列化,确保输入系统的字节可以被读取并成功使用。换句话说,我们需要确保数据对应用程序是可理解的和可用的

Pulsar Schema通过以下功能解决了痛点:

  • 提供用于存储关于组织中使用的Schema的信息的中心位置,从而极大地简化了跨应用程序团队共享这些信息
  • 当主题定义了Schema时,执行数据类型安全。因此消费者和生产者只有在使用“兼容”模式时才允许连接
  • 作为跨所有服务和开发团队使用的所有消息模式的单一真实来源,这使他们更容易协作
  • 保持Schema版本之间的数据兼容性。上传新Schema时,旧用户可以读取新版本
  • 存储在现有的存储层BookKeeper中,无需额外的系统

怎么使用?

Pulsar Schema在主题级别应用和执行。生产者和消费者可以将模式上传到代理,因此Pulsar模式在双方都可以工作

生产者端

该图说明了Pulsar模式如何在生产者端工作:
在这里插入图片描述

  1. 应用程序使用模式实例来构造生产者实例。模式实例为使用生产者实例生成的数据定义模式。以Avro为例,Pulsar从POJO类中提取模式定义并构造SchemaInfo
  2. 生产者请求使用从传入的模式实例中提取的SchemaInfo连接到代理
  3. 代理查找模式注册表,以检查它是否是已注册的模式
    • 如果模式已注册,代理将模式版本返回给生产者
    • 否则,代理检查模式是否可以自动更新
  4. 代理检查模式是否可以自动更新
    • 如果不允许自动更新,则模式不能注册,代理将拒绝生产者
    • 否则,代理执行为主题定义的模式兼容性检查
  5. 代理执行为主题定义的模式兼容性检查
    • 如果模式通过了兼容性检查,代理将其存储在模式注册表中,并将模式版本返回给生产者。此生成器生成的所有消息都使用模式版本进行标记。
    • 否则,代理拒绝生产者

消费者端

该图说明了模式如何在消费者端工作:
在这里插入图片描述

  1. 应用程序使用模式实例来构造使用者实例
  2. 使用者使用从传入的模式实例中提取的SchemaInfo连接到代理
  3. 代理检查主题是否正在使用(至少有一个对象:模式、数据、活动生产者或消费者)
    • 如果主题至少包含上述对象之一,代理执行模式兼容性检查
    • 否则,代理检查模式是否可以自动更新
  4. 代理检查模式是否可以自动更新
    • 如果模式可以自动更新,代理将注册模式并连接使用者
    • 否则,代理拒绝消费者
  5. 代理执行模式兼容性检查
    • 如果模式通过兼容性检查,代理将连接使用者
    • 否则,代理将拒绝使用者

使用用例

在构造和处理从简单数据类型(如字符串)到更复杂的特定于应用程序类型的消息时,可以使用特定于语言的数据类型

创建一个user对象:

public class User {public String name;public int age;User() {}User(String name, int age) {this.name = name;this.age = age;}
}

不使用Schema:

Producer<byte[]> producer = client.newProducer().topic(topic).create();
User user = new User("Tom", 28);
byte[] message =// 这里就需要自己实现序列化;   
producer.send(message);

使用Schema:

// send with json schema
Producer<User> producer = client.newProducer(JSONSchema.of(User.class)).topic(topic).create();
User user = new User("Tom", 28);
producer.send(user);// receive with json schema
Consumer<User> consumer = client.newConsumer(JSONSchema.of(User.class)).topic(schemaTopic).subscriptionInitialPosition(SubscriptionInitialPosition.Earliest).subscriptionName("schema-sub").subscribe();
Message<User> message = consumer.receive();
User user = message.getValue();
assert user.age == 28 && user.name.equals("Tom");

Schema定义

Pulsar模式定义在名为SchemaInfo的数据结构中。它是在每个主题的基础上存储和执行的,不能存储在名称空间或租户级别

这是SchemaInfo的一个字符串示例:

{"name": "test-string-schema","type": "STRING","schema": "","properties": {}
}
  1. name: schema名称
  2. type:schema类型,它决定如何序列化和反序列化模式数据
  3. schema:模式数据,这是一个8位无符号字节序列和特定的模式类型
  4. properties:用户定义的属性是String/String的键值对,应用程序可以使用它来承载任何特定于应用程序的逻辑

Schema类型

Pulsar支持多种模式类型,主要分为两类:

  • Primitive type(基本类型)
  • Complex type(复合类型)

基本类型

概述了Pulsar模式支持的基本类型,以及模式类型和特定于语言的基本类型之间的转换
类型描述对应java类型
BOOLEAN二进制值boolean
INT88 位有符号整数int
INT1616 位有符号整数int
INT3232 位有符号整数int
INT6464 位有符号整数int
FLOAT一个单精度(32位)IEEE 754浮点数float
DOUBLE一个双精度(64位)IEEE 754浮点数double
BYTES8位无符号字节序列byte[], ByteBuffer, ByteBuf
STRINGUnicode字符序列string
TIMESTAMP (DATE, TIME)逻辑类型表示具有毫秒精度的特定时刻。它将自1970年1月1日00:00:00 GMT以来的毫秒数存储为INT64值java.sql.Timestamp (java.sql.Time, java.util.Date)
INSTANT时间轴上的一个瞬间点,精确到纳秒java.time.Instant
LOCAL_DATE表示日期的不可变日期-时间对象,通常视为年-月-日java.time.LocalDate
LOCAL_TIME表示时间的不可变日期-时间对象,通常视为小时-分钟-秒。时间以纳秒精度表示java.time.LocalDateTime
LOCAL_DATE_TIME一个表示日期-时间的不可变日期-时间对象,通常被视为年-月-日-小时-分-秒java.time.LocalTime
Pulsar在SchemaInfo中不为基本类型存储任何模式数据。一些基本模式实现可以使用属性参数来存储特定于实现的可调设置。
例如,字符串模式可以使用属性存储编码字符集,以序列化和反序列化字符串

复合类型

  • KeyValue:表示复合体key/value键值对
  • Struct:结构体,表示结构化数据,包括AvroBaseStructSchema, ProtobufNativeSchema和NativeAvroBytesSchema

KeyValue schema

  KeyValue模式帮助应用程序定义键和值的模式。Pulsar将键模式和值模式的SchemaInfo存储在一起

Pulsar提供了以下方法来编码单个key/value键值对消息:

  • INLINE:key/value键值对在消息有效负载中一起编码
  • SEPARATED:Key存储为消息键,而值存储为消息有效负载

Struct schema

下表概述了Pulsar模式支持的结构类型:

类型描述
AvroBaseStructSchemaPulsar使用Avro规范声明AvroBaseStructSchema的模式定义,AvroBaseStructSchema支持AvroSchema、JsonSchema和ProtobufSchema
ProtobufNativeSchemaProtobufNativeSchema是基于protobuf本机描述符的
NativeAvroBytesSchemaNativeAvroBytesSchema包装了原生Avro模式类型org.apache.avro.Schema。结果是一个模式实例接受序列化的Avro有效负载,而不根据包装的Avro模式验证它.当我们从外部系统(如Kafka和Cassandra)迁移或摄取事件或消息数据时,数据通常已经以Avro格式序列化。生成数据的应用程序通常已经根据其模式验证了数据(包括兼容性检查),并将其存储在数据库或专用服务(如模式注册中心)中。每个序列化数据记录的模式通常可以通过附加到该记录的元数据进行检索.在这种情况下,Pulsar生成器在将摄入的事件发送到主题时不需要重复模式验证。它所需要做的就是将每个消息或事件及其模式传递给Pulsar

Pulsar提供了以下方法来使用结构模式

  • static:我们可以预定义结构模式,它可以是Java中的POJO, Go中的结构,或者由Avro或Protobuf工具生成的类。
  • generic:有时应用程序没有预定义的结构,我们可以使用此方法定义模式和访问数据。我们可以使用GenericSchemaBuilder定义结构模式,使用GenericRecordBuilder生成泛型结构,并将消息消费到GenericRecord中。
  • SchemaDefinition:我们可以定义schemaDefinition来生成一个结构模式

static

  1. 创建pojo对象
# If you use Lombok@Builder
@AllArgsConstructor
@NoArgsConstructor
public static class User {public String name;public int age;
}# If you DON'T use Lombok you will need to add the constructor like this
# 
#   public static class User {
#    String name;
#    int age;
#    public User() { } 
#    public User(String name, int age) { this.name = name; this.age = age; } }
#}
  1. 使用结构模式创建生产者并发送消息
Producer<User> producer = client.newProducer(Schema.AVRO(User.class)).create();
producer.newMessage().value(new User("pulsar-user", 1)).send();
  1. 使用结构模式创建消费者并接收消息
Consumer<User> consumer = client.newConsumer(Schema.AVRO(User.class)).subscribe();
User user = consumer.receive().getValue();

generic

  1. 使用RecordSchemaBuilder构建模式
RecordSchemaBuilder recordSchemaBuilder = SchemaBuilder.record("schemaName");recordSchemaBuilder.field("intField").type(SchemaType.INT32);SchemaInfo schemaInfo = recordSchemaBuilder.build(SchemaType.AVRO);Consumer<GenericRecord> consumer = client.newConsumer(Schema.generic(schemaInfo)).topic(topicName).subscriptionName(subscriptionName).subscribe();Producer<GenericRecord> producer = client.newProducer(Schema.generic(schemaInfo)).topic(topicName).create();
  1. 使用RecordBuilder构建结构记录
GenericSchemaImpl schema = GenericAvroSchema.of(schemaInfo);
// send message
GenericRecord record = schema.newRecordBuilder().set("intField", 32).build();
producer.newMessage().value(record).send();
// receive message
Message<GenericRecord> msg = consumer.receive();Assert.assertEquals(msg.getValue().getField("intField"), 32);

自动Schema

如果没有机会提前知道Pulsar主题的模式类型,我们可以使用自动的模式进行消息的传递

自动模式包含两个类别:

  1. AUTO_PRODUCE:将数据从生产者传输到具有模式的Pulsar主题,并帮助生产者验证出站字节是否与主题的模式兼容
  2. AUTO_CONSUME:将具有模式的Pulsar主题的数据传输给使用者,并帮助该主题验证出站字节是否与使用者兼容。换句话说,主题使用从代理检索的SchemaInfo将消息反序列化为特定于语言的对象GenericRecord

Schema验证实施

  模式验证强制允许代理拒绝没有Schema的生产者和消费者

默认情况下,模式验证强制只对生产者禁用(isSchemaValidationEnforced =false),这意味着:

  • 没有模式的生产者可以向具有模式的主题生成任何消息,这可能导致向主题生成垃圾数据
  • 不支持模式的客户端允许向具有模式的主题生成消息

Schema演化

  Schema存储属性和类型的详细信息。为了满足新的业务需求,Schema会随着时间的推移进行版本控制

注意:Schema演化只适用于Avro、JSON、Protobuf和ProtobufNative Schema

Schema演变可能会影响现有消费者。设计了以下控制措施来服务于Schema演变,并确保下游消费者能够无缝地处理Schema演变:

  • Schema兼容性检查
  • Schema自动更新

Schema版本控制

  与主题一起存储的每个SchemaInfo都有一个版本。模式版本管理主题中发生的模式更改

使用SchemaInfo生成的消息被标记为Schema版本。当Pulsar客户端使用消息时,客户端可以使用Schema版本检索相应的SchemaInfo,并使用正确的模式反序列化数据。
一旦一个版本被分配给一个Schema或从一个Schema获取,该生产者产生的所有后续消息都被标记为适当的版本

假设我们正在使用Pulsar Java客户端创建一个生产者并发送消息:

PulsarClient client = PulsarClient.builder().serviceUrl("pulsar://localhost:6650").build();Producer<SensorReading> producer = client.newProducer(JSONSchema.of(SensorReading.class)).topic("sensor-data").sendTimeout(3, TimeUnit.SECONDS).create();

下表概述了发生此连接尝试时的可能场景以及每个场景的结果:

  • 主题不存在Schema:(1)生产者是用给定的Schema创建的。(2)Schema被传输到代理并存储,因为没有现有的Schema(3)使用相同Schema或主题创建的任何消费者都可以消费来自传感器数据主题的消息
  • Schema已经存在。生产者使用已经存储的相同Schema进行连接:1)Schema被传输到代理(2)代理确定Schema是兼容的(3)代理试图将Schema存储在BookKeeper中,但随后确定它已经被存储,因此它被用于标记生成的消息
  • Schema已经存在。生产者使用兼容的新Schema进行连接:(1)Schema被传输到代理。代理确定Schema是兼容的,并将新Schema存储为当前版本(带有新的版本号)

Schema兼容性检查

  Schema兼容性检查的目的是确保现有的使用者可以处理引入的消息

当从生产者接收SchemaInfo时,代理识别模式类型,并为该模式类型部署模式兼容性检查器(schemaRegistryCompatibilityCheckers),通过应用配置的兼容性检查策略来检查SchemaInfo是否与主题的模式兼容

schemaRegistryCompatibilityCheckers的默认值,conf/broker.conf配置文件中:

schemaRegistryCompatibilityCheckers=org.apache.pulsar.broker.service.schema.JsonSchemaCompatibilityCheck,org.apache.pulsar.broker.service.schema.AvroSchemaCompatibilityCheck,org.apache.pulsar.broker.service.schema.ProtobufNativeSchemaCompatibilityCheck

每种模式类型都对应于模式兼容性检查器的一个实例。Avro、JSON和Protobuf模式有它们自己的兼容性检查器,而所有其他模式类型共享默认的兼容性检查器,这将禁用模式演化

Schema兼容性检查策略

假设您有一个包含三个模式(V1、V2和V3)的主题。V1是最古老的,V3是最新的。下表概述了8种模式兼容性策略及其工作原理:

兼容检查策略定义允许的更改根据哪个模式检查
ALWAYS_COMPATIBLE禁用Schema兼容性检查允许所有更改所有以前的版本
ALWAYS_INCOMPATIBLE禁用Schema演化,即拒绝任何模式更改不允许更改N/A
BACKWARD使用模式V3的消费者可以处理使用上一个模式版本V2的生产者写入的数据允许添加可选字段 允许删除字段最新版本
BACKWARD_TRANSITIVE使用模式V3的消费者可以处理使用所有以前的模式版本V2和V1的生产者写入的数据允许添加可选字段 允许删除字段所有以前的版本
FORWARD使用上一个模式版本V2的消费者可以处理使用新模式V3的生产者写入的数据,尽管他们可能无法使用新模式的全部功能允许添加字段 允许删除可选字段最新版本
FORWARD_TRANSITIVE使用所有以前的模式版本V2或V1的消费者可以处理使用新模式V3的生产者写入的数据允许添加字段 允许删除可选字段所有以前的版本
FULL模式既向后兼容,也向前兼容。使用上一个模式V2的消费者可以处理使用新模式V3的生产者写入的数据。使用新模式V3的消费者可以处理使用上一个模式V2的生产者写入的数据修改可选字段最新版本
FULL_TRANSITIVE模式V3、V2和V1之间的向后和向前兼容性。使用模式V3的消费者可以处理使用模式V2和V1的生产者写入的数据。使用模式V2或V1的消费者可以处理使用模式V3的生产者写入的数据修改可选字段所有以前的版本

Schema自动更新

  默认情况下,Schema AutoUpdate是启用的。当Schema通过Schema兼容性检查时,生产者自动将该Schema更新为它所生成的主题

生产者端(producer)

对于生产者,在以下情况下发生AutoUpdate:

  • 如果主题没有模式(意味着数据是原始字节),Pulsar会自动注册模式
  • 如果一个主题有一个模式,而生产者不携带任何模式(意味着它产生原始字节):
    • 如果在主题所属的名称空间中禁用模式验证强制(schemaValidationEnforced=false),则允许生产者连接到主题并生成数据
    • 否则,将拒绝生产者
    • 如果一个主题有一个模式,生产者也携带一个模式

消费端(Consume)

对于消费者,在以下情况下发生AutoUpdate:

  • 如果使用者连接到一个没有模式的主题(意味着它消耗原始字节),则使用者可以成功连接到主题,而无需进行任何兼容性检查
  • 如果使用者使用模式连接到主题

客户端升级顺序

  为了适应模式演变和自动更新,我们需要相应地升级客户端应用程序。根据配置的模式兼容性检查策略不同,升级顺序可能不同

模式兼容性检查策略与客户端升级顺序的对应关系如下表所示:

兼容检查策略升级顺序描述
ALWAYS_COMPATIBLE任何顺序禁用兼容性检查。因此,我们可以以任何顺序升级生产者和消费者
ALWAYS_INCOMPATIBLEN/ASchema演变已禁用
BACKWARD / BACKWARD_TRANSITIVE消费者优先不能保证使用旧模式的消费者可以读取使用新模式产生的数据。因此,首先升级所有消费者,然后开始生成新数据
FORWARD / FORWARD_TRANSITIVE生产者优先不能保证使用新模式的消费者可以读取使用旧模式产生的数据。因此,首先升级所有生产者以使用新模式,并确保已经使用旧模式生成的数据对消费者不可用,然后升级消费者
FULL / FULL_TRANSITIVE任何顺序可以保证使用旧模式的消费者可以读取使用新模式产生的数据,使用新模式的消费者可以读取使用旧模式产生的数据。因此,我们可以以任何顺序升级生产者和消费者

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

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

相关文章

生物标志物发现中的无偏数据分析策略

目录 0. 导论基本概念 1. 生物标志物发现的注意事项2. 数据预处理2.1 高质量原始数据和缺失值处理2.2 数据过滤2.3 数据归一化 3. 数据质量评估3.1 混杂因素3.2 类别分离3.3 功效分析3.4 批次效应 4. 生物标志物发现4.1 策略4.2 数据分析工具4.3 模型优化策略 0. 导论 组学技术…

【具身智能模型1】PaLM-E: An Embodied Multimodal Language Model

论文标题&#xff1a;PaLM-E: An Embodied Multimodal Language Model 论文作者&#xff1a;Danny Driess, Fei Xia, Mehdi S. M. Sajjadi, Corey Lynch, Aakanksha Chowdhery, Brian Ichter, Ayzaan Wahid, Jonathan Tompson, Quan Vuong, Tianhe Yu, Wenlong Huang, Yevgen C…

10.2手动推导linux中file, cdev, inode之间的关系

是时候可以手动推导一下linux里面基类父类和子类的关系了 代码放最后把 简单说明版 详细流程 第一步注册驱动 cdev结构体能看做是一个基类,那么链表里面都是字符设备驱动的cdev连载一起,啥串口,lcd的,通过cdev->list_head连接 那cdev结构体里有主次设备号 第一步 使用r…

VS2022新建项目时没有ASP.NET Web应用程序 (.NET Framework)

问题&#xff1a;如图&#xff0c;VS2022新建项目时没有“ASP.NET Web应用程序 &#xff08;.NET Framework&#xff09;”的选项解决方法&#xff1a;点击跳转至修改安装选项界面选择安装该项即可&#xff1a;

SpringMVC简介

SpringMVC概述 SpringMVC是一个基于Spring开发的MVC轻量级框架&#xff0c;Spring3.0后发布的组件&#xff0c;SpringMVC可以和Spring无缝整合&#xff0c;使用DispatcherServlet作为前端控制器&#xff0c;且内部提供了处理映射器、处理适配器、视图解析器等组件&#xff0c;…

C# 往多线程传递安全参数的方法

在C#构造一个线程时&#xff0c;要向其传递一个函数&#xff0c;这个函数可以试简单的无参函数&#xff0c;也可以是参数为Object类型的函数&#xff0c;但是由于参数类型为Object&#xff0c;因此编译器无法实行类型检查&#xff0c;看下面的例子&#xff1a; class Program{…

C++学习——C++函数的编译、成员函数的调用、this指针详解

以下内容源于C语言中文网的学习与整理&#xff0c;非原创&#xff0c;如有侵权请告知删除。 从博文的分析中可以看出&#xff0c;对象的内存中只保留了成员变量&#xff0c;除此之外没有任何其他信息&#xff0c;程序运行时不知道 stu 的类型为 Student&#xff0c;也不知道它…

求直角三角形第三点的坐标

文章目录 求直角三角形第三点的坐标1. 原理2. 数学公式3. 推导过程 求直角三角形第三点的坐标 1. 原理 已知内容有&#xff1a; P1、P2 两点的坐标&#xff1b; dis1 为 P1与P2两点之间的距离&#xff1b; dis2 为 P2与P3两点之间的距离&#xff1b; 求解&#xff1a; …

算法通关村第一关-链表青铜挑战笔记

欢迎来到 : 第一关青铜关 java如何创建链表链表怎么增删改查 我们先了解链表 单链表的概念 我们从简单的创建和增删改查开始. 链表的概念 线性表分为顺序表(数组组成)和链表(节点组成) . 链表又分: 单向 双向有哨兵节点 无哨兵节点循环 不循环 链表是一种物理存储单…

计算机毕业设计 高校实习信息发布网站的设计与实现 Javaweb项目 Java实战项目 前后端分离 文档报告 代码讲解 安装调试

&#x1f34a;作者&#xff1a;计算机编程-吉哥 &#x1f34a;简介&#xff1a;专业从事JavaWeb程序开发&#xff0c;微信小程序开发&#xff0c;定制化项目、 源码、代码讲解、文档撰写、ppt制作。做自己喜欢的事&#xff0c;生活就是快乐的。 &#x1f34a;心愿&#xff1a;点…

Git 安装和配置教程:Windows / Mac / Linux 三平台详细图文教程,带你一次性搞定 Git 环境

Git是一款免费、开源的分布式版本控制系统&#xff0c;广泛应用于软件开发领域。随着开源和云计算的发展&#xff0c;Git已经成为了开发者必备的工具之一。本文将为大家介绍Git在Windows、Mac和Linux三个平台上的安装和配置方法&#xff0c;带你一次性搞定Git环境 Windows平台 …

mysql面试题47:MySQL中Innodb的事务实现原理

该文章专注于面试,面试只要回答关键点即可,不需要对框架有非常深入的回答,如果你想应付面试,是足够了,抓住关键点 面试官:Innodb的事务实现原理 InnoDB是MySQL中一种常用的存储引擎,它支持事务和行级锁等特性。以下是InnoDB事务实现的简要原理: 事务定义: 事务是指一…

面向C++模块的开源 IFC SDK

早在 VS2019 v16.10 版本的时候&#xff0c;我们就官宣了对 C 模块(以及几乎所有其他 C 20 特性)的全面支持&#xff0c;包括 MSVC 编译器工具集&#xff0c;静态分析&#xff0c;智能感知和调试器等&#xff0c;而实现模块需要将 C 代码实现为一种内部的临时表示形式。 今天&…

java 每种设计模式的作用,与应用场景

文章目录 前言java 每种设计模式的作用&#xff0c;与应用场景 前言 如果您觉得有用的话&#xff0c;记得给博主点个赞&#xff0c;评论&#xff0c;收藏一键三连啊&#xff0c;写作不易啊^ _ ^。   而且听说点赞的人每天的运气都不会太差&#xff0c;实在白嫖的话&#xff0…

机器学习之Sigmoid函数

文章目录 Sigmoid函数是一种常用的数学函数&#xff0c;通常用于将实数映射到一个特定的区间。它的形状类似于"S"形状曲线&#xff0c;因此得名。Sigmoid函数在机器学习、神经网络和统计学中经常被使用&#xff0c;主要用于二元分类和处理概率值。 Sigmoid函数的一般…

冲刺十五届蓝桥杯P0006平面切分

文章目录 题目思路代码总结 题目 平面切分 思路 这道题是一个思维题把&#xff0c;之前没有接触过平面几何的知识&#xff0c;做起来感觉还是比较难的&#xff0c;用到的set集合和自己创建一个类 首先我们知道&#xff0c;一根直线A是可以将平面切分成两块的&#xff0c;如…

Linux网络编程系列之服务器编程——阻塞IO模型

Linux网络编程系列 &#xff08;够吃&#xff0c;管饱&#xff09; 1、Linux网络编程系列之网络编程基础 2、Linux网络编程系列之TCP协议编程 3、Linux网络编程系列之UDP协议编程 4、Linux网络编程系列之UDP广播 5、Linux网络编程系列之UDP组播 6、Linux网络编程系列之服务器编…

【MySQL入门到精通-黑马程序员】MySQL基础篇-约束

文章目录 前言一、概述二、案例三、外键约束总结 前言 本专栏文章为观看黑马程序员《MySQL入门到精通》所做笔记&#xff0c;课程地址在这。如有侵权&#xff0c;立即删除。 一、概述 概念&#xff1a;约束是作用于表中字段上的规则&#xff0c;用于限制存储在表中的数据。目的…

Kafka 开启SASL/SCRAM认证 及 ACL授权(一)认证

Kafka 开启SASL/SCRAM认证 及 ACL授权(一)认证。 kafka安全涉及3部份:传输加密,用户认证与授权,ZK开启ACL(Zookeeper存储了kafka的元数据以及用户信息,默认不开启acl所有用户可改,内网环境机器不对外开放可考虑使用默认不开启ZK ACL)。 官网地址:https://kafka.ap…

文心一言:文心大模型 4.0 即将发布

本心、输入输出、结果 文章目录 文心一言:文心大模型 4.0 即将发布前言文心 4.0 的成本问题架构文心 4.0 是否可以对标 GPT-4文心4.0 会不会收费弘扬爱国精神文心一言:文心大模型 4.0 即将发布 编辑:简简单单 Online zuozuo 地址:https://blog.csdn.net/qq_15071263 前言 …