一、Pulsar 介绍

Apache Pulsar 是 Apache 软件基金会的顶级项目,是下一代云原生分布式消息流平台,集消息、存储、轻量化函数式计算为一体,采用计算与存储分离架构设计,支持多租户、持久化存储、多机房跨区域数据复制,具有强一致性、高吞吐、低延时及高可扩展性等流数据存储特性。

Pulsar 的关键特性如下:

  • 是下一代云原生分布式消息流平台。
  • Pulsar 的单个实例原生支持多个集群,可跨机房在集群间无缝地完成消息复制。
  • 极低的发布延迟和端到端延迟。
  • 可无缝扩展到超过一百万个 topic。
  • 简单的客户端 API,支持 Java、Go、Python 和 C++。
  • 主题的多种订阅模式(独占、共享和故障转移)。
  • 通过 Apache BookKeeper 提供的持久化消息存储机制保证消息传递 。
  • 由轻量级的 serverless 计算框架 Pulsar Functions 实现流原生的数据处理。
  • 基于 Pulsar Functions 的 serverless connector 框架 Pulsar IO 使得数据更易移入、移出 Apache Pulsar。
  • 分层式存储可在数据陈旧时,将数据从热存储卸载到冷/长期存储(如S3、GCS)中。

二、什么是云原生

既然说 Pulsar 是下一代云原生分布式消息流平台,那我们得知道什么是云原生吧。

云原生的概念是 2013 年 Matt Stine 提出的,到目前为止,云原生的概念发生了多次变更,目前最新对云原生的定义为:DevOps + 持续交付 + 微服务 + 容器。

而符合云原生架构的应用程序是:采用开源堆栈(k8s + docker)进行容器化,基于微服务架构提高灵活性和可维护性,借助敏捷方法、DevOps 支持持续迭代和运维自动化,利用云平台设施实现弹性伸缩、动态调度、优化资源利用率。

在这里插入图片描述

三、核心概念

3.1 Messages(消息)

ComponentDescription
Value / data payload消息携带的数据,所有 Pulsar 的消息携带原始 bytes,但是消息数据也需要遵循数据 schemas。
Key消息可以被 Key 打标签。这可以对 topic 压缩之类的事情起作用。
Properties可选的,用户定义属性的 key/value map。
Producer name生产消息的 producer 的名称(producer 被自动赋予默认名称,但你也可以自己指定。)
Sequence ID在 topic 中,每个 Pulsar 消息属于一个有序的序列。消息的 sequence ID 是它在序列中的次序。
Publish time消息发布的时间戳
Event time可选的时间戳,应用可以附在消息上,代表某个事件发生的时间,例如,消息被处理时。如果没有明确的设置,那么 event time 为0。
TypedMessageBuilder它用于构造消息。您可以使用TypedMessageBuilder设置消息属性,比如消息键、消息值。设置TypedMessageBuilder时,将键设置为字符串。如果您将键设置为其他类型,例如,AVRO对象,则键将作为字节发送,并且很难从消费者处取回AVRO对象。

消息的默认大小为 5 MB,可以通过以下方式配置消息的最大大小。

  • broker.conf
    # The max size of a message (in bytes).
    maxMessageSize=5242880
    
  • bookkeeper.conf
    # The max size of the netty frame (in bytes). Any messages received larger than this value are rejected. The default value is 5 MB.
    nettyMaxFrameSizeBytes=5253120
    

3.2 Producers(生产者)

生产者是关联到 topic 的程序,它发布消息到 Pulsar 的 broker 上。

3.2.1 Send modes(发送模式)

producer 可以以同步或者异步的方式发布消息到 broker。

ModeDescription
异步发送发送消息后,producer等待broker的确认。如果没有收到确认,producer会认为发送失败。
同步发送producer 将会把消息放入阻塞队列,然后马上返回。客户端类库将会在背后把消息发送给 broker。如果队列满了,根据传给 producer 的参数,producer 可能阻塞或者直接返回失败。

3.2.2 Access mode(访问模式)

你可以为生产者提供不同类型的主题访问模式。

Access modeDescription
Shared(共享)多个生产者可以发布一个主题,这是默认设置。
Exclusive(独占)一个主题只能由一个生产者发布。如果已经有生产者连接,其他生产者试图发布该主题立即得到错误。如果“老”生产者与 broker 发生网络分区,“老”生产者将被驱逐,“新”生产者将被选为下一个唯一的生产者。
WaitForExclusive(独占等待)如果已经有一个生产者连接,生产者的创建是未决的(而不是超时),直到生产者获得独占访问。成功成为排他性的生产者被视为领导者。因此,如果您想为您的应用程序实现 leader 选举方案,您可以使用这种访问模式。

3.2.3 Compression(压缩)

你可以压缩生产者在传输期间发布的消息。Pulsar 目前支持以下类型的压缩:

  • LZ4
  • ZLIB
  • ZSTD
  • SNAPPY

3.2.4 Batching(批处理)

如果批处理开启,producer 将会累积一批消息,然后通过一次请求发送出去。批处理的大小取决于最大的消息数量及最大的发布延迟。

3.2.5 Chunking(分块)

  • 批处理和分块不能同时启用。要启用分块,必须提前禁用批处理。
  • Chunking 只支持持久化的主题。
  • Chunking 仅支持 exclusive 和 failover 订阅模式。
3.2.5.1 处理一个 producer 和一个订阅 consumer 的分块消息

如下图所示,当生产者向主题发送一批大的分块消息和普通的非分块消息时。 假设生产者发送的消息为 M1,M1 有三个分块 M1-C1,M1-C2 和 M1-C3。 这个 broker 在其管理的 ledger 里面保存所有的三个块消息,然后以相同的顺序分发给消费者(独占/灾备模式)。 消费者将在内存缓存所有的块消息,直到收到所有的消息块。将这些消息合并成为原始的消息 M1,发送给处理进程。
在这里插入图片描述

3.2.5.2 处理多个 producer 和一个订阅 consumer 的分块消息

当多个生产者发布块消息到单个主题,这个 Broker 在同一个 Ledger 里面保存来自不同生产者的所有块消息。 如下所示,生产者1发布的消息 M1,M1 由 M1-C1, M1-C2 和 M1-C3 三个块组成。 生产者2发布的消息 M2,M2 由 M2-C1, M2-C2 和 M2-C3 三个块组成。 这些特定消息的所有分块是顺序排列的,但是其在 ledger 里面可能不是连续的。 这种方式会给消费者带来一定的内存负担。因为消费者会为每个大消息在内存开辟一块缓冲区,以便将所有的块消息合并为原始的大消息。
在这里插入图片描述

3.3 Consumers(消费者)

消费者通过订阅关联到主题,然后接收消息的程序。

3.3.1 Receive modes(接收模式)

消息可以通过同步或者异步的方式从 broker 接收。

ModeDescription
同步接收同步接收将会阻塞,直到消息可用。
异步接收异步接收立即返回 future 值,例如 java 中的 CompletableFuture,一旦新消息可用,它即刻完成。

3.3.2 Listeners(监听)

客户端类库提供了它们对于 consumer 的监听实现。举一个 Java 客户端的例子,它提供了 MessageListener 接口。在这个接口中,一旦接受到新的消息,received 方法将被调用。

3.3.3 Acknowledgement(确认)

消费者成功处理了消息,需要发送确认给 broker,以让 broker 丢掉这条消息(否则它将存储着此消息)。

消息的确认可以一个接一个,也可以累积一起。累积确认时,消费者只需要确认最后一条它收到的消息。所有之前(包含此条)的消息,都不会被重新发给那个消费者。

累积消息确认不能用于 shared 订阅模式,因为 shared 订阅为同一个订阅引入了多个消费者。

3.4 Topics(主题)

和其它的发布订阅系统一样,Pulsar 中的 topic 是带有名称的通道,用来从 producer 到 consumer 传输消息。Topic 的名称是符合良好结构的 URL。

{persistent|non-persistent}://tenant/namespace/topic
Topic name componentDescription
persistent / non-persistent定义了 topic 类型,Pulsar 支持两种不同 topic:持久和非持久(默认是持久类型,如果你没有指明类型,topic 将会是持久类型)。持久 topic 的所有消息都会保存在硬盘上(这意味着多块硬盘,除非是单机模式的 broker),反之,非持久 topic 的数据不会存储到硬盘上。
tenant实例中 topic 的租户。tenant 是 Pulsar 多租户的基本要素。可以被跨集群的传播。
namespacetopic 的管理单元,相关 topic 组的管理机制。大多数的 topic 配置在 namespace 层面生效。每个 tenant 可以有多个 namespace。
topic主题名称的最后组成部分,topic 的名称很自由,没有什么特殊的含义。

3.4.1 Partitioned topics(分区主题)

普通主题仅由单个 broker 提供服务,这限制了主题的最大吞吐量。分区主题是由多个 broker 处理的一种特殊类型的主题,因此允许更高的吞吐量。

分区的主题实际上实现为 N 个内部主题,其中 N 是分区的数量。当将消息发布到分区主题时,每个消息都被路由到几个 broker 中的一个。分区在 broker 间的分布由 Pulsar 自动处理。
在这里插入图片描述
如上图,Topic1 主题有 5 个分区(P0 到 P4),划分在 3 个 broker 上。因为分区比 broker 多,前两个 broker 分别处理两个分区,而第三个 broker 只处理一个分区(同样,Pulsar 自动处理分区的分布)。

此主题的消息将广播给两个消费者。路由模式决定将每个消息发布到哪个分区,而订阅模式决定将哪些消息发送到哪个消费者。

在大多数情况下,可以分别决定路由和订阅模式。通常,吞吐量问题应该指导分区/路由决策,而订阅决策应该根据应用程序语义进行指导。

就订阅模式的工作方式而言,分区主题和普通主题之间没有区别,因为分区仅决定消息由生产者发布和由消费者处理和确认之间发生了什么。

分区主题需要通过管理 API 显式创建,分区的数量可以在创建主题时指定。

3.4.1.1 Routing modes(路由模式)

当发布消息到分区 topic,你必须要指定路由模式。路由模式决定了每条消息被发布到的分区(其实是内部主题)。

下面是三种默认可用的路由模式:

ModeDescription
RoundRobinPartitionmessage 无 key 则轮询,有 key 则 hash(key) 指定分区。(默认模式)
SinglePartitionmessage 无 key,producer 将会随机选择一个分区,把所有的消息发往该分区。如果 message 指定了 key,分区的 producer 会把 key 做 hash,然后分配消息到指定的分区。
CustomPartition使用自定义消息路由实现,可以决定特定的消息进入指定的分区。
3.4.1.2 Ordering guarantee(顺序保证)

消息的顺序与路由模式和消息的 key 有关:

Ordering guaranteeDescriptionRouting Mode and Key
Per-key-partition(按 key 分区)具有相同 key 的所有消息将被按顺序放置在同一个分区中。使用 SinglePartition 或 RoundRobinPartition 模式,Key 由每个消息提供。
Per-producer(按 producer)来自同一生产者的所有消息将是有序的。使用 SinglePartition 模式,并且没有为每个消息提供 Key。
3.4.1.3 Hashing scheme(哈希方案)

HashingScheme 是一个 enum,表示在选择要为特定消息使用的分区时可用的标准哈希函数集。

有两种类型的标准哈希函数可用:JavaStringHashMurmur3_32Hash。生产者的默认哈希函数是 JavaStringHash。请注意,当生产者可以来自不同的多语言客户端时,JavaStringHash 是没有用的,在这个用例下,建议使用 Murmur3_32Hash

3.4.2 persistent/Non-persistent topics(持久/非持久主题)

默认情况下, Pulsar 会保存所有没确认的消息到 BookKeeper 中。持久 Topic 的消息在 Broker 重启或者 Consumer 出现问题时保存下来。

除了持久 Topic , Pulsar 也支持非持久 Topic 。这些 Topic 的消息只存在于内存中,不会存储到磁盘。

因为 Broker 不会对消息进行持久化存储,当 Producer 将消息发送到 Broker 时, Broker 可以立即将 ack 返回给 Producer ,所以非持久 Topic 的消息传递会比持久 Topic 的消息传递更快一些。相对的,当 Broker 因为一些原因宕机、重启后,非持久 Topic 的消息都会消失,订阅者将无法收到这些消息。

3.4.3 Dead letter topic(死信主题)

死信主题允许你在用户无法成功消费某些消息时使用新消息。在这种机制中,无法使用的消息存储在单独的主题中,称为死信主题。你可以决定如何处理死信主题中的消息。

下面的例子展示了如何在 Java 客户端中使用默认的死信主题:

Consumer<byte[]> consumer = pulsarClient.newConsumer(Schema.BYTES).topic(topic).subscriptionName("my-subscription").subscriptionType(SubscriptionType.Shared).deadLetterPolicy(DeadLetterPolicy.builder().maxRedeliverCount(maxRedeliveryCount).build()).subscribe();

默认的死信主题格式:

<topicname>-<subscriptionname>-DLQ

如果你想指定死信主题的名称,请使用下面的 Java 客户端示例:

Consumer<byte[]> consumer = pulsarClient.newConsumer(Schema.BYTES).topic(topic).subscriptionName("my-subscription").subscriptionType(SubscriptionType.Shared).deadLetterPolicy(DeadLetterPolicy.builder().maxRedeliverCount(maxRedeliveryCount).deadLetterTopic("your-topic-name").build()).subscribe();        

死信主题依赖于消息的重新投递。由于确认超时或否认确认,消息将被重新发送。如果要对消息使用否定确认,请确保在确认超时之前对其进行否定确认。
目前,在共享和 Key_Shared 订阅模式下启用了死信主题。

3.4.4 Retry letter topic(重试主题)

对于许多在线业务系统,由于业务逻辑处理中出现异常,消息会被重复消费。若要配置重新消费失败消息的延迟时间,你可以配置生产者将消息发送到业务主题和重试主题,并在消费者上启用自动重试。当在消费者上启用自动重试时,如果消息没有被消费,则消息将存储在重试主题中,因此消费者在指定的延迟时间后将自动接收来自重试主题的失败消息。

默认情况下,不启用自动重试功能。你可以将 enableRetry 设置为 true,以启用消费者的自动重试。

下面来看个如何使用从重试主题来消费消息的示例:

Consumer<byte[]> consumer = pulsarClient.newConsumer(Schema.BYTES).topic(topic).subscriptionName("my-subscription").subscriptionType(SubscriptionType.Shared).enableRetry(true).receiverQueueSize(100).deadLetterPolicy(DeadLetterPolicy.builder().maxRedeliverCount(maxRedeliveryCount).retryLetterTopic("persistent://my-property/my-ns/my-subscription-custom-Retry").build()).subscriptionInitialPosition(SubscriptionInitialPosition.Earliest).subscribe();

3.5 Subscriptions(订阅模式)

Pulsar 支持 exclusive(独占)、failover(灾备)、 shared(共享)和 key_shared(key 共享) 四种消息订阅模式,这四种模式的示意图如下:
在这里插入图片描述

3.5.1 Exclusive(独占模式)

独占模式是 Pulsar 默认的消息订阅模式,在这种模式下,只能有一个 consumer 消费消息,如果有多于一个 consumer 消费此 topic 则会出错,消费示意图如下:
在这里插入图片描述

3.5.2 Failover(灾备模式)

灾备模式下,一个 topic 也是只有单个 consumer 消费一个订阅关系的消息,与独占模式不同之处在于,灾备模式下,每个消费者会被排序,当前面的消费者无法连接上 broker 后,消息会由下一个消费者消费,消费示意图如下:
在这里插入图片描述

3.5.3 Shared(共享模式)

共享模式下,消息可被多个 consumer 同时消费,无法保证消息的顺序,并且无法使用 one by one 和 cumulative 的 ack 模式,消息通过 roundrobin 的方式投递到每一个消费者,消费示意图如下:

在这里插入图片描述

3.5.4 Key_Shared(Key 共享模式)

Key_Shared 模式是 Shared 模式的一种,不同的是它按 key 对消息做投递,相同的 key 的消息会被投递到同一个 consumer 上,消费示意图如下:
在这里插入图片描述

3.6 Message retention and expiry(消息保留和过期)

默认策略:

  • 立即删除所有已经被消费者确认过的的消息;
  • 以 backlog 的形式,持久保存所有未被确认的消息;

两个特性:

  • 消息保留让你可以保存 consumer 确认过的消息;
  • 消息过期让你可以给未被确认的消息设置存活时长(TTL);

在这里插入图片描述
注:所有消息保留和过期在 namespace 层面管理。

3.7 Message deduplication(消息去重)

实现消息去重的一种方式是确保消息仅生成一次,即生产者幂等。这种方式的缺点是把消息去重的工作交由应用去做。

在 Pulsar 中, Broker 支持配置开启消息去重,用户不需要为了消息去重去调整 Producer 的代码。启用消息去重后,即使一条消息被多次发送到 Topic 上,这条消息也只会被持久化到磁盘一次。

如下图,未开启消息去重时, Producer 发送消息 1 到 Topic 后, Broker 会把消息 1 持久化到 BookKeeper ,当 Producer 又发送消息 1 时, Broker 会把消息 1 再一次持久化到 BookKeeper 。开启消息去重后,当 Producer 再次发送消息 1 时, Broker 不会把消息 1 再一次持久化到磁盘。

在这里插入图片描述

3.7.1 去重原理

Producer 对每一个发送的消息,都会采用递增的方式生成一个唯一的 sequenceID,这个消息会放在 message 的元数据中传递给 Broker 。同时, Broker 也会维护一个 PendingMessage 队列,当 Broker 返回发送成功 ack 后, Producer 会将 PendingMessage 队列中的对应的 Sequence ID 删除,表示 Producer 任务这个消息生产成功。Broker 会记录针对每个 Producer 接收到的最大 Sequence ID 和已经处理完的最大 Sequence ID。

当 Broker 开启消息去重后, Broker 会对每个消息请求进行是否去重的判断。收到的最新的 Sequence ID 是否大于 Broker 端记录的两个维度的最大 Sequence ID,如果大于则不重复,如果小于或等于则消息重复。消息重复时, Broker 端会直接返回 ack,不会继续走后续的存储处理流程。

3.8 Delayed message delivery(消息延迟传递)

延时消息功能允许 Consumer 能够在消息发送到 Topic 后过一段时间才能消费到这条消息。在这种机制中,消息在发布到 Broker 后,会被存储在 BookKeeper 中,当到消息特定的延迟时间时,消息就会传递给 Consumer 。

下图为消息延迟传递的机制。Broker 在存储延迟消息的时候不会进行特殊的处理。当 Consumer 消费消息的时候,如果这条消息设置了延迟时间,则会把这条消息加入 DelayedDeliveryTracker 中,当到了指定的发送时间时,DelayedDeliveryTracker 才会把这条消息推送给消费者。
在这里插入图片描述

注:延迟消息传递仅在共享订阅模式下有效。在独占和故障转移订阅模式下,将立即分派延迟的消息。

3.8.1 示例

  • Broker
    # Whether to enable the delayed delivery for messages.
    # If disabled, messages are immediately delivered and there is no tracking overhead.
    delayedDeliveryEnabled=true# Control the ticking time for the retry of delayed message delivery,
    # affecting the accuracy of the delivery time compared to the scheduled time.
    # Default is 1 second.
    delayedDeliveryTickTimeMillis=1000
    
  • Producer
    // message to be delivered at the configured delay interval
    producer.newMessage().deliverAfter(3L, TimeUnit.Minute).value("Hello Pulsar!").send();
    

3.8.2 消息延迟传递原理

在 Pulsar 中,可以通过两种方式实现延迟投递。分别为 deliverAfter 和 deliverAt。

deliverAfter 可以指定具体的延迟时间戳,deliverAt 可以指定消息在多长时间后消费。两种方式本质时一样的,deliverAt 方式下,客户端会计算出具体的延迟时间戳发送给 Broker 。

DelayedDeliveryTracker 会记录所有需要延迟投递的消息的 index 。index 由 Timestamp、 Ledger ID、 Entry ID 三部分组成,其中 Ledger ID 和 Entry ID 用于定位该消息,Timestamp 除了记录需要投递的时间,还用于延迟优先级队列排序。DelayedDeliveryTracker 会根据延迟时间对消息进行排序,延迟时间最短的放在前面。当 Consumer 在消费时,如果有到期的消息需要消费,则根据 DelayedDeliveryTracker index 的 Ledger ID、 Entry ID 找到对应的消息进行消费。如下图, Producer 依次投递 m1、m2、m3、m4、m5 这五条消息,m2 没有设置延迟时间,所以会被 Consumer 直接消费。m1、m3、m4、m5 在 DelayedDeliveryTracker 会根据延迟时间进行排序,并在到达延迟时间时,依次被 Consumer 进行消费。
在这里插入图片描述

3.9 多租户模式

Pulsar 的云原生架构天然支持多租户,每个租户下还支持多 Namespace(命名空间),非常适合做共享大集群,方便维护。此外,Pulsar 天然支持租户之间资源的逻辑隔离,只要用户的运营管控后台和监控足够强大,便可以做到动态隔离大流量租户,防止互相干扰,还能实现大集群资源的充分利用。

  • Tenant(租户)和 Namespace(命名空间)是 Pulsar 支持多租户的两个核心概念。
  • 在租户级别,Pulsar 为特定的租户预留合适的存储空间、应用授权和认证机制。
  • 在命名空间级别,Pulsar 有一系列的配置策略(Policy),包括存储配额、流控、消息过期策略和命名空间之间的隔离策略。

Pulsar 的多租户性质主要体现在 Topic 的 URL 中,结构如下:

persistent://tenant/namespace/topic

租户、命名空间、topic 更直观的关系可以看下图:
在这里插入图片描述

3.10 统一消息模型

  • Pulsar 做了队列模型与流模型的统一,在 Topic 级别只需保存一份数据,同一份数据可多次消费。以流式、队列等方式计算不同的订阅模型,大大的提升了灵活度。
  • 同时 Pulsar 通过事务采用 Exactly-Once(刚好一次)的语义,在进行消息传输过程中,可以确保数据不丢不重。

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

3.11 Segmented Streams(分片流)

  • Pulsar 将无界的数据看作是分片的流,分片分散存储在分层存储(tiered storage)、BookKeeper 集群和 Broker 节点上,而对外提供一个统一的、无界数据的视图。
  • 不需要用户显式迁移数据,对用户无感知,减少存储成本并保持近似无限的存储。

在这里插入图片描述

3.12 Geo Replication(跨地域复制)

  • Pulsar 中的跨地域复制是将 Pulsar 中持久化的消息在多个集群间备份。
  • 在 Pulsar 2.4.0 中新增了复制订阅模式(Replicated-subscriptions),在某个集群失效情况下,该功能可以在其他集群恢复消费者的消费状态, 从而达到热备模式下消息服务的高可用。

在这里插入图片描述
在这个图中,每当 P1、P2 和 P3 生产者分别将消息发布到 Cluster-A、Cluster-B 和 Cluster-C 上的 T1 主题时,这些消息就会立即跨集群复制。一旦消息被复制,C1 和 C2 消费者就可以从他们各自的集群中消费这些消息。

没有跨地域复制,C1 和 C2 消费者就不能使用 P3 生产者发布的消息。

四、云原生架构

4.1 Pulsar 集群架构

单个 Pulsar 集群由以下三部分组成:

  • 一个或者多个 broker 负责处理和负载均衡 producer 发出的消息,并将这些消息分派给 consumer;Broker 与 Pulsar 配置存储交互来处理相应的任务,并将消息存储在 BookKeeper 实例中(又称 bookies);Broker 依赖 ZooKeeper 集群处理特定的任务,等等。
  • 包含一个或多个 bookie 的 BookKeeper 集群负责消息的持久化存储。
  • 一个 ZooKeeper 集群,用来处理多个 Pulsar 集群之间的协调任务。

在这里插入图片描述
Pulsar 分理出 Broker 与 Bookie 两层架构,Broker 为无状态服务,用于发布和消费消息,而 BookKeeper 专注于存储。Pulsar 存储是分片的,这种架构可以避免扩容时受限制,实现数据的独立扩展和快速恢复。

4.2 Brokers

Pulsar 的 broker 是一个无状态组件,主要负责运行另外的两个组件:

  • 一个 HTTP 服务器(Service discovery),它暴露了 REST 系统管理接口以及在生产者和消费者之间进行 Topic 查找的 API。
  • 一个调度分发器(Dispatcher),它是异步的 TCP 服务器,通过自定义二进制协议应用于所有相关的数据传输。

出于性能考虑,消息通常从 Managed Ledger 缓存中分派出去,除非积压超过缓存大小。如果积压的消息对于缓存来说太大了,则 Broker 将开始从 BookKeeper 那里读取 Entries(Entry 同样是 BookKeeper 中的概念,相当于一条记录)。

最后,为了支持全局 Topic 异地复制,Broker 会控制 Replicators 追踪本地发布的条目,并把这些条目用Java客户端重新发布到其他区域。

4.3 ZooKeeper 元数据存储

Pulsar 使用 Apache ZooKeeper 进行元数据存储、集群配置和协调。

  • 配置存储 Quorum 存储了租户、命名空间和其他需要全局一致的配置项。
  • 每个集群有自己独立的本地 ZooKeeper 保存集群内部配置和协调信息,例如 broker 负责哪几个主题及所有权归属元数据、broker 负载报告,BookKeeper ledger 元数据(这个是 BookKeeper 本身所依赖的)等等。

4.4 BookKeeper 持久化存储

Apache Pulsar 为应用程序提供有保证的信息传递,如果消息成功到达 broker,就认为其预期到达了目的地。

为了提供这种保证,未确认送达的消息需要持久化存储直到它们被确认送达。这种消息传递模式通常称为持久消息传递,在 Pulsar 内部,所有消息都被保存并同步 N 份,例如,2 个服务器保存四份,每个服务器上面都有镜像的 RAID 存储。

Pulsar 用 Apache BookKeeper 作为持久化存储。BookKeeper 是一个分布式的预写日志(WAL)系统,有如下几个特性特别适合 Pulsar 的应用场景:

  • 使 Pulsar 能够利用独立的日志,称为 ledgers,可以随着时间的推移为 topic 创建多个 ledgers。
  • 它为处理顺序消息提供了非常有效的存储。
  • 保证了多系统挂掉时 ledgers 的读取一致性。
  • 提供不同的 Bookies 之间均匀的 IO 分布的特性。
  • 它在容量和吞吐量方面都具有水平伸缩性。能够通过增加 bookies 立即增加容量到集群中,并提升吞吐量。
  • Bookies 被设计成可以承载数千的并发读写的 ledgers。 使用多个磁盘设备,一个用于日志,另一个用于一般存储,这样 Bookies 可以将读操作的影响和对于写操作的延迟分隔开。

4.4.1 brokers 与 bookies 交互

下图展示了 brokers 和 bookies 是如何交互的:
在这里插入图片描述
相比 Kafka、RocketMQ 等 MQ,Pulsar 基于 BookKeeper 的存储、计算分离架构,使得 Pulsar 的消息存储可以独立于 Broker 而扩展。

4.4.2 Ledgers

Ledger 是一个只追加的数据结构,并且只有一个写入器,这个写入器负责多个 BookKeeper 存储节点(就是 Bookies)的写入。 Ledger 的条目会被复制到多个 bookies。 Ledgers 本身有着非常简单的语义:

  • Pulsar Broker 可以创建 ledger,添加内容到 ledger 和关闭 ledger。
  • 当一个 ledger 被关闭后,除非明确的要写数据或者是因为写入器挂掉导致 ledger 关闭,这个 ledger 只会以只读模式打开。
  • 最后,当 ledger 中的条目不再有用的时候,整个 legder 可以被删除(ledger 分布是跨 Bookies 的)。

4.5 Pulsar 代理

Pulsar 客户端和 Pulsar 集群交互的一种方式就是直连 Pulsar brokers 。 然而,在某些情况下,这种直连既不可行也不可取,因为客户端并不知道 broker 的地址。 例如在云环境或者 Kubernetes 以及其他类似的系统上面运行 Pulsar,直连 brokers 就基本上不可能了。

Pulsar proxy 为这个问题提供了一个解决方案,为所有的 broker 提供了一个网关,如果选择运行了Pulsar Proxy,所有的客户都会通过这个代理而不是直接与 brokers 通信。

4.6 Service discovery(服务发现)

连接到 Pulsar brokers 的客户端需要能够使用单个 URL 与整个 Pulsar 实例通信。

你可以使用自己的服务发现系统。如果你使用自己的系统,只有一个要求:当客户端端点执行 HTTP 请求,比如 http://pulsar.us-west.example.com:8080,客户端需要被重定向到一些活跃在集群所需的 broker,无论通过 DNS、HTTP 或 IP 重定向或其他手段。
在这里插入图片描述

五、Pulsar 相关组件

5.1 层级存储

  • Infinite Stream:以流的方式永久保存原始数据
  • 分区的容量不再受限制
  • 充分利用云存储或现有的廉价存储(例如 HDFS)
  • 数据统一表征:客户端无需关心数据究竟存储在哪里

在这里插入图片描述
在这里插入图片描述
分层存储的卸载机制就充分利用了这种面向分片式架构(segment oriented architecture)。 当需要开始卸载数据时,消息日志中的分片就依次被同步至分层存储中, 直到消息日志中所有的分片(除了当前分片之外)都已被写入分层存储后。

默认情况下写入到 BookKeeper 的数据会复制三个物理机副本。 然而,一旦分片被封存在 BookKeeper 中后,该分片就不可更改并且可以复制到归档存储中去。 长期存储可以达到节省存储费用的目的。通过使用 Reed-Solomon error correction 机制,还可减少物理备份数量。

5.2 Pulsar IO(Connector)连接器

  • Pulsar IO 分为输入(Input)和输出(Output)两个模块,输入代表数据从哪里来,通过 Source 实现数据输入。输出代表数据要往哪里去,通过 Sink 实现数据输出。
  • Pulsar 提出了 IO (也称为 Pulsar Connector),用于解决 Pulsar 与周边系统的集成问题,帮助用户高效完成工作。
  • 目前 Pulsar IO 支持非常多的连接集成操作:例如 HDFS、Spark、Flink、Flume、ES、HBase等。

在这里插入图片描述

5.3 Pulsar Functions(轻量级计算框架)

  • Pulsar Functions 是一个轻量级的计算框架,可以给用户提供一个部署简单、运维简单、API 简单的 FASS(Function as a service)平台。Pulsar Functions 提供基于事件的服务,支持有状态与无状态的多语言计算,是对复杂的大数据处理框架的有力补充。
  • Pulsar Functions 的设计灵感来自于 Apache Storm、Apache Heron、Apache Flink 这样的流处理引擎,Pulsar Functions 将会拓展 Pulsar 和整个消息领域的未来。使用 Pulsar Functions,用户可以轻松地部署和管理 function,通过 function 从 Pulsar topic 读取数据或者生产新数据到 Pulsar topic。

在这里插入图片描述

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

相关文章

  1. C语言-操作符(详细)和表达式求值

    本篇是对各种操作符和表达式的求值的介绍 1.算数操作符 2.移位操作符 3.位操作符 4.赋值操作符 5.单目操作符 6.关系操作符 7.逻辑操作符 8.条件操作符 9.逗号表达式 10.下标引用操作符与函数调用操作符 11.结构体成员操作符 12.表达式求值 13.操作符的属性 1.算…...

    2024/4/13 13:35:47
  2. [前端之旅] - 02 网络知识(网络协议HTTPDNS)

    文章目录导读网络协议七层协议和四层协议HTTPHTTP交互式请求-telnet.exeHTTP交互式请求-tcp在线测试HTTP请求/响应0x06-http缓存详解DNS参考资料导读 继《[前端之旅] - 01 开端 &#xff08;持续更新各种资料&#xff09;》之后&#xff0c;趁着春节&#xff0c;看了网络知识的…...

    2024/4/13 13:36:12
  3. 网页前端培训笔记(CSS)

    学习网址&#xff1a;【优极限】 HTMLCSSJavaScriptjQuery前端必学教程&#xff0c;小白教学&#xff0c;前端基础全套完成版_哔哩哔哩_bilibili HTML 教程 | 菜鸟教程 (runoob.com) 1、CSS的基本使用 <!DOCTYPE html> <html><head><meta charset"u…...

    2024/4/5 2:47:34
  4. Go语言圣经

    Go语言圣经传送门...

    2024/4/18 21:30:56
  5. 算法竞赛备赛(三):搜索与最短路

    前言 本篇介绍算法竞赛中最最重点的一个部分搜索和图论。搜索分为广度优先搜索和深度优先搜索&#xff0c;在题目中非常的常见。而在图论中经常考察的最短路与最小生成树&#xff0c;是算法中极为重要一项基本功。 DFS(暴搜) 可以被称为“2022年度算法”的一款算法&#xff0…...

    2024/4/18 7:12:58
  6. 非易失性规划的原理与实现方法

    常言道&#xff0c;计划不如变化快。计划的制定本身就建基于对未来一定时间范围内的环境条件假设&#xff0c;当计划制定后到执行完成的时间段内&#xff0c;若环境条件发生变化&#xff0c;那么计划也需要进行适当的调整才能满足实际要求。但计划的调整往往伴随着相应的代价&a…...

    2024/4/13 13:35:57
  7. CAD无法拖入打开文件的解决方法

    WinR&#xff0c;输入regedit并打开 复制路径并进入 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System 将EnableLUA中的数值数据改为0 重启计算机...

    2024/4/18 18:07:37
  8. C++学习日志6--函数的占位参数

    前言 这篇文章主要讲述C中函数占位参数的使用 一、代码 //跟着视频学习的代码&#xff0c;分享记录一下 #include<iostream> using namespace std; //函数的占位参数 (数据类型 a,数据类型 ) //目前阶段的占位参数&#xff0c;还用不到&#xff0c;后面课程中会使用到…...

    2024/4/19 23:39:48
  9. 关于pyqt5弹出提示框

    最近在用pyqt5设计软件时&#xff0c;想到了一些关于提示框的操作&#xff0c;如果软件关闭时可以弹出确定关闭的弹窗&#xff1b;程序执行完成时可以弹出完成的提示&#xff1b;出现错误提示出现错误的提示等等。在网上查阅了很多&#xff0c;自己总结了一下&#xff0c;今天分…...

    2024/4/10 19:18:34
  10. ABC 237 E(转化为最短路问题

    题意&#xff1a; 给定 nnn 点高度为 aia_iai​&#xff0c;初始位置为 111&#xff0c;求从 111 出发的最长路&#xff08;经过边权的代数和最大&#xff09;是多少 两个点之间的边权这样定义&#xff1a; 现在从 xxx 要去 yyy 如果 ax>aya_x>a_yax​>ay​&#xff0…...

    2024/4/20 17:58:10
  11. JSP有哪些内置对象,说说其作用

    request 表示 HttpServletRequest 对象。它包含了有关浏览器请求的信息&#xff0c;并且提供了几个用于获取 cookie, header, 和 session 数据的有用的方法。 response 表示 HttpServletResponse 对象&#xff0c;并提供了几个用于设置送回浏览器的响应的方法&#xff08;…...

    2024/4/13 13:35:47
  12. C++学习日志5--函数的默认参数

    前言 这篇文章主要讲述C中函数的默认参数相关知识。 一、代码 //跟着视频学习的代码&#xff0c;分享记录一下 #include<iostream> using namespace std; //函数的默认参数 //可以调用默认&#xff0c;也可以传入 int func(int a,int b20, int c30) {return a b c;…...

    2024/4/18 11:55:39
  13. 硬件调整性能

    最有可能影响性能的是磁盘和网络吞吐量,解决办法 扩大虚拟内存&#xff0c;并保证有足够可以扩充的空间&#xff1b;把数据库服务器上的不必要服务关闭掉 把数据库服务器和主域服务器分开 把SQL数据库服务器的吞吐量调为最大 在具有一个以上处理器的机器上运行SQL...

    2024/4/13 13:35:52
  14. 第十课 动作系统与计时器

    一.按钮回调事件 1.通过GUI添加事件 2.通过脚本添加事件 将beginBtn按钮组件拖动到canvas下的脚本组件loadingTS的begin Btn内 const { ccclass, property } cc._decorator;ccclass export default class NewClass extends cc.Component {property(cc.Node)beginBtn: cc.N…...

    2024/4/14 12:11:01
  15. 字符串如何去掉前后空格,中间空格?

    1、去掉前后的空格 String里最常用的方法trim()。 Java代码 String s " abc "; Sysout.println("--" s.trim() "--"); 2、去掉字符串中间的空格 试用环境&#xff1a;比如从word,excl或者数据库中取用户名时&#xff0c;“李四”和“李…...

    2024/4/21 5:31:31
  16. C++核心编程 16继承(下)

    目录 一、继承中同名成员的处理 二、继承中的同名静态成员处理 三、多继承语法 四、菱形继承的问题及解决 一、继承中同名成员的处理 如果子类和父类拥有同名成员优先调用子类的成员 可以通过作用域调用父类成员同名的成员函数 子类会隐藏掉父类所以的版本 也可以加作用域…...

    2024/4/13 13:35:47
  17. 【系统分析师之路】2007年下系统分析师上午综合知识真题

    【系统分析师之路】2007年下系统分析师上午综合知识真题 【2007下系分真题第一题&#xff1a;绿色】 01.图1中左边的UML类图描绘的是设计模式中的&#xff08;1&#xff09;模式。右边的UML类图描述了该模式的一种应用&#xff0c;其中与左图中的“Creator”对应的类是&#xf…...

    2024/4/14 18:17:15
  18. 随便打字昵称生成器

    有些人的游戏昵称总是像“dfhtgfbvcxd”这样的&#xff0c;于是我开发了一个生成器&#xff0c;可以生成这种昵称 &#xff08;1、生肉&#xff0c;无注释&#xff09; #include<iostream> #include<math.h> #include<time.h> #include<windows.h> #…...

    2024/4/22 0:35:50
  19. 第八课 事件系统与计时器

    一.如何访问别的节点 1.通过属性检查器设置节点来访问别的节点 2.通过代码子节点父节点的访问 ①通过子节点名字访问 ②通过子节点数组访问 const { ccclass, property } cc._decorator;ccclass export default class sp2 extends cc.Component {onLoad() {//sp2脚本挂载…...

    2024/4/17 15:52:06
  20. MLDL课程学习笔记(含视频链接

    1. FPN&#xff08;Feature Pyramid Networks&#xff09; 1.1 视频链接 https://www.bilibili.com/video/BV1dh411U7D9?p1&share_mediumandroid&share_platandroid&share_sourceCOPY&share_tags_i&timestamp1619145936&unique_kQhn6xA 1.2 笔记内…...

    2024/4/15 15:15:56

最新文章

  1. [软件工具]批量根据文件名查找PDF文件复制到指定的地方,如何批量查找文件复制,多个文件一起查找复制

    多个文件目录下有多个PDF, 如何根据文件名一个清单&#xff0c;一次性查找多个PDF复制保存 如图所示下面有7个文件夹&#xff0c;每个文件夹里面有几百上千PDF文件 如何从上千个PDF文件中一次性快速找到我们要的文件呢 &#xff1f; 我们需要找到文件名是这样的PDF&#xff0…...

    2024/5/1 1:46:03
  2. 梯度消失和梯度爆炸的一些处理方法

    在这里是记录一下梯度消失或梯度爆炸的一些处理技巧。全当学习总结了如有错误还请留言&#xff0c;在此感激不尽。 权重和梯度的更新公式如下&#xff1a; w w − η ⋅ ∇ w w w - \eta \cdot \nabla w ww−η⋅∇w 个人通俗的理解梯度消失就是网络模型在反向求导的时候出…...

    2024/3/20 10:50:27
  3. idm线程越多越好吗 idm线程数多少合适 IDM百度云下载 IDM下载器如何修改线程数

    IDM&#xff08;Internet Download Manager&#xff09;是一款流行的网络下载器&#xff0c;它支持多线程下载&#xff0c;这意味着它可以同时建立多个连接来下载文件的不同部分&#xff0c;从而提高下载速度。我们在使用IDM的时候总是有很多疑问&#xff0c;今天我们学习IDM线…...

    2024/4/30 3:46:07
  4. 【嵌入式开发 Linux 常用命令系列 4.3 -- git add 不 add untracked file】

    请阅读【嵌入式开发学习必备专栏 】 文章目录 git add 不add untracked file git add 不add untracked file 如果你想要Git在执行git add .时不添加未跟踪的文件&#xff08;untracked files&#xff09;&#xff0c;你可以使用以下命令&#xff1a; git add -u这个命令只会加…...

    2024/4/30 3:18:10
  5. 17、Lua 文件 I-O

    Lua 文件 I/O Lua 文件 I/O简单模式完全模式 Lua 文件 I/O LuaI/O 库用于读取和处理文件。分为简单模式&#xff08;和C一样&#xff09;、完全模式。 简单模式&#xff08;simple model&#xff09;拥有一个当前输入文件和一个当前输出文件&#xff0c;并且提供针对这些文件…...

    2024/4/30 2:48:21
  6. 【外汇早评】美通胀数据走低,美元调整

    原标题:【外汇早评】美通胀数据走低,美元调整昨日美国方面公布了新一期的核心PCE物价指数数据,同比增长1.6%,低于前值和预期值的1.7%,距离美联储的通胀目标2%继续走低,通胀压力较低,且此前美国一季度GDP初值中的消费部分下滑明显,因此市场对美联储后续更可能降息的政策…...

    2024/4/29 23:16:47
  7. 【原油贵金属周评】原油多头拥挤,价格调整

    原标题:【原油贵金属周评】原油多头拥挤,价格调整本周国际劳动节,我们喜迎四天假期,但是整个金融市场确实流动性充沛,大事频发,各个商品波动剧烈。美国方面,在本周四凌晨公布5月份的利率决议和新闻发布会,维持联邦基金利率在2.25%-2.50%不变,符合市场预期。同时美联储…...

    2024/4/30 18:14:14
  8. 【外汇周评】靓丽非农不及疲软通胀影响

    原标题:【外汇周评】靓丽非农不及疲软通胀影响在刚结束的周五,美国方面公布了新一期的非农就业数据,大幅好于前值和预期,新增就业重新回到20万以上。具体数据: 美国4月非农就业人口变动 26.3万人,预期 19万人,前值 19.6万人。 美国4月失业率 3.6%,预期 3.8%,前值 3…...

    2024/4/29 2:29:43
  9. 【原油贵金属早评】库存继续增加,油价收跌

    原标题:【原油贵金属早评】库存继续增加,油价收跌周三清晨公布美国当周API原油库存数据,上周原油库存增加281万桶至4.692亿桶,增幅超过预期的74.4万桶。且有消息人士称,沙特阿美据悉将于6月向亚洲炼油厂额外出售更多原油,印度炼油商预计将每日获得至多20万桶的额外原油供…...

    2024/4/30 18:21:48
  10. 【外汇早评】日本央行会议纪要不改日元强势

    原标题:【外汇早评】日本央行会议纪要不改日元强势近两日日元大幅走强与近期市场风险情绪上升,避险资金回流日元有关,也与前一段时间的美日贸易谈判给日本缓冲期,日本方面对汇率问题也避免继续贬值有关。虽然今日早间日本央行公布的利率会议纪要仍然是支持宽松政策,但这符…...

    2024/4/27 17:58:04
  11. 【原油贵金属早评】欧佩克稳定市场,填补伊朗问题的影响

    原标题:【原油贵金属早评】欧佩克稳定市场,填补伊朗问题的影响近日伊朗局势升温,导致市场担忧影响原油供给,油价试图反弹。此时OPEC表态稳定市场。据消息人士透露,沙特6月石油出口料将低于700万桶/日,沙特已经收到石油消费国提出的6月份扩大出口的“适度要求”,沙特将满…...

    2024/4/27 14:22:49
  12. 【外汇早评】美欲与伊朗重谈协议

    原标题:【外汇早评】美欲与伊朗重谈协议美国对伊朗的制裁遭到伊朗的抗议,昨日伊朗方面提出将部分退出伊核协议。而此行为又遭到欧洲方面对伊朗的谴责和警告,伊朗外长昨日回应称,欧洲国家履行它们的义务,伊核协议就能保证存续。据传闻伊朗的导弹已经对准了以色列和美国的航…...

    2024/4/28 1:28:33
  13. 【原油贵金属早评】波动率飙升,市场情绪动荡

    原标题:【原油贵金属早评】波动率飙升,市场情绪动荡因中美贸易谈判不安情绪影响,金融市场各资产品种出现明显的波动。随着美国与中方开启第十一轮谈判之际,美国按照既定计划向中国2000亿商品征收25%的关税,市场情绪有所平复,已经开始接受这一事实。虽然波动率-恐慌指数VI…...

    2024/4/30 9:43:09
  14. 【原油贵金属周评】伊朗局势升温,黄金多头跃跃欲试

    原标题:【原油贵金属周评】伊朗局势升温,黄金多头跃跃欲试美国和伊朗的局势继续升温,市场风险情绪上升,避险黄金有向上突破阻力的迹象。原油方面稍显平稳,近期美国和OPEC加大供给及市场需求回落的影响,伊朗局势并未推升油价走强。近期中美贸易谈判摩擦再度升级,美国对中…...

    2024/4/27 17:59:30
  15. 【原油贵金属早评】市场情绪继续恶化,黄金上破

    原标题:【原油贵金属早评】市场情绪继续恶化,黄金上破周初中国针对于美国加征关税的进行的反制措施引发市场情绪的大幅波动,人民币汇率出现大幅的贬值动能,金融市场受到非常明显的冲击。尤其是波动率起来之后,对于股市的表现尤其不安。隔夜美国股市出现明显的下行走势,这…...

    2024/4/25 18:39:16
  16. 【外汇早评】美伊僵持,风险情绪继续升温

    原标题:【外汇早评】美伊僵持,风险情绪继续升温昨日沙特两艘油轮再次发生爆炸事件,导致波斯湾局势进一步恶化,市场担忧美伊可能会出现摩擦生火,避险品种获得支撑,黄金和日元大幅走强。美指受中美贸易问题影响而在低位震荡。继5月12日,四艘商船在阿联酋领海附近的阿曼湾、…...

    2024/4/28 1:34:08
  17. 【原油贵金属早评】贸易冲突导致需求低迷,油价弱势

    原标题:【原油贵金属早评】贸易冲突导致需求低迷,油价弱势近日虽然伊朗局势升温,中东地区几起油船被袭击事件影响,但油价并未走高,而是出于调整结构中。由于市场预期局势失控的可能性较低,而中美贸易问题导致的全球经济衰退风险更大,需求会持续低迷,因此油价调整压力较…...

    2024/4/26 19:03:37
  18. 氧生福地 玩美北湖(上)——为时光守候两千年

    原标题:氧生福地 玩美北湖(上)——为时光守候两千年一次说走就走的旅行,只有一张高铁票的距离~ 所以,湖南郴州,我来了~ 从广州南站出发,一个半小时就到达郴州西站了。在动车上,同时改票的南风兄和我居然被分到了一个车厢,所以一路非常愉快地聊了过来。 挺好,最起…...

    2024/4/29 20:46:55
  19. 氧生福地 玩美北湖(中)——永春梯田里的美与鲜

    原标题:氧生福地 玩美北湖(中)——永春梯田里的美与鲜一觉醒来,因为大家太爱“美”照,在柳毅山庄去寻找龙女而错过了早餐时间。近十点,向导坏坏还是带着饥肠辘辘的我们去吃郴州最富有盛名的“鱼头粉”。说这是“十二分推荐”,到郴州必吃的美食之一。 哇塞!那个味美香甜…...

    2024/4/30 22:21:04
  20. 氧生福地 玩美北湖(下)——奔跑吧骚年!

    原标题:氧生福地 玩美北湖(下)——奔跑吧骚年!让我们红尘做伴 活得潇潇洒洒 策马奔腾共享人世繁华 对酒当歌唱出心中喜悦 轰轰烈烈把握青春年华 让我们红尘做伴 活得潇潇洒洒 策马奔腾共享人世繁华 对酒当歌唱出心中喜悦 轰轰烈烈把握青春年华 啊……啊……啊 两…...

    2024/4/26 23:04:58
  21. 扒开伪装医用面膜,翻六倍价格宰客,小姐姐注意了!

    原标题:扒开伪装医用面膜,翻六倍价格宰客,小姐姐注意了!扒开伪装医用面膜,翻六倍价格宰客!当行业里的某一品项火爆了,就会有很多商家蹭热度,装逼忽悠,最近火爆朋友圈的医用面膜,被沾上了污点,到底怎么回事呢? “比普通面膜安全、效果好!痘痘、痘印、敏感肌都能用…...

    2024/4/27 23:24:42
  22. 「发现」铁皮石斛仙草之神奇功效用于医用面膜

    原标题:「发现」铁皮石斛仙草之神奇功效用于医用面膜丽彦妆铁皮石斛医用面膜|石斛多糖无菌修护补水贴19大优势: 1、铁皮石斛:自唐宋以来,一直被列为皇室贡品,铁皮石斛生于海拔1600米的悬崖峭壁之上,繁殖力差,产量极低,所以古代仅供皇室、贵族享用 2、铁皮石斛自古民间…...

    2024/4/28 5:48:52
  23. 丽彦妆\医用面膜\冷敷贴轻奢医学护肤引导者

    原标题:丽彦妆\医用面膜\冷敷贴轻奢医学护肤引导者【公司简介】 广州华彬企业隶属香港华彬集团有限公司,专注美业21年,其旗下品牌: 「圣茵美」私密荷尔蒙抗衰,产后修复 「圣仪轩」私密荷尔蒙抗衰,产后修复 「花茵莳」私密荷尔蒙抗衰,产后修复 「丽彦妆」专注医学护…...

    2024/4/30 9:42:22
  24. 广州械字号面膜生产厂家OEM/ODM4项须知!

    原标题:广州械字号面膜生产厂家OEM/ODM4项须知!广州械字号面膜生产厂家OEM/ODM流程及注意事项解读: 械字号医用面膜,其实在我国并没有严格的定义,通常我们说的医美面膜指的应该是一种「医用敷料」,也就是说,医用面膜其实算作「医疗器械」的一种,又称「医用冷敷贴」。 …...

    2024/4/30 9:43:22
  25. 械字号医用眼膜缓解用眼过度到底有无作用?

    原标题:械字号医用眼膜缓解用眼过度到底有无作用?医用眼膜/械字号眼膜/医用冷敷眼贴 凝胶层为亲水高分子材料,含70%以上的水分。体表皮肤温度传导到本产品的凝胶层,热量被凝胶内水分子吸收,通过水分的蒸发带走大量的热量,可迅速地降低体表皮肤局部温度,减轻局部皮肤的灼…...

    2024/4/30 9:42:49
  26. 配置失败还原请勿关闭计算机,电脑开机屏幕上面显示,配置失败还原更改 请勿关闭计算机 开不了机 这个问题怎么办...

    解析如下&#xff1a;1、长按电脑电源键直至关机&#xff0c;然后再按一次电源健重启电脑&#xff0c;按F8健进入安全模式2、安全模式下进入Windows系统桌面后&#xff0c;按住“winR”打开运行窗口&#xff0c;输入“services.msc”打开服务设置3、在服务界面&#xff0c;选中…...

    2022/11/19 21:17:18
  27. 错误使用 reshape要执行 RESHAPE,请勿更改元素数目。

    %读入6幅图像&#xff08;每一幅图像的大小是564*564&#xff09; f1 imread(WashingtonDC_Band1_564.tif); subplot(3,2,1),imshow(f1); f2 imread(WashingtonDC_Band2_564.tif); subplot(3,2,2),imshow(f2); f3 imread(WashingtonDC_Band3_564.tif); subplot(3,2,3),imsho…...

    2022/11/19 21:17:16
  28. 配置 已完成 请勿关闭计算机,win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机...

    win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机”问题的解决方法在win7系统关机时如果有升级系统的或者其他需要会直接进入一个 等待界面&#xff0c;在等待界面中我们需要等待操作结束才能关机&#xff0c;虽然这比较麻烦&#xff0c;但是对系统进行配置和升级…...

    2022/11/19 21:17:15
  29. 台式电脑显示配置100%请勿关闭计算机,“准备配置windows 请勿关闭计算机”的解决方法...

    有不少用户在重装Win7系统或更新系统后会遇到“准备配置windows&#xff0c;请勿关闭计算机”的提示&#xff0c;要过很久才能进入系统&#xff0c;有的用户甚至几个小时也无法进入&#xff0c;下面就教大家这个问题的解决方法。第一种方法&#xff1a;我们首先在左下角的“开始…...

    2022/11/19 21:17:14
  30. win7 正在配置 请勿关闭计算机,怎么办Win7开机显示正在配置Windows Update请勿关机...

    置信有很多用户都跟小编一样遇到过这样的问题&#xff0c;电脑时发现开机屏幕显现“正在配置Windows Update&#xff0c;请勿关机”(如下图所示)&#xff0c;而且还需求等大约5分钟才干进入系统。这是怎样回事呢&#xff1f;一切都是正常操作的&#xff0c;为什么开时机呈现“正…...

    2022/11/19 21:17:13
  31. 准备配置windows 请勿关闭计算机 蓝屏,Win7开机总是出现提示“配置Windows请勿关机”...

    Win7系统开机启动时总是出现“配置Windows请勿关机”的提示&#xff0c;没过几秒后电脑自动重启&#xff0c;每次开机都这样无法进入系统&#xff0c;此时碰到这种现象的用户就可以使用以下5种方法解决问题。方法一&#xff1a;开机按下F8&#xff0c;在出现的Windows高级启动选…...

    2022/11/19 21:17:12
  32. 准备windows请勿关闭计算机要多久,windows10系统提示正在准备windows请勿关闭计算机怎么办...

    有不少windows10系统用户反映说碰到这样一个情况&#xff0c;就是电脑提示正在准备windows请勿关闭计算机&#xff0c;碰到这样的问题该怎么解决呢&#xff0c;现在小编就给大家分享一下windows10系统提示正在准备windows请勿关闭计算机的具体第一种方法&#xff1a;1、2、依次…...

    2022/11/19 21:17:11
  33. 配置 已完成 请勿关闭计算机,win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机”的解决方法...

    今天和大家分享一下win7系统重装了Win7旗舰版系统后&#xff0c;每次关机的时候桌面上都会显示一个“配置Windows Update的界面&#xff0c;提示请勿关闭计算机”&#xff0c;每次停留好几分钟才能正常关机&#xff0c;导致什么情况引起的呢&#xff1f;出现配置Windows Update…...

    2022/11/19 21:17:10
  34. 电脑桌面一直是清理请关闭计算机,windows7一直卡在清理 请勿关闭计算机-win7清理请勿关机,win7配置更新35%不动...

    只能是等着&#xff0c;别无他法。说是卡着如果你看硬盘灯应该在读写。如果从 Win 10 无法正常回滚&#xff0c;只能是考虑备份数据后重装系统了。解决来方案一&#xff1a;管理员运行cmd&#xff1a;net stop WuAuServcd %windir%ren SoftwareDistribution SDoldnet start WuA…...

    2022/11/19 21:17:09
  35. 计算机配置更新不起,电脑提示“配置Windows Update请勿关闭计算机”怎么办?

    原标题&#xff1a;电脑提示“配置Windows Update请勿关闭计算机”怎么办&#xff1f;win7系统中在开机与关闭的时候总是显示“配置windows update请勿关闭计算机”相信有不少朋友都曾遇到过一次两次还能忍但经常遇到就叫人感到心烦了遇到这种问题怎么办呢&#xff1f;一般的方…...

    2022/11/19 21:17:08
  36. 计算机正在配置无法关机,关机提示 windows7 正在配置windows 请勿关闭计算机 ,然后等了一晚上也没有关掉。现在电脑无法正常关机...

    关机提示 windows7 正在配置windows 请勿关闭计算机 &#xff0c;然后等了一晚上也没有关掉。现在电脑无法正常关机以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容&#xff0c;让我们赶快一起来看一下吧&#xff01;关机提示 windows7 正在配…...

    2022/11/19 21:17:05
  37. 钉钉提示请勿通过开发者调试模式_钉钉请勿通过开发者调试模式是真的吗好不好用...

    钉钉请勿通过开发者调试模式是真的吗好不好用 更新时间:2020-04-20 22:24:19 浏览次数:729次 区域: 南阳 > 卧龙 列举网提醒您:为保障您的权益,请不要提前支付任何费用! 虚拟位置外设器!!轨迹模拟&虚拟位置外设神器 专业用于:钉钉,外勤365,红圈通,企业微信和…...

    2022/11/19 21:17:05
  38. 配置失败还原请勿关闭计算机怎么办,win7系统出现“配置windows update失败 还原更改 请勿关闭计算机”,长时间没反应,无法进入系统的解决方案...

    前几天班里有位学生电脑(windows 7系统)出问题了&#xff0c;具体表现是开机时一直停留在“配置windows update失败 还原更改 请勿关闭计算机”这个界面&#xff0c;长时间没反应&#xff0c;无法进入系统。这个问题原来帮其他同学也解决过&#xff0c;网上搜了不少资料&#x…...

    2022/11/19 21:17:04
  39. 一个电脑无法关闭计算机你应该怎么办,电脑显示“清理请勿关闭计算机”怎么办?...

    本文为你提供了3个有效解决电脑显示“清理请勿关闭计算机”问题的方法&#xff0c;并在最后教给你1种保护系统安全的好方法&#xff0c;一起来看看&#xff01;电脑出现“清理请勿关闭计算机”在Windows 7(SP1)和Windows Server 2008 R2 SP1中&#xff0c;添加了1个新功能在“磁…...

    2022/11/19 21:17:03
  40. 请勿关闭计算机还原更改要多久,电脑显示:配置windows更新失败,正在还原更改,请勿关闭计算机怎么办...

    许多用户在长期不使用电脑的时候&#xff0c;开启电脑发现电脑显示&#xff1a;配置windows更新失败&#xff0c;正在还原更改&#xff0c;请勿关闭计算机。。.这要怎么办呢&#xff1f;下面小编就带着大家一起看看吧&#xff01;如果能够正常进入系统&#xff0c;建议您暂时移…...

    2022/11/19 21:17:02
  41. 还原更改请勿关闭计算机 要多久,配置windows update失败 还原更改 请勿关闭计算机,电脑开机后一直显示以...

    配置windows update失败 还原更改 请勿关闭计算机&#xff0c;电脑开机后一直显示以以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容&#xff0c;让我们赶快一起来看一下吧&#xff01;配置windows update失败 还原更改 请勿关闭计算机&#x…...

    2022/11/19 21:17:01
  42. 电脑配置中请勿关闭计算机怎么办,准备配置windows请勿关闭计算机一直显示怎么办【图解】...

    不知道大家有没有遇到过这样的一个问题&#xff0c;就是我们的win7系统在关机的时候&#xff0c;总是喜欢显示“准备配置windows&#xff0c;请勿关机”这样的一个页面&#xff0c;没有什么大碍&#xff0c;但是如果一直等着的话就要两个小时甚至更久都关不了机&#xff0c;非常…...

    2022/11/19 21:17:00
  43. 正在准备配置请勿关闭计算机,正在准备配置windows请勿关闭计算机时间长了解决教程...

    当电脑出现正在准备配置windows请勿关闭计算机时&#xff0c;一般是您正对windows进行升级&#xff0c;但是这个要是长时间没有反应&#xff0c;我们不能再傻等下去了。可能是电脑出了别的问题了&#xff0c;来看看教程的说法。正在准备配置windows请勿关闭计算机时间长了方法一…...

    2022/11/19 21:16:59
  44. 配置失败还原请勿关闭计算机,配置Windows Update失败,还原更改请勿关闭计算机...

    我们使用电脑的过程中有时会遇到这种情况&#xff0c;当我们打开电脑之后&#xff0c;发现一直停留在一个界面&#xff1a;“配置Windows Update失败&#xff0c;还原更改请勿关闭计算机”&#xff0c;等了许久还是无法进入系统。如果我们遇到此类问题应该如何解决呢&#xff0…...

    2022/11/19 21:16:58
  45. 如何在iPhone上关闭“请勿打扰”

    Apple’s “Do Not Disturb While Driving” is a potentially lifesaving iPhone feature, but it doesn’t always turn on automatically at the appropriate time. For example, you might be a passenger in a moving car, but your iPhone may think you’re the one dri…...

    2022/11/19 21:16:57