kafka(持续更新中,,,,,,)

kafka简介

1. 什么是 Apache Kafka?

        我们的第一个问题是什么是 Apache Kafka? Kafka 是一个开源的分布式事件流平台。我们稍后将进一步讨论这些的含义。 Kafka 旨在处理大量数据,并可扩展到各种情况。

2. Kafka 中的事件流式处理

        如前所述,Kafka 是一个事件流平台。事件流式处理的含义因上下文而异。在 Kafka 中,它意味着从各种来源获取信息,可靠地存储该数据,然后将其提供给任何需要访问的用户或系统。

3. 常见用途

        Kafka 有很多用途,可以适应许多不同的场景。一种是电子商务,允许不同的系统在实时时间范围内监控销售数据。 Kafka 可以很好地处理各种类型的订单跟踪,维护各种订单的状态,例如新订单、处理和包装以及装运和交付。 在订单跟踪的基础上,Kafka 经常被拼车或送餐服务使用,添加地理位置信息,并为所有司机、乘客和客户提供实时状态信息。 Kafka 适用于传感器数据网络,例如密切监控仓库中的温度数据或来自汽车(甚至过山车)安全系统的各种信息。 虽然肯定还有更多选择,但 Kafka 在网络安全领域发现了许多用途,包括垃圾邮件跟踪、补丁监控等

4. Kafka 组件

        Topics: Kafka 中的第一个组件是主题。主题是存储在 Kafka 中的常见消息类型。我们稍后将详细讨论主题的工作原理,但请将其视为一个记事本,Kafka 在其中存储它收到的事件或消息。Kafka 系统中可以有任意数量的主题。

        Producers(writers): 下一个组件是 Kafka 生产者,它将事件写入各种主题。制作者可以写入单个或多个主题。

        Consumers(readers):最后一个主要组件是 Kafka 使用者,它从主题中读取信息。可以有任意数量的使用者。

5. Kafka 命令

        当我们第一次开始使用 Kafka 时,并不知道命令上的所有可用选项。如果想要查看有关可用于命令的文档的更多信息。

$ bin/kafka-topics.sh --help
This tool helps to create, delete, describe, or change a topic.
Option                                   Description
------                                   -----------
--alter                                  Alter the number of partitions and
                                           replica assignment. Update the
                                           configuration of an existing topic
                                           via --alter is no longer supported
                                           here (the kafka-configs CLI supports
                                           altering topic configs with a --
                                           bootstrap-server option).
--at-min-isr-partitions                  if set when describing topics, only
                                           show partitions whose isr count is
                                           equal to the configured minimum.
--bootstrap-server <String: server to    REQUIRED: The Kafka server to connect
  connect to>                              to.
--command-config <String: command        Property file containing configs to be
  config property file>                    passed to Admin Client. This is used
                                           only with --bootstrap-server option
                                           for describing and altering broker
                                           configs.
--config <String: name=value>            A topic configuration override for the
                                           topic being created or altered. The
                                           following is a list of valid
                                           configurations:
                                                cleanup.policy
                                                compression.type
                                                delete.retention.ms
                                                file.delete.delay.ms
                                                flush.messages
                                                flush.ms
                                                follower.replication.throttled.
                                           replicas
                                                index.interval.bytes
                                                leader.replication.throttled.replicas
                                                local.retention.bytes
                                                local.retention.ms
                                                max.compaction.lag.ms
                                                max.message.bytes
                                                message.downconversion.enable
                                                message.format.version
                                                message.timestamp.after.max.ms
                                                message.timestamp.before.max.ms
                                                message.timestamp.difference.max.ms
                                                message.timestamp.type
                                                min.cleanable.dirty.ratio
                                                min.compaction.lag.ms
                                                min.insync.replicas
                                                preallocate
                                                remote.storage.enable
                                                retention.bytes
                                                retention.ms
                                                segment.bytes
                                                segment.index.bytes
                                                segment.jitter.ms
                                                segment.ms
                                                unclean.leader.election.enable
                                         See the Kafka documentation for full
                                           details on the topic configs. It is
                                           supported only in combination with --
                                           create if --bootstrap-server option
                                           is used (the kafka-configs CLI
                                           supports altering topic configs with
                                           a --bootstrap-server option).
--create                                 Create a new topic.
--delete                                 Delete a topic
--delete-config <String: name>           A topic configuration override to be
                                           removed for an existing topic (see
                                           the list of configurations under the
                                           --config option). Not supported with
                                           the --bootstrap-server option.
--describe                               List details for the given topics.
--exclude-internal                       exclude internal topics when running
                                           list or describe command. The
                                           internal topics will be listed by
                                           default
--help                                   Print usage information.
--if-exists                              if set when altering or deleting or
                                           describing topics, the action will
                                           only execute if the topic exists.
--if-not-exists                          if set when creating topics, the
                                           action will only execute if the
                                           topic does not already exist.
--list                                   List all available topics.
--partitions <Integer: # of partitions>  The number of partitions for the topic
                                           being created or altered (WARNING:
                                           If partitions are increased for a
                                           topic that has a key, the partition
                                           logic or ordering of the messages
                                           will be affected). If not supplied
                                           for create, defaults to the cluster
                                           default.
--replica-assignment <String:            A list of manual partition-to-broker
  broker_id_for_part1_replica1 :           assignments for the topic being
  broker_id_for_part1_replica2 ,           created or altered.
  broker_id_for_part2_replica1 :
  broker_id_for_part2_replica2 , ...>
--replication-factor <Integer:           The replication factor for each
  replication factor>                      partition in the topic being
                                           created. If not supplied, defaults
                                           to the cluster default.
--topic <String: topic>                  The topic to create, alter, describe
                                           or delete. It also accepts a regular
                                           expression, except for --create
                                           option. Put topic name in double
                                           quotes and use the '\' prefix to
                                           escape regular expression symbols; e.
                                           g. "test\.topic".
--topic-id <String: topic-id>            The topic-id to describe.This is used
                                           only with --bootstrap-server option
                                           for describing topics.
--topics-with-overrides                  if set when describing topics, only
                                           show topics that have overridden
                                           configs
--unavailable-partitions                 if set when describing topics, only
                                           show partitions whose leader is not
                                           available
--under-min-isr-partitions               if set when describing topics, only
                                           show partitions whose isr count is
                                           less than the configured minimum.
--under-replicated-partitions            if set when describing topics, only
                                           show under replicated partitions
--version                                Display Kafka version.
$

6. 查看Kafka主题列表

$ bin/kafka-topics.sh --bootstrap-server localhost:9092 --list
cleaned-devices
compromised-systems
known-exploits
phishing-sites

7. 什么是生产者?

        生产者(有时称为发布者)是向 Kafka 主题写入消息的组件。 从生产者发送的消息存储在 Kafka 中供以后使用。 我们稍后将解释其工作原理,但目标是尽可能长时间地保留写入 Kafka 的数据。 许多生产者可以一次与 Kafka 系统进行通信。每个生产者都可以根据需要写入单个或多个主题。

8. 生产者的类型

        有许多不同种类的生产商可供选择,其功能根据需要而有所不同。 最基本的生产者类型是命令行生产者。这包含在 Kafka 软件安装中,称为 kafka-console-producer.sh。我们很快就会介绍它,它是我们将在本课程中使用的主要生产者。 除了命令行工具之外,API 库还可用于 Python、Java 和许多其他语言。 除了命令行和 API 生产者之外,还有另一个选项称为 Kafka Connect。Connect 旨在与现有系统(例如关系数据库)进行交互,并自动在它们之间传输数据。我们不会在这里介绍 Kafka Connect,但它是在某些情况下实现 Kafka 的强大选项。

9. kafka-console-producer.sh

        让我们看一下 kafka-console-producer 工具。它通常与其他 Kafka 工具一起位于 Kafka bin 文件夹中。这就是 bin/kafka-console-producer.sh。 有几个命令行选项可用,包括两个必需的选项。这意味着在使用此命令时,它们必须始终存在。这些是在命令行本身上输入的。第一个是 bootstrap-server 选项。这指定了要与哪个 Kafka 系统通信,并默认为 localhost-9092。 另一个必需的选项是 topic 选项,该选项需要写入主题,例如主题 phishing-sites。 默认情况下,这将打开一个连接,你可以在其中键入消息。在这种情况下,你可以编写任何消息,然后使用 Ctrl-C 退出该工具。你还可以使用管道符号将任何消息数据直接传递到 kafka-console-producer 工具中。

10. 示例

        首先,使用 bin/kafka-console-producer.sh --topic phishing-sites --bootstrap-server localhost:9092 主题测试来说明交互式示例。运行后,我们可以输入如图所示的消息,并使用 ctrl-c 退出。注意:交互式意味着程序在继续之前等待我们的输入。 一个非交互式示例非常相似,但使用 echo 命令写出一条消息并将其直接传递给 kafka-console-producer。这将自动将消息写入 Kafka,而无需使用 ctrl-c 退出。

$ bin/kafka-console-producer.sh --topic phishing-sites --bootstrap-server localhost:9092
>这是第一个消息
>这是第二个消息

11. 什么是消费者?

        消费者是 Kafka 平台的读者部分,有时也称为订阅者。 使用者阅读存储在 Kafka 中的消息。我们稍后将介绍其工作原理,但目标是确保在需要时可以读取存储在 Kafka 中的数据。 一次可以有许多使用者与 Kafka 系统进行通信。另请注意,每个使用者都可以根据需要从单个或多个主题中阅读。

12. 消费者的类型

        就像 Kafka 生产者一样,有许多不同类型的消费者可用,它们的功能取决于需求。 我们有“kafka-console-consumer.sh”工具,这是我们在本课程中将使用的主要消费者工具。 与生产者一样,也有可用于 Python、Java 和许多其他语言的 API 库。Kafka Connect 中还有一些组件允许用户从 Kafka 主题读取数据。

13. kafka-console-consumer.sh

        我们来看一下 kafka-console-consumer 工具。它通常与其他 Kafka 工具一起位于 Kafka bin 文件夹中。这就是 bin/kafka-console-consumer.sh。 两个必需的选项 topic 和 bootstrap-server 与 console-producer 相同。 你还可以使用 Ctrl-C 在使用者中退出交互模式。在这种情况下,你可以阅读任何消息,然后使用 Ctrl-C 退出该工具。

14. 可选参数

        有两个可选参数可用。 首先是--from-beginning。这告诉 Kafka 发送所有消息,无论是否有任何消息可用或已被阅读。 第二个是--max-messages <number>选项,后跟一个数字。这用于在自动退出之前读取最多数量的消息。

15. 交互式示例

       让我们看几个例子。首先,使用

$ bin/kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic phishing-sites --from-beginning

来说明交互式示例。运行后,我们可以输入如图所示的消息,并使用 ctrl-c 退出。

16. 非交互式示例

        一个非交互式示例与此类似,它具有 max-messages 选项。在这种情况下,它仅返回前两个事件,然后自动退出。 注意:如果主题中没有足够的消息来满足 max-messages 要求,它将等待退出,直到收到 x 条消息。

$ bin/kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic phishing-sites --from-beginning --max-messages 2

17. Kafka 服务器

        首先,让我们看一下 Kafka 的主要组件:服务器和客户端。 在 Kafka 中,服务器是由一台或多台计算机组成的集群,用于处理存储数据并管理与 Kafka 客户端的通信。它还可以处理与其他系统的集成,包括数据库、日志文件等。 我们已经了解了 Kafka 客户端,它们通过 Kafka 消费者读取数据或通过生产者写入数据。Kafka 客户端还可以在本地处理数据,然后将该信息存储在其他地方或返回到 Kafka 本身。

        Kafka 服务器的主要任务是充当 Kafka 代理。代理就像股票经纪人一样,处理消费者和生产者之间的沟通。服务器还处理数据存储。 生产者编写的数据通过主题进行存储和组织。我们已经在前面看到了一些主题,我们将在后面更深入地介绍如何使用它们。现在,知道主题是分区的,这意味着它们存储在单独的部分中。单个消息根据事件 ID(如 customerid 或 locationid)存储在给定分区中。每条消息都将按照写入主题的顺序进行检索。

图片来源于 https://kafka.apache.org/intro

18. 分区和复制

        Kafka 是一个容错系统,这意味着如果集群中的系统脱机,其他系统可以提供数据。 对于每个 Kafka 集群,都有一个复制因子。复制因子减去 1 等于集群在不丢失任何数据的情况下可以承受的系统故障数。 最大复制因子等于群集中的服务器数量。 容错是通过在集群内复制主题分区来处理的。

19. 示例

        让我们看一个具有 3 个代理的示例集群。 此集群定义了三个主题,并设置了 2 倍复制,这意味着集群中每个分区都有两个副本。在数据故障之前,我们可能会丢失一个系统。 代理 1 具有主题 1 和主题 2 的副本。代理 2 具有主题 2 和主题 3 的副本。代理 3 具有主题 1 和主题 3 的副本。因此,每个主题在集群上的 2 个代理之间共享,提供 2 倍复制。 请注意,数据的实际布局会有所不同,但这说明了基本的布局方案。

19.1 次失败的示例

        考虑一下如果代理 2 失败会发生什么情况。当复制因子为 2 时,2 减 1 意味着我们可以处理 1 个故障系统。在这种情况下,我们没问题,因为每个主题仍然存在于集群中。

19.2 次失败的示例

        现在,让我们考虑失去两个代理。使用 2 倍的复制因子,我们超过了最大故障数,这意味着我们将丢失数据。 主题 2 在集群中不再可用,但请注意,主题 1 和 3 仍然可用,因此即使在这种大规模降级的状态下,某些数据仍然可以使用。

20.创建和管理 Kafka 集群

        现在让我们看看如何使用 Apache ZooKeeper 创建和管理 Kafka 集群。

20.1 什么是ZooKeeper?

        我们的第一个问题是,什么是 ZooKeeper?ZooKeeper 是一个软件框架,用于管理信息和提供运行分布式系统所需的服务。我们稍后将详细讨论其中的一些任务。 ZooKeeper 主要由开发人员用于创建分布式应用程序,但用户确实会与之交互以管理这些应用程序。 使用 ZooKeeper 的一些应用程序示例包括 Kafka、分布式处理框架 Hadoop 和图形数据库 Neo4j。

20.2 ZooKeeper是做什么的?

        让我们谈谈 ZooKeeper 的实际作用。它提供运行分布式应用程序所需的各种服务。 这包括处理任何配置信息和系统命名以防止冲突。它还提供了跨系统同步的功能,例如确定哪些系统可用、它们应该何时启动、服务如何到达它们等等。ZooKeeper 还提供一组系统进行通信所需的任何其他基本服务。 需要注意的是,ZooKeeper 被设计为一个框架,因此每个单独的分布式应用程序都不需要实现这些服务的自定义版本。例如,想想电源插头或水管喷嘴如何实施通用标准,而不是每个都有自己的标准。这使得配置、实施和交互更加容易。

20.3 ZooKeeper 和 Kafka

        由于这是一门 Kafka 课程,我们不打算深入探讨 ZooKeeper 的工作原理,而是需要了解有关 ZooKeeper 使用 Kafka 的知识。Kafka 主要使用 ZooKeeper 进行集群管理。有一个较新的集群管理工具可用,称为 KRaft,先不打算在这块介绍它。 Kafka 使用两个主要配置文件进行服务器/集群设置 - config/zookeeper.properties 和 config/server.properties 文件。下面图片可以看到 zookeeper.properties 文件的一部分。zookeeper.properties 文件处理基本 zookeeper 设置所需的信息,包括存储 ZooKeeper 数据的位置以及要运行的网络端口。

20.4 配置/服务器属性

        主要的 Kafka 服务器配置文件是 config/server.properties 文件。它包含的信息比 zookeeper.properties 文件多得多,并定义了特定于 Kafka 安装的信息。 这包括有关 Kafka 代理的详细信息、任何网络配置、存储事件的位置以及基本主题配置(包括任何复制详细信息)等信息。

21. 启动 Kafka 集群

        Kafka 服务器分两步启动。

(1)第一种 :

bin/zookeeper-server-start.sh config/zookeeper.properties

 这将启动基本的 zookeeper 服务器和在 zookeeper.properties 文件中找到的配置详细信息。有大量的输出,会根据你的系统而有所不同。

(2)第二种:

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

它将启动 server.properties 文件中定义的实际 Kafka 服务。

22. 停止 Kafka 集群

        为了停止 Kafka 集群,我们使用 kafka-server-stop.sh 和 zookeeper-server-stop.sh 做相反的事情。请注意,由于 Kafka 必须完全关闭任何打开的连接,并且由于它使用 ZooKeeper 服务,因此关闭顺序是相反的。

23. Kafka 主题

        我们前面已经研究过它们,下面让我们更深入地探讨如何创建和管理 Kafka 主题。

23.1 什么是主题?

        Kafka 主题是事件的逻辑分组,其中每个事件或消息都引用相同类型的事物,例如订单、下载、病毒检测等。 主题类似于关系数据库中的表,其中每个事件都具有相似的结构和含义。 主题有时称为事件日志,写入日志的消息是不可变的。这意味着可以读取或创建主题中的消息,但不能修改它们。 需要注意的是,通常情况下,消息只会根据时长被删除,但除此之外,如果有足够的存储空间,则可以在将来的任何时候阅读该消息。

23.2 创建主题

        在 Kafka 中创建主题有多种方法,但我们主要使用 kafka-topics.sh 脚本。我们之前曾将其与 --list 选项一起使用,但我们将引入几个新选项。如果我们使用带有主题名称和 --create 选项的 --topic,这将在 Kafka 服务器上创建一个新主题。请注意,我们仍然需要包含 --bootstrap-server 选项。 例如,如果我们运行 create 命令,系统将返回文本“Created topic orders”。

23.3 其他变化

        我们应该介绍一些关于 kafka-topics.sh --create 的可选参数。第一个是 --replication-factor,它定义了主题的复制因子。请记住,复制因子指定了 Kafka 集群中存在的主题副本数。另一个选项是 --partitions,它指定要将主题拆分为的分区数。这是一种性能优化,但允许 Kafka 处理更高的吞吐量。 下面是一个基于我们早期命令构建的示例,添加了值为 3 的复制因子和分区选项。命令输出相同。

23.4 --描述

        我们将与 kafka-topics.sh 一起使用的另一个选项是 --describe 参数。这为我们提供了有关 Kafka 主题配置的详细信息。 例如,如果我们使用 describe 命令,我们将看到显示主题名称、id、分区计数和复制因子的输出。然后,它将在 configs 部分下以一行的形式返回有关主题中每个分区的信息。你的输出可能会有所不同。

23.5 删除主题

        我们将对主题执行的最后一个操作是使用 --delete 选项删除它们。这将从 Kafka 服务器/集群中删除该主题,请务必注意,它还会删除该主题中的所有消息。因此,必须谨慎使用此命令。 对于我们的示例,我们可以使用 delete 命令。请注意,如果命令成功,它不会返回任何输出,而只是返回到提示符。

24. Kafka 故障排除

让我们来谈谈一些工具和技术,以处理我们在使用 Kafka 时可能遇到的各种问题。

24.1 “有帮助”的行为

        你会遇到的一个常见问题是,Kafka 试图在其默认配置中为用户提供帮助。不幸的是,这有时反而会导致问题。其中一个问题是,默认情况下,在生产者向主题写入主题之前,主题不需要存在。 这听起来可能令人困惑,但它实际上可能会导致重大问题。想一想,如果生产者拼错了主题名称,例如没有 e 而不是 orders 的 ordrs,会发生什么情况。这些事件将被写入错误的主题,消费者将看不到这些事件

24.2 “有帮助”的例子

        这是一个具体的例子。如果我们查看主题列表,我们将看到一个订单主题。现在,让我们使用 echo 和 kafka 控制台生产者发送一条消息,但请注意,该主题被拼写错误为 ordrs。 我们的消息是写好的,但是如果我们然后检查我们的主题列表,我们会看到我们现在有两个主题 - 没有 e 的 orders 和 ordrs。

24.3 连接问题

        另一类问题是连接问题。Kafka 是一种网络服务,即使在单节点安装中也是如此。任何网络问题都可能导致 Kafka 通信出现问题。 识别这些问题的最佳方法是查看命令的输出以确定潜在问题。例如,让我们考虑尝试使用 kafka-topics.sh 脚本从安装中获取主题列表,但收到以下错误,显示无法建立连接。 有一些可能的问题,我们可以通过各种方式进行检查。首先是使用 ps 之类的东西检查服务是否正在运行,并检查是否存在 kafka 进程。我们还可以使用 netstat 在 9092 上查找侦听端口。你以前可能没有见过这些命令。PS 用于获取系统上运行的所有进程的列表。Netstat 提供网络连接列表。Grep 是一个基本的文本搜索工具。 请注意,我们还应该检查任何防火墙问题,并验证我们的 Kafka 安装是否具有正确的 IP 端口组合。你可能需要联系 IT 管理员来验证这些详细信息。

24.4 其他常见问题

        在使用 Kafka 时,你可能会遇到其他常见问题,尤其是命令行工具。如果你需要较旧的消息,请确保使用 --from-beginning 选项,否则只会收到自使用者启动以来主题中的新消息。如果需要读取特定的消息数量,也可以使用 --max-messages,否则消费者脚本将永远不会退出。 无论你使用什么工具,请记住包含 --bootstrap-server 选项。请注意,这是所有程序都与之通信以运行 Kafka 命令的初始 Kafka 服务器。 大多数错误消息都非常清晰,会为你指出可能的解决方案。 最后,这些工具还有一个 --help 选项,用于在使用这些脚本时获取更多详细信息。

  • 27
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
### 回答1: 是什么? ZooKeeper在Kafka起到了仲裁者的作用,它维护了Kafka集群的元数据信息,并协调了Kafka代理之间的通信。它还确保了Kafka的高可用性和数据一致性。总的来说,ZooKeeper是Kafka集群的重要组成部分,对于Kafka的正常运行起到了关键作用。 ### 回答2: Zookeeper在Kafka扮演着重要的角色。首先,Zookeeper负责管理和协调Kafka集群的整个生命周期。它负责跟踪和记录Kafka集群的所有节点信息,包括broker节点以及它们的状态、健康状况和Leader信息等。通过监控和维护这些信息,Zookeeper确保了Kafka集群的高可用性和容错性。 其次,Zookeeper还负责Kafka消费者的组管理。当应用程序有多个消费者需要订阅同一个topic时,Zookeeper会为它们分配一个唯一的消费者组,并管理这些消费者的偏移量(offset)。消费者可以通过Zookeeper来查询和更新自己的偏移量,这样就可以实现消费者的位置跟踪和负载均衡等功能。 此外,Zookeeper还提供了Kafka集群的leader选举功能。当Kafka集群的某个broker节点的Leader发生故障或失效时,Zookeeper会通过选举算法来选择新的Leader,并通知集群的其他节点。这样,Kafka集群可以在出现故障时快速地恢复和重新平衡。 最后,Zookeeper还提供了Kafka集群的配置管理功能。它可以存储和管理Kafka的配置信息,并对外提供读写操作接口。Kafka可以通过与Zookeeper的交互来获取最新的配置信息,并实时更新配置。 综上所述,Zookeeper在Kafka的作用可以总结为集群管理、消费者组管理、偏移量管理、leader选举以及配置管理等功能。它提供了Kafka集群的稳定性、高性能和可靠性。 ### 回答3: zookeeper在kafka扮演着重要的角色。首先,zookeeper是kafka集群的管理和协调组件。它负责管理和存储kafka集群的元数据,包括主题的配置、分区信息、消费者组信息等。通过zookeeper,kafka集群的各个节点可以共享和获取这些元数据,以便协调它们的工作。 其次,zookeeper还负责监测kafka集群的状态,并及时发现和恢复故障。它会持续地监控kafka节点的心跳信息,一旦发现某个节点宕机或失去连接,zookeeper会触发重新分配该节点上的分区,确保集群的可用性和数据的持久性。同时,zookeeper也会监控kafka的整体状态,如节点个数、分区个数等,提供给kafka控制器进行自动化的管理和调整。 此外,zookeeper还是kafka消费者组的协调者。它会维护消费者组的注册信息和消费位移信息,并将其存储在zookeeper的节点。消费者组的成员通过zookeeper来发现彼此,并协调消费位移的管理,以实现消费者在分布式环境的高效消费。 总之,zookeeper在kafka具有至关重要的作用。它管理和存储kafka的元数据,监测集群状态并处理故障,以及协调消费者组的成员和消费位移信息。没有zookeeper的支持,kafka集群的可靠性和灵活性都将大大降低。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

运行时异常

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值