![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Kafka
文章平均质量分 91
weixin_42073629
这个作者很懒,什么都没留下…
展开
-
一文搞懂Kafka
1、为什么有消息系统 解耦合 异步处理 例如电商平台,秒杀活动。一般流程会分为:1:风险控制、2:库存锁定、3:生成订单、4:短信通知、5:更新数据 通过消息系统将秒杀活动业务拆分开,将不急需处理的业务放在后面慢慢处理;流程改为:1:风险控制、2:库存锁定、3:消息系统、4:生成订单、5:短信通知、6:更新数据 流量的控制 1. 网关在接受到请求后,就把请求放入到消息队列里面 2.后端的服务从消息队列里面获取到请求,完成后续的秒杀处理流程。然后再给用户返回结果。优点:控.原创 2021-09-05 14:51:50 · 232 阅读 · 0 评论 -
Kafka在Windows环境下的搭建
1. 安装JDK1.1 安装文件:http://www.oracle.com/technetwork/java/javase/downloads/jre8-downloads-2133155.html下载Server JRE. 1.2 安装完成后需要添加以下的环境变量(右键点击“我的电脑” -> "高级系统设置" -> "环境变量"):JAVA_HOME: C:\Java\jdk1.8.0_31(这个是默认安装路径,如果安装过程中更改了安装目录,把更改后的路径填上就行了)PATH:.原创 2021-06-06 11:23:29 · 200 阅读 · 0 评论 -
Kafka Producer 参数设置详解
主要介绍下kafka的producer配置参数,只取了其中的一部分常用的,后续的有时间,也会补充一些,更多的详细参数,可以参考《kafka官网》,参数的内容,主要是选取《apache kafka实战》书中的一些讲解和官网相互参看bootstrap.servers该参数指定了一组host:port 对,用于创建向 Kafka broker 服务器的连接,比如:kl:9092,k2:9092,k3:9092。如果 Kafka 集群中机器数很多,那么只需要指定部分 broker 即可,不需要列出所有的原创 2021-05-04 14:49:33 · 2862 阅读 · 1 评论 -
揭秘-滴滴Logi-KafkaManager的用户体验设计
项目地址:didi/Logi-KafkaManager: 一站式Apache Kafka集群指标监控与运维管控平台原创 2021-05-04 14:48:29 · 139 阅读 · 0 评论 -
Kafka的灵魂伴侣Logi-KafkaManger(三)之运维管控--集群列表
运维管控运维管控这个菜单栏目下面主要是供运维人员来管理所有集群的;接入集群Kafka的灵魂伴侣Logi-KafkaManger一之集群的接入及相关概念讲解物理集群列表列出了所有物理集群,点击一个物理集群进去看详细信息;如果没有信息请检查一下是否正确开启了JMX; ==> JMX-连接失败问题解决集群概览实时流量指标说明因为我发送和消费过消息, 为了不让之前的数据干扰; 我们重新把Broker重启一下,Jmx的数据就会清0了; 历史数据清楚就去数据库中把原创 2021-05-04 11:20:25 · 340 阅读 · 0 评论 -
Spring-Kafka深入探秘--SpringBoot 整合 Kafka
kafka是一个消息队列产品,基于Topic partitions的设计,能达到非常高的消息发送处理性能。Spring创建了一个项目Spring-kafka,封装了Apache 的Kafka-client,用于在Spring项目里快速集成kafka。除了简单的收发消息外,Spring-kafka还提供了很多高级功能,下面我们就来一一探秘这些用法。简单集成引入依赖<dependency><groupId>org.springframework.kafka&l...原创 2021-05-04 11:08:06 · 474 阅读 · 1 评论 -
Kafka为什么要抛弃ZooKeeper
在上个月 30 号, confluent 发布了一篇文章,文章上说在 Kafka 2.8 版本上将支持内部的 quorum 服务来替换 ZooKeeper 的工作。ZooKeeper 的作用ZooKeeper 是一个开源的分布式协调服务框架,你也可以认为它是一个可以保证一致性的分布式(小量)存储系统。特别适合存储一些公共的配置信息、集群的一些元数据等等。它有持久节点和临时节点,而临时节点这个玩意再配合 Watcher 机制就很有用。当创建临时节点的客户端与 ZooKeeper 断连.原创 2021-05-03 22:42:23 · 2157 阅读 · 5 评论 -
大白话带你认识 Kafka
一、Kafka 基础消息系统的作用应该大部份小伙伴都清楚,用机油装箱举个例子所以消息系统就是如上图我们所说的仓库,能在中间过程作为缓存,并且实现解耦合的作用。引入一个场景,我们知道中国移动,中国联通,中国电信的日志处理,是交给外包去做大数据分析的,假设现在它们的日志都交给了你做的系统去做用户画像分析。按照刚刚前面提到的消息系统的作用,我们知道了消息系统其实就是一个模拟缓存,且仅仅是起到了缓存的作用而并不是真正的缓存,数据仍然是存储在磁盘上面而不是内存。1.Topic 主题原创 2021-04-27 19:58:51 · 101 阅读 · 0 评论 -
Kafka 从基础到高级(附图讲解)
1、为什么有消息系统 解耦合 异步处理 例如电商平台,秒杀活动。一般流程会分为:1:风险控制、2:库存锁定、3:生成订单、4:短信通知、5:更新数据通过消息系统将秒杀活动业务拆分开,将不急需处理的业务放在后面慢慢处理;流程改为:1:风险控制、2:库存锁定、3:消息系统、4:生成订单、5:短信通知、6:更新数据 流量的控制 3.1 网关在接受到请求后,就把请求放入到消息队列里面 3.2 后端的服务从消息队列里面获取到请求,完成后续的秒杀处理流程。然后再给用户返回结果。优点:控制了流.原创 2021-04-27 19:42:11 · 3449 阅读 · 10 评论 -
Kafka的灵魂伴侣Logi-KafkaManger(二)kafka针对Topic粒度的配额管理(限流)
申请配额(限流)不了解kafak配额管理机制的可以先了解一下 kafka中的配额管理(限速)机制默认创建完Topic之后是没有设置配额信息的,而且我们都知道Kafka的配额(限流)只支持三种粒度:user + clientiduserclientid如果kafka集群没有开启身份认证,则只能使用clientid方式来进行限流。但是KaFkaManager是可以支持到Topic粒度的; 假如你对kafka配额机制原理非常清楚的话,那么你就很容易理解KM是怎么实现的了:一言以蔽之,原创 2021-04-24 19:01:39 · 214 阅读 · 0 评论 -
Kafka的灵魂伴侣Logi-KafkaManger(一)
接下来第一步肯定就是接入现有kafka集群了; 那么本篇文章就来讲解一下 集群的接入;接入集群参数描述参数 描述 数据中心 默认国内; 这个也只是一个划分数据的维度,这个应该是滴滴内部有多个数据中心的缘故 集群类型 无效,后续会去掉 安全协议 TODO JMX认证 JMX的认证鉴权, 如果kafka没有开认证的话就不需要填写 3、解决方法 —— 认证的JMX JMX端口记得要开起来,不然很多数据会没有 JMX-连接失败问题解决接入成功之后可以原创 2021-04-24 18:55:51 · 161 阅读 · 0 评论 -
Kafka 为什么速度那么快?
Kafka的消息是保存或缓存在磁盘上的,一般认为在磁盘上读写数据是会降低性能的,因为寻址会比较消耗时间,但是实际上,Kafka的特性之一就是高吞吐率。即使是普通的服务器,Kafka也可以轻松支持每秒百万级的写入请求,超过了大部分的消息中间件,这种特性也使得Kafka在日志处理等海量数据场景广泛应用。针对Kafka的基准测试可以参考,Apache Kafka基准测试:每秒写入2百万(在三台廉价机器上)下面从数据写入和读取两方面分析,为什么Kafka速度这么快。一、写入数据Kafka会把收到转载 2021-03-07 14:20:35 · 83 阅读 · 0 评论 -
Kafka Streams开发入门(10)
1. 背景介绍了Kafka Streams的时间窗口以及Tumbling Window的实例。这一篇我们利用Kafka Streams中的KTable概念来实时计算一组电影的平均分数。2.功能演示说明这篇文章中我们会创建一个Kafka topic来表示电影打分事件,然后我们编写一个程序实时统计当前电影的平均分数。我们依然使用ProtocolBuffer对消息事件进行序列化。事件的JSON格式如下所示:{"movie_id": 362,"rating": 9.6}{"movie_id..原创 2020-11-15 10:45:13 · 228 阅读 · 0 评论 -
Kafka Streams开发入门(9)
1. 背景介绍了如何利用Kafka Streams实时统计某年最卖座和最不卖座的电影票房。主要的方法是通过Streams提供的aggregate方法实现了max/min算子。今天我为大家带来时间窗口函数的使用方法。在Kafka Streams中,时间窗口有三类:固定时间窗口(Tumbling Window)、滑动时间窗口(Sliding Window)和会话窗口(Session Window)。我们不详细讨论这三类窗口的定义与区别,而是直接使用一个项目来说明如何利用Tumbling Window定期统计原创 2020-11-15 10:44:56 · 294 阅读 · 0 评论 -
Kafka Streams开发入门(8)
1. 背景介绍了如何利用Kafka Streams对实时消息流进行汇总求和。本篇将设定一个场景:我们引入一个Kafka topic表示电影票的销售,同时我们基于Kafka Streams编写一个程序来计算每年最卖座的电影票房以及最不卖座的电影票房。2. 功能演示说明假设我们要执行票房统计的topic消息格式如下:{"title":"Avengers: Endgame","release_year":2019,"total_sales":856980506}消息是JSON格式,title是原创 2020-11-14 21:45:17 · 205 阅读 · 0 评论 -
Kafka Streams开发入门(7)
1. 背景介绍了如何利用Kafka Streams找出并过滤掉实时流中那些重复的消息。本篇将介绍如何对消息中特定数据进行求和汇总。2. 功能演示说明假设我们要执行汇总求和的事件格式如下:{"title":"Die Hard","sale_ts":"2019-07-18T10:00:00Z","ticket_total_value":12}这条事件表示的是电影票的售出信息,其中ticket_total_value是票价。现在我们想要为每部电影实时统计各自的票房。3. 配置项目首先创原创 2020-11-14 21:31:17 · 93 阅读 · 0 评论 -
Kafka Streams开发入门(6)
1. 背景介绍了merge算子的作用。这一篇介绍如何从一个Kafka Streams中过滤掉那些重复出现的事件,只留下那些唯一的事件。2. 功能演示说明假设我们要执行去重逻辑的事件格式如下:{"ip":"10.0.0.1","url":"https://docs.confluent.io/current/tutorials/examples/kubernetes/gke-base/docs/index.html","timestamp":"2019-09-16T14:53:43+00:00"原创 2020-11-14 21:19:42 · 203 阅读 · 0 评论 -
Kafka Streams开发入门(5)
1. 背景演示了split操作算子的用法。今天展示一下split的逆操作:merge。Merge算子的作用是把多股实时消息流合并到一个单一的流中。2. 功能演示说明假设我们有多个Kafka topic,每个topic表示某类特定音乐类型的歌曲,比如有摇滚乐、古典乐等。本例中我们演示如何使用Kafka Streams将这些歌曲合并到一个Kafka topic中。我们依然使用Protocol Buffer对歌曲进行序列化和反序列化。你大概可以认为歌曲可以用下面的格式来表示:{"artist"..原创 2020-11-14 21:13:44 · 243 阅读 · 0 评论 -
Kafka Streams开发入门(4)
背景演示了filter操作算子的用法。今天展示一下如何根据不同的条件谓词(Predicate)将一个消息流实时地进行分流,划分成多个新的消息流,即所谓的流split。有的时候我们想要对消息流中的不同消息类型进行不同的处理逻辑,此时流split功能就显得非常的实用。演示功能说明今天依然使用表征一个电影的消息类型,格式如下:{"name":"Meryl Streep","title":"The Iron Lady","genre":"drama"}{"name":"Will ...原创 2020-11-14 21:07:08 · 212 阅读 · 0 评论 -
Kafka Streams开发入门(3)
背景我们介绍了Kafka Streams中的消息过滤操作filter,今天我们展示一个对消息进行转换Key的操作,依然是结合一个具体的实例展开介绍。所谓转换Key是指对流处理中每条消息的Key进行变换操作,以方便后面进行各种groupByKey操作。演示功能说明本篇演示selectKey的用法,即根据指定的Key选择逻辑对每条消息的Key进行变换操作。今天使用的输入topic消息格式如下:ID | First Name | Last Name | Phone Number比如这样:..原创 2020-11-14 20:49:12 · 139 阅读 · 0 评论 -
Kafka Streams开发入门(2)
背景上一篇我们介绍了Kafka Streams中的消息转换操作map,今天我们给出另一个经典的转换操作filter的用法。依然是结合一个具体的实例展开介绍。演示功能说明本篇演示filter用法,即根据给定的过滤条件或逻辑实时对每条消息进行过滤处理。今天使用的输入topic消息格式如下:{"name": "George R. R. Martin", "title": "A Song of Ice and Fire"}{"name": "C.S. Lewis", "title": "Th..原创 2020-11-14 20:31:24 · 125 阅读 · 0 评论 -
Kafka Streams开发入门(1)
背景最近发现Confluent公司在官网上发布了Kafka Streams教程,共有10节课,每节课给出了Kafka Streams的一个功能介绍。这个系列教程对于我们了解Kafka Streams还是很有帮助的。为什么要了解Kafka Streams?其实我一直觉得国内对于Flink有点过于迷恋了。大厂使用Flink尚自合理,毕竟数据量大且需要整套的集群管理调度监控功能。但一般的中小公司业务简单体量小,何必要费时费力地搭建一整套Flink集群。有很多简单的流处理业务场景使用Kafka Streams.原创 2020-11-14 20:17:41 · 348 阅读 · 0 评论 -
Kafka生产者-向Kafka中写入数据详解
(1)生产者概览(1)不同的应用场景对消息有不同的需求,即是否允许消息丢失、重复、延迟以及吞吐量的要求。不同场景对Kafka生产者的API使用和配置会有直接的影响。例子1:信用卡事务处理系统,不允许消息的重复和丢失,延迟最大500ms,对吞吐量要求较高。例子2:保存网站的点击信息,允许少量的消息丢失和重复,延迟可以稍高(用户点击链接可以马上加载出页面即可),吞吐量取决于用户使用网站的频度。(2)Kafka发送消息的主要步骤消息格式:每个消息是一个ProducerRecord对象,必须指定原创 2020-11-14 18:50:24 · 1591 阅读 · 0 评论 -
Kafka消费者-从Kafka读取数据详解
(1)Customer和Customer Group(1)两种常用的消息模型队列模型(queuing)和发布-订阅模型(publish-subscribe)。队列的处理方式是一组消费者从服务器读取消息,一条消息只由其中的一个消费者来处理。发布-订阅模型中,消息被广播给所有的消费者,接收到消息的消费者都可以处理此消息。(2)Kafka的消费者和消费者组Kafka为这两种模型提供了单一的消费者抽象模型:消费者组 (consumer group)。 消费者用一个消费者组名标记自己。 一个.原创 2020-11-14 18:08:12 · 719 阅读 · 0 评论 -
kafka常用命令详解
集群安装信息如下:kafka-broker-list:node21:9092,node22:9092,node23:9092zookeeper.connect-list: node21:2181,node22:2181,node23:21811.启动zookeeper集群所有zookeeper节点都需要执行zkServer.sh start2.启动Kafka集群服务所有Kafka节点都需要执行bin/kafka-server-start.sh config/serv...原创 2020-11-09 18:30:34 · 1117 阅读 · 0 评论 -
Kafka消费组(consumer group)详解
一直以来都想写一点关于kafka consumer的东西,特别是关于新版consumer的中文资料很少。最近Kafka社区邮件组已经在讨论是否应该正式使用新版本consumer替换老版本,笔者也觉得时机成熟了,于是写下这篇文章讨论并总结一下新版本consumer的些许设计理念,希望能把consumer这点事说清楚,从而对广大使用者有所帮助。在开始之前,我想花一点时间先来明确一些概念和术语,这会极大地方便我们下面的讨论。另外请原谅这文章有点长,毕竟要讨论的东西很多,虽然已然删除了很多太过细节的东西。.转载 2020-11-09 05:33:54 · 1965 阅读 · 0 评论 -
Kafka集成SparkStreaming
Spark Streaming + Kafka集成指南Kafka项目在版本0.8和0.10之间引入了一个新的消费者API,因此有两个独立的相应Spark Streaming包可用。请选择正确的包,请注意,0.8集成与后来的0.9和0.10代理兼容,但0.10集成与早期的代理不兼容。注意:从Spark 2.3.0开始,不推荐使用Kafka 0.8支持。Spark Streaming从Kafka接收数据,转换为spark streaming中的数据结构Dstream。数据接收方式有两种 :1 使用.原创 2020-10-03 02:14:55 · 512 阅读 · 1 评论 -
Kafka集群管理工具kafka-manager的安装使用
一.kafka-manager简介 kafka-manager是目前最受欢迎的kafka集群管理工具,最早由雅虎开源,用户可以在Web界面执行一些简单的集群管理操作。具体支持以下内容:管理多个集群 轻松检查群集状态(主题,消费者,偏移,代理,副本分发,分区分发) 运行首选副本选举 使用选项生成分区分配以选择要使用的代理 运行分区重新分配(基于生成的分配) 使用可选主题配置创建主题(0.8.1.1具有与0.8.2+不同的配置) 删除主题(仅支持0.8.2+并记住在代理配置中设置d..原创 2020-10-03 02:03:06 · 289 阅读 · 0 评论 -
kafka可视化客户端工具(Kafka Tool)的基本使用
1、下载下载地址:http://www.kafkatool.com/download.html2、安装根据不同的系统下载对应的版本,我这里kafka版本是1.1.0,下载kafka tool 2.0.1。双击下载完成的exe图标,傻瓜式完成安装。3、简单使用kafka环境搭建请参考:CentOS7.5搭建Kafka2.11-1.1.0集群1)连接kafka打开kafka tool安装目录,点击exe文件提示设置kafka集群连接点击确定,设置.原创 2020-10-03 01:53:21 · 629 阅读 · 1 评论 -
Kafka(五)Kafka的API操作和拦截器
一 kafka的API操作1.1环境准备1)在eclipse中创建一个java工程2)在工程的根目录创建一个lib文件夹3)解压kafka安装包,将安装包libs目录下的jar包拷贝到工程的lib目录下,并build path。4)启动zk和kafka集群,在kafka集群中打开一个消费者[root@node21 kafka]$ bin/kafka-console-consumer.sh --zookeepernode21:2181,node22:2181,node23:218..原创 2020-10-03 01:50:41 · 373 阅读 · 0 评论 -
Kafka(四)Kafka在zookeeper中的存储
一 Kafka在zookeeper中存储结构图二 分析2.1 topic注册信息/brokers/topics/[topic] :存储某个topic的partitions所有分配信息[zk: localhost:2181(CONNECTED) 1] get /brokers/topics/firstTopicSchema:{ "version": "版本编号目前固定为数字1", "partitions": {"partitionId编号": [ 同步副本组broker.原创 2020-10-03 01:34:58 · 250 阅读 · 0 评论 -
Kafka(三)Kafka的高可用与生产消费过程解析
一 Kafka HA设计解析1.1 为何需要Replication 在Kafka在0.8以前的版本中,是没有Replication的,一旦某一个Broker宕机,则其上所有的Partition数据都不可被消费,这与Kafka数据持久性及Delivery Guarantee的设计目标相悖。同时Producer都不能再将数据存于这些Partition中。 如果Producer使用同步模式则Producer会在尝试重新发送message.send.max.retries(默认值为3)次后抛出Ex.原创 2020-10-03 01:24:58 · 186 阅读 · 0 评论 -
Kafka(二)CentOS7.5搭建Kafka2.11-1.1.0集群与简单测试
一、下载下载地址:http://kafka.apache.org/downloads.html 我这里下载的是Scala 2.11对应的kafka_2.11-1.1.0.tgz二、kafka安装集群规划IP 节点名称 Kafka Zookeeper Jdk Scala 192.168.100.21 node21 Kafka Zookeeper Jdk Scala 192.168.100.22 node2...原创 2020-10-03 01:09:44 · 460 阅读 · 0 评论 -
Kafka(一)Kafka的简介与架构
一、简介1.1 概述Kafka是最初由Linkedin公司开发,是一个分布式、分区的、多副本的、多订阅者,基于zookeeper协调的分布式日志系统(也可以当做MQ系统),常见可以用于web/nginx日志、访问日志,消息服务等等,Linkedin于2010年贡献给了Apache基金会并成为顶级开源项目。主要应用场景是:日志收集系统和消息系统。Kafka主要设计目标如下:以时间复杂度为O(1)的方式提供消息持久化能力,即使对TB级以上数据也能保证常数时间的访问性能。 高吞吐率。即使在非原创 2020-10-03 00:41:35 · 231 阅读 · 0 评论 -
深入理解Kafka副本机制
一、Kafka集群Kafka 使用 Zookeeper 来维护集群成员 (brokers) 的信息。每个 broker 都有一个唯一标识broker.id,用于标识自己在集群中的身份,可以在配置文件server.properties中进行配置,或者由程序自动生成。下面是 Kafka brokers 集群自动创建的过程:每一个 broker 启动的时候,它会在 Zookeeper 的/brokers/ids路径下创建一个临时节点,并将自己的broker.id写入,从而将自身注册到集群;...原创 2020-09-21 23:24:30 · 800 阅读 · 0 评论 -
Kafka消费者详解
一、消费者和消费者群组在 Kafka 中,消费者通常是消费者群组的一部分,多个消费者群组共同读取同一个主题时,彼此之间互不影响。Kafka 之所以要引入消费者群组这个概念是因为 Kafka 消费者经常会做一些高延迟的操作,比如把数据写到数据库或 HDFS ,或者进行耗时的计算,在这些情况下,单个消费者无法跟上数据生成的速度。此时可以增加更多的消费者,让它们分担负载,分别处理部分分区的消息,这就是 Kafka 实现横向伸缩的主要手段。需要注意的是:同一个分区只能被同一个消费者群组里面的一个消费者读原创 2020-09-21 23:19:22 · 1136 阅读 · 1 评论 -
Kafka生产者详解
一、生产者发送消息的过程首先介绍一下 Kafka 生产者发送消息的过程:Kafka 会将发送消息包装为 ProducerRecord 对象, ProducerRecord 对象包含了目标主题和要发送的内容,同时还可以指定键和分区。在发送 ProducerRecord 对象前,生产者会先把键和值对象序列化成字节数组,这样它们才能够在网络上传输。 接下来,数据被传给分区器。如果之前已经在 ProducerRecord 对象里指定了分区,那么分区器就不会再做任何事情。如果没有指定分区 ,那么分区器会根据原创 2020-09-21 23:11:52 · 205 阅读 · 0 评论 -
基于 ZooKeeper 搭建 Kafka 高可用集群
一、Zookeeper集群搭建为保证集群高可用,Zookeeper 集群的节点数最好是奇数,最少有三个节点,所以这里搭建一个三个节点的集群。1.1 下载 & 解压下载对应版本 Zookeeper,这里我下载的版本3.4.14。官方下载地址:https://archive.apache.org/dist/zookeeper/# 下载wget https://archive.apache.org/dist/zookeeper/zookeeper-3.4.14/zookeeper-3.原创 2020-08-11 23:43:10 · 418 阅读 · 0 评论 -
Spring Cloud 事件总线 Kafka 入门
1. 概述友情提示:在开始本文之前,胖友需要对 Kafka 进行简单的学习。可以阅读《Kafka 极简入门》文章,将第一二小节看完,在本机搭建一个 Kafka 服务。Kafka 是一种高吞吐量的分布式发布订阅消息系统,她有如下特性:通过 O(1) 的磁盘数据结构提供消息的持久化,这种结构对于即使数以TB的消息存储也能够保持长时间的稳定性能。 高吞吐量:即使是非常普通的硬件kafka也可以支持每秒数十万的消息。 支持通过 Kafka 服务器和消费机集群来分区消息。本文我们来学习Spr.原创 2020-08-09 13:16:27 · 904 阅读 · 0 评论 -
Spring Cloud 消息队列 Kafka 入门
1. 概述本文我们来学习Spring Cloud Stream Kafka组件,基于Spring Cloud Stream的编程模型,接入Kafka作为消息中间件,实现消息驱动的微服务。FROM《分布式发布订阅消息系统 Kafka》Kafka 是一种高吞吐量的分布式发布订阅消息系统,她有如下特性:通过 O(1) 的磁盘数据结构提供消息的持久化,这种结构对于即使数以TB的消息存储也能够保持长时间的稳定性能。 高吞吐量:即使是非常普通的硬件kafka也可以支持每秒数十万的消息。...原创 2020-08-09 10:23:33 · 1558 阅读 · 1 评论