自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

sunlen的专栏(编程技术探讨)

十年磨一剑,只等待出鞘的那一刻!!!

  • 博客(253)
  • 收藏
  • 关注

原创 Flink SQL填坑记3:两个kafka数据关联查询

在一个项目中,实时生成的统计数据需要关联另外一张表(并非维表),需要统计的数据表是Kafka数据,而需要关联的表,由于不是维度,不能按照主键查询,所以如果放在MySQL上,将存在严重的性能问题,这个时候我想到用将两张表的数据都生成为Kafka数据,然后进行Join操作。中途发现这种性能特别差,而且表变更会产生多条kakfa记录,导致计算越来越来,最后改成upsert-kafka,下面记录下处理过程。上面这种方法,可以对重复的数据,按照主键进行去重,大幅减少生成重复的数据。

2024-03-26 19:52:09 307 2

原创 Clickhouse填坑记4:Too many parts问题分析

ClickHouse按批生成文件,如果每一批的数量过小,那么就会产生大量的小文件,ClickHouse底层会自动会这些小文件进行merge动作,减小文件数量,但这个动作消耗大量的cpu。Clickhouse在进行大数据量同步时,感觉很爽,插入速度非常快,但是,在使用过程中却出现了几次“Too many parts”异常报错,搞得很痛苦,这里记录一下解决过程。同时,当小文件超过系统涉及的阈值,就会报“Too many parts”异常。通过分析cpu,发现在某些时刻,cpu使用率突然暴涨。

2024-02-27 19:54:31 296

原创 Flink SQL填坑记2:Flink和MySQL的Bigdata类型不同导致ClassCastException报错

最近在开发Flink SQL的时候,需要关联Kafka事实表和MySQL维表,得到的数据写入Phoenix表中,但是其中有个字段,Kafka表、MySQL表和Phoenix表都是BigData类型,但是在实现的时候却报“java.math.BigInteger cannot be cast to java.lang.Long”异常,从报错信息来看,是由于BigInteger 和Long的转换出现问题,下面详细讲解一下报错过程。

2023-12-18 19:57:22 811

原创 Flink Sql填坑记1:一次Flink sql性能优化经历

但是性能还是不行,这是我点击查询20个子任务的执行情况,以为发现实际上只有8个任务是真实执行的,其他任务都在空跑,通过一方检查,重要发现原先我设置的kafka topic,只设置了8个partition,导致最终只有8个任务执行。但是这种方式有个问题,就是每条数据过来,都需要需要到MySQL查询一次,由于这边的数据量非常大,可以想想,需要到MySQL查询维表的次数将非常频繁,另外,由于这边另外一张表是数据量也非常大,采用这种方式,必然会MySQL的性能造成非常大的冲击。

2023-03-14 20:43:14 529 1

原创 大数据智能分析(BI)平台设计4--SQL语句构造

根据维度信息、系统参数和字段信息,拼凑查询字段和group by字段,其中维度信息也需要提到系统参数和字段信息。根据维度信息、指标信息和数据集字段信息,构造要返回的数据字段配置List对数据集返回的sql语句,替换掉系统参数(以{{}}括起来的对象)和字段信息(以{}括起来的对象)根据过滤条件、系统参数和字段信息,拼凑where语句,其中需要替代系统参数和字段信息。根据数据集ID,获取数据集的配置,特别是对应的sql语句。根据数据集ID,获取数据集的字段信息。

2022-12-08 19:59:17 719

原创 大数据智能分析(BI)平台设计3--字段类型自动识别

一个数据集的查询结果,可以看做是一个个的字段,至于字段的类型,在设计时,可以通过一些正则表达式,预先判断字段的数据类型,从而提前设置好字段的类型,这样在配置的时候,就可以简化配置工作量。可以根据字段的名称,进行初步判断,一般以_id,_num等结尾的为数字;_time,_date结尾的为日期。下面是正则表达式是参考代码:

2022-12-06 19:52:02 575

原创 大数据智能分析(BI)平台设计2--数据集

数据集可以看做是一个数据的集合,它可以是一张数据表,也客户是一个sql语句查询出来的结果,也可以是Excel文件构成的数据。多个数据集可以进行联合查询,构成一个新的数据集。同一个数据集也可以进行聚合操作,形成一个新的数据集。一个数据集,往往包含下面3部分内容:一、数据集数据集需要有以下一些属性:二、字段字段需要有以下属性:三、表达式有些字段,不仅仅只是一个原始字段,而是一个sql表达式,这个时候就需要设置表达式了,对应的字段,可以用大括号括起来,比如说:DISTINCT_COUNT({卡号}),这里DIST

2022-12-06 19:48:18 938

原创 大数据智能分析(BI)平台设计1---基本概念

这里底层基于Phoenix和ClickHouse作为大数据数据库,构建大数据智能分析平台,底层通过元数据管理,构建数据集、字段、指标、维度等,上面通过图表配置、看板配置,通过拖拉拽快速构建报表。ETL数据抽取、转化、加载,基于Flink Sql构建流批一体的实时数据仓库。本设计会分为多个篇文章,讲解整个系统架构设计的细节。整个大数据智能分析平台,作为一个数据中台,对外提供各种API,与第三方应用集成。首先会介绍整个系统体系设计到的各个名词。

2022-08-24 20:05:02 1542

原创 Clickhouse填坑记3:Left Join改Right Join导致统计结果错误

最近遇到一个大坑,因为ClickHouse大表关联小表,如果大表放在右边,性能急速下降,甚至无法执行,我这边报的是“超过16G异常”,所以我自然而然的想到把大表放左边,然后把Left Join改成Right Join,这个逻辑在MySQL是正确的,没想到ClickHouse统计出来的结果居然差距巨大,踩了一个大坑。下面我就详细讲一下问题的情况。...

2022-08-02 20:10:28 679

原创 Clickhouse填坑记2:Join条件不支持大于、小于等非等式判断

最近遇到一个问题,ClickHouse中有一张表,里面有个用户(f_user)字段,每天都有统计数据,现在想取某一个的产生的新用户数据,因为用惯了MySQL,我很自然的想到同一张表做一个Join操作,然后前表的日期大于后表,where过滤条件中,后表的日期为null,这样就能取出数据,但最后发现ClickHouse并不支持这种操作,折腾了好久,最后终于搞定这个问题,这里详细描述一下过程。...

2022-07-27 20:26:02 2535 2

原创 Clickhouse填坑记1:语法区别

ClickHosue是一个越来越受欢迎的大数据数据库,语法跟MySql类似,使用比较简单,下面从我们的亲身经历,讲一讲ClickHouse的语法等,让你对是否使用这个数据库来代替MySQL有着更为深刻的印象。...

2022-07-19 20:04:28 1122

原创 BulkLoad方式从Hive往Phoenix加载海量数据

这边在初始化Phoenix表数据的时候,遇到一个难题,就是需要往Phoenix里面初始化30亿的数据,而采用普通方式往phoenix插入数据,执行实在太慢,而且对现网phoenix会造成压力,导致现网phoenix的正常服务出现问题。 实际在处理过程中,发现了很多坑,和走了很多弯路。 下面详细讲一下解决方法和实现代码。 先说一下我的原始数据,原始数据是保持在MySQL里面的,采用分库分表的方式存储,HIVE也保存了一份离线数据。 刚开始想把...

2021-12-30 20:11:07 1526

原创 Flink sql填坑记1:Task did not exit gracefully within 180 + seconds

这边在跑Flink Sql的时候,服务老是提示重启,查询后台报“Task did not exit gracefully within 180 + seconds”错误,经过排查,又没有发现太多异常信息,监控发现同时有服务后台文件句柄数增多的现象,下面详细讲一下发现的情况和解决方法。 错误信息如下:2021-12-22 14:55:20,696-[Cancellation Watchdog for Source: TableSourceScan(table=[[default_c...

2021-12-22 20:17:06 2865

原创 ElasticSearch填坑记1:_uid字段排序(fielddata特性),导致内存占用,不断GC,最后OOM

在某一天,我们的系统突然异常,大面积出现白屏,搜索页面点击后,响应非常慢,大量出现响应超过4秒的情况,异常高峰期平均查询时间达到10多秒,后台不断有ES服务宕机重启,GC告警频繁,经过一阵排查折腾,发现居然是简单的_uid字段排序导致的,下面就详细的讲一下。 我们的ES搜索收到一个小小的需求,原来我们的搜索,新的结果会被放到后面去,产品经理希望能够对搜索结果进行排序,按照创建时间倒序排序。 这里自然的相对用ES系统字段_uid进行倒序排序,因为这个字段是按照创建时间生成的...

2021-12-21 20:10:31 1657

原创 phoenix填坑记6:MutationState size of 512000 isbigger than max allowed size of 500000

在清空Phoenix表的时候,发现报异常信息:MutationState sizeof 512000 isbigger than max allowed size of 500000 上面这句话的意思,就是说删除的数据量超过50万,太大,不允许删除,而这边使用Phoenix表,目的就是存放大数据表,如果不能删除超过50万的数据,将导致使用极其不方便,这里就具体讲解解决方案。 之所以有这个报错,是因为我们采用了Phoenix的轻量级客户端queryserver,删除的操作...

2021-12-21 19:39:48 276

原创 phoenix填坑记5:Column reference ambiguous or duplicate names. columnName

在使用phoenix查询的时候,发现phoenix对group by嵌套查询支持并不是太好,当存在多重嵌套的时候,很容易出现异常,另外,也容易出现“ambiguous or duplicate names”这样的报错,下面详细讲解一下问题发生的情况,已经解决方法。 下面的具体的报错信息(示意错误信息,涉及业务的部分被隐藏)2021-10-27 10:57:08,598-{}-39678-[main]-com.test.dash.service.impl.TestDwbServic...

2021-12-20 20:06:36 695

原创 Phoenix填坑记4:为整10的倍数的数值会被显示成科学计数法

phoenix的写法对数据类型限制比较严格,对于字符串类型,需要使用to_number将字符串转换成数字,但是在使用过程中,发现一个很奇怪的现象,那就是以整10为倍数的数据,比如说100,就会被显示成科学计数法。 下面详细讲一下具体的问题。 首先,我的表在设计的时候,采用字符串来保存ID,但是另外一个表是采用BIGINT类型存储的,所有需要对该字段进行转换,转成数组,写法为:to_number(TRIM(f_test),'###0')。 这上面,'###0'...

2021-12-20 19:27:25 559

原创 Phoenix填坑记3:The ON DUPLICATE KEY clause may not be used when a table has a global index

我在使用phoenix插入数据是,使用了upsert ... on duplicate ...结构,但是在运行的时候报错,现在将错误情况同步出来。

2021-12-20 19:12:03 1371

原创 用线性回归算法求解撒谎城问题

今天遇到一个趣味题,说的是诚实城和撒谎城的问题,这个问题比较简单,稍微思考一下就能得出答案,但是常用思考并不能穷尽所有可行解,所有今天我将采用线性回归算法来求解这个问题。 问题是这样的: 从前有两座城,一座叫诚实城,一座叫撒谎城,在诚实城里生活的人永远只说真话,在撒谎城里生活的人永远只说假话。一天一位商人要去撒谎城做生意,来到岔路口,看到两个城的两个人,商人不知道哪个是撒谎城,也不知道他们是不是从自己城里出来的。只能对两个人问同一个问题。他该怎么问? 对...

2021-10-26 00:29:25 323

原创 新冠疫情期间和过后,腾讯公司应该怎么做来保持竞争优势

2020年开始的新冠疫情冲击着各个行业,对于腾讯公司还是也是这样,2021年腾讯又面临哪些新的挑战?如何处理?这里38页PPT,从各个层面分析腾讯的现状,并给出应对措施。此文章为研究文章,资料采用各个公开渠道获取到的信息,与腾讯公司内部无关。...

2021-05-04 21:59:52 1035

原创 互联网公司HRM问题研究与分析

序言人力资源问题一直都是企业管理的TOP问题之一,而相对互联网公司来说,人力资源问题又更加突出。本文选取了一部分的互联网公司,对其公司情况、组织架构、部门角色和职责、人力资源最关心的问题等等,进行细致的调查研究,并得出结论,并针对企业人力资源问题进行总结得出解决措施,并在企业实践落实,最终得到结论,可以说,这篇文章的含金量非常高,对于企业的人力资源治理、企业发展,特别是互联网公司,具体非常有益的指导性。第一章公司介绍和组织架构公司简介A公司截至目前,品牌已为超过 3 万家企业提供产..

2021-05-04 21:38:16 319

原创 Flink 任务远程调用Dubbo接口

在大数据中,Flink任务一般都不是基于Spring框架和Dubbo框架的,但很多业务系统采用Dubbo架构,当需要调用业务系统的接口获取数据时,就出现Flink调用Dubbo的情况了。 由于Flink架构的特殊性,按照普通的Java项目引入Dubbo架构是不行的,在本地调测可能没有问题,但一定部署到生产环境,一般都会报错。 这是因为Flink架构是分布式的,正常情况下,包含一个Client端,一个jobManager和多个TaskManager,每个TaskManager还包含...

2021-03-24 19:57:15 1403

原创 HBase填坑记2:Region无故损坏

HBase的Region损坏后果很严重,会导致整个HBase异常,数据不能用。修复Region需要花费时间,当出现大面积的Region损坏的时候,后果几乎是致命的。 这里会详细讲解我们在开发过程中发现的Region损坏情况和解决思路。 问题描述:我们在做大量数据写入的时候,突然发生Region Server重启,重启后,出现大量的Region损坏,下面是检查发现的问题。 通过分析,首先确认导致Region Server重启的原因,应该就是Full GC导致的,...

2021-01-16 14:23:05 703

原创 Hive填坑记1:win10下报The root scratch dir: /tmp/hive on HDFS should be writable

在windows环境下,跑Spark程序,报“tmp/hive”权限不对,用docs命令加上权限,又提示“ChangeFileModeByMask error”,网上没有一个正确的解决方案,几经折腾,最终搞定,经验分享给大家。 我在window10跑Spark离线任务,抛如下异常:Exception in thread "main" org.apache.spark.sql.AnalysisException: java.lang.RuntimeException: java.lan...

2021-01-16 14:18:41 659

原创 HBase填坑记1:报错WAL system stuck

系统报错:WAL system stuck,如下: 出现这种异常,基本可以确定是HDFS不可读写了,一般情况下是IO被打满,或者HDFS存储被打满。 我们检查了HDFS存储,果然发现HDFS存储使用率已经达到了95%。 进一步分析发现,我们当时在做扩容,而扩容后,HBase会自动做数据迁移,迁移的过程中,HBase会自动做major compact,而做major compact的时候,数据量会翻倍,导致HDFS存储使用率超了。...

2020-12-29 19:46:29 582

原创 Phoenix填坑记2:phoenix-5.0 在hbase2.0.1及以上版本,在使用索引时出错

截止到2020年12月,Phoenix最高只支持到Hbase2.0版本,并不支持更高的版本。而我们采用的是腾讯云HBase,使用的版本是2.2.0版本,我们在使用Phoenix-5.0版本时,发现系统报错,无法正常使用。其实Phoenix-5.0版本已经两年多没有更新了,而Hbase还在不断演进,越来越多的人使用Hbase2.0以上版本,这个问题会越来越突出,我们跟踪发现,只要做些简单处理,Phoenix-5.0就可以支持Hbase 2.2.0版本,运行非常稳定。外面是目前支持的版本,最多只支.

2020-12-29 19:43:25 1223 2

原创 Phoenix填坑记1:索引无故被disable

Phoenix是基于HBase的,而Phoenix的索引其实是HBase的二级索引,当Phoenix的索引处于disable状态时,整个Phoenix表是无法正常使用的,要将索引修复为enable状态,往往需要重建索引,这对应一些大表来说,往往需要花费几个小时是时间,那么这几个小时,系统基本上就处于不可用状态,这对应现网系统来说,往往是不可接受的。 其实Phoenix有3个隐藏参数,这些参数在官网文档没有体现,但实际上这3个参数非常重要,可以解决上面提到的问题。 闲话不说,先来讲...

2020-12-29 19:31:34 968 1

原创 西班牙出差见闻之三(普拉多博物馆)

普拉多博物馆,建于18世纪,位于西班牙马德里,普拉多博物馆(Prado)被认为是世界上最伟大的博物馆之一,亦是收藏西班牙绘画作品最全面、最权威的美术馆。这里将简单介绍博物馆里面的主要名画,因为博物馆禁止拍照,所以图片都是从网上搜索的,介绍也是汇集各种关于这些名画的介绍而成。镇馆之宝:《宫娥》作者:迭戈·委拉斯开兹《宫娥》这幅作品的中心人物是西班牙国王菲利普四世的小女儿玛格利特公主,她处于画面的中心位置,摆出端仪的姿态。左边的一个宫女跪下来,向她奉上一些茶点,但小公主全...

2020-12-05 14:25:14 17251

原创 西班牙出差见闻之二(人情风俗)

西班牙的马德里是一个高原,阳光比较强烈,我去的时候是12月初,所以阳光不算太大。不过在有阳光的天气,中午出去走一圈,走的时间稍微长一点,还是能感觉到阳光的威力。12月初的马德里,气温接近0度,风刮得挺大,如果中午或者下午出去晒晒太阳,确实很舒服。西班牙的作息很奇怪,一般下午两三点才开始吃中午饭,晚上9点后才吃晚餐,至于为什么有这种习惯,很多西班牙人都说不清楚。据说,西班牙的夏天日照很长,晚上9点后,才比较凉快,所以晚餐的时间比较晚。我刚去的时候,每天都饿着肚子,后来每餐都吃得很饱,才不至于饿...

2020-12-05 14:23:41 290

原创 西班牙出差见闻之一(出发)

先说说西班牙签证,我是在广州办的,办理的是商务签,只能办一个月的签证,一个月内必须回来。办理的时间大概是2周,不需要面签。首先是要邀请函,而且必须要原件,光从西班牙寄邀请函回来,就需要3~4个工作日;另外,需要预定机票、打印3个月的银行卡流水(加盖银行公章),护照原件和复印件、派遣函、行程表、保险、填写申请表(字体要全大写),这些全部准备好后,是公司帮我办理,之后就在护照上加个签证。出差前,一定要办张全球通的卡,这样出国后,如果有紧急事情,才可以大概电话。另外,全球通收短信是不用钱的,发短信也...

2020-12-05 14:20:27 664 1

原创 IT行业70后、80后、90后、00后管理难题和对策

中国的IT行业发展时间比较短,主要发展就是最近20年,IT行业从业人员大多比较年轻,其中,90后开始人员主力,00后也逐步的步入这个行业。中国由于改革开放,经济快速发展,基本上每隔10年,中国经济就会上一个台阶,经过几十年的发展,中国已经从原先贫穷的国家,变成了一直现代化的国家,人民生活富足。由于时代的变迁,各个不同年龄阶层的人,都烙上了很明显的时代印记。70后,这代人出生的时候,国家还没有改革开放,他们的童年一般都比较贫穷,生活相对比较困难。那时候大学还没有扩招,上大学还是很困难的,特别是上本

2020-11-30 19:58:56 472

原创 大数据应用“情感趋同现象”伦理风险问题刍议

随着大数据应用的普及,所引起问题受到越来越多的关注,其中,大部分关注在于隐私泄露、信息安全和数据鸿沟上面,而大数据应用所引起的“情感趋同现象”相对研究较少,本文通过对不同学者的理论进行梳理和对比,分析大数据产品“情感趋同现象”的起因、表现方式和解决方案等,希望能引起学界的共鸣。大数据应用“情感趋同现象”的形成原因 高建国在他的《人性心理学》中指出,“趋同是指两种或两种以上亲缘关系甚远的生物,由于栖居于同一类型的环境之中,从而演化成具有相似的形态特征或构造的现象。不同的生物,无亲缘的种,在...

2020-06-17 20:08:55 1003

原创 Kettle(PDI)的坑,有点大

网络上有不少Kettle的文章,但实际上都大同小异,都是些非常基础的文章,实际上在使用过程中还有遇到不少的坑,这部分在网上资料比较少,这里主要讲一下我们在使用过程中遇到的各种问题,属于难得的实践经验。说起ETL工具,很多人都觉得这个东西简单,不用学Mysql,不用学大数据的编程,简单的通过图形化的拖拉拽,就能实现对数据的抽取、转换、加载,而实际上往往并非如此,在复杂一点的应用场景上,往往就会出现一些意想不到的坑。低代码化、无码化的系统架构,现在比较流行。Kettle作为一个大数据的ETL..

2020-06-05 16:18:17 3088

原创 Phoenix使用ROW_TIMESTAMP字段导致无法从null更新数据的故障描述

在使用Phoenix的过程中,发现了一个奇怪的异常现象,其中一个表,有个字段(VARCHAR类型),一旦这个字段被更新为null值,从此就无法重新更新该字段的值。我在测试过程中,重新新建一张表,就发现可以正常更新,是我困惑不已。最后经过反复对比,发现是另外一个字段设置成ROW_TIMESTAMP导致的,下面详细讲述一些问题的复习。目前测试发现问题的Phoenix版本为4.14.0...

2019-11-08 11:27:57 684

原创 Phoenix偶尔出现OutOfMemoryError的问题排查

最近在使用Phoenix,采用sqlline模式执行的时候,经常时不时的出现OutOfMemoryError错误,如下:java.lang.OutOfMemoryError: unable to create new native thread刚开始一直以为的Phoenix和HBase的参数设置问题,经过多次调测,问题依然没有解决,后来才发现的Linux系统的参数设置问题。原先Linux...

2019-09-27 17:41:06 1226

原创 大数据系列之----海量数据下是kafka设计和实战演练

网上有很多Kafka的文章,但大多写得千篇一律,要么偏理论化,无实战数据参考。要么写了发现的某个问题的解决方案,对于想在实际环境上搭建真实的Kafka环境,参考意义并不大。 这篇文章基于大量的实战经验,在大规模,海量数据,以及实时处理的环境下,这些经验也是在解决Kafka很多真实问题得出的。试图在一开始就协助大家在大家在搭建真实Kafka环境的时候,提前做好最优的解决...

2019-05-09 19:50:30 449

原创 BitMap算法和Java的实现类BigSet

考虑下面几个应用场景:统计每天的日活(访问量、用户数等) 统计某个部门的联系客户量 对大量数据进行排序针对第一种应用场景,通常的做法就是采用明细表来记录每一个访问量,然后统计每天的用户数(用一个用户,多次访问,只算一个)。这里有个问题,就是假设用户量比较大,假设一天有1000万的请求量,一个月就有3亿的数据量,对数据库的压力比较大。这是我们就可以考虑采用BigM...

2019-03-25 20:13:44 1422

原创 基于阿里云的双活灾备方案的设计

基于阿里云的双活灾备方案的设计说起容灾备份方案,一般说来有下面这个发展方向:​​下面简单介绍下各个方案的内容:冷备:离线手工对数据进行容灾备份,当发生故障时,手工切换到备用环境 热备:实时对主生产环境的数据进行备份,当发生故障时,自动或手工切换到灾备环境 双活:两套环境实时进行双向数据同步,每套环境都承载其中一部分流量,当发生故障时,只由其中一套环境承载所有流量...

2019-03-19 19:56:41 4965 3

原创 Disruptor高性能缓存队列入门指导

 Disruptor是什么,怎么使用,网上有很多教材,但有些过于复杂,剖析了Disruptor的方方面面,实际上对应普通的开发人员,使用这个工具,只需要指导知道大概原理和使用方法,并不需要知道非常深入的原理。有些文章则是写了错误的实例,或者只是摘取了项目的一段代码,实际上,要把这些代码转化成项目的实际代码,却发现困难重重。这个文章主要是针对想提高性能,在项目组使用Disruptor的开...

2018-08-13 21:04:13 2470 1

原创 SaaS行业命名规范

    很多企业在启动软件开发的时候,完成没有命名规范,导致代码的可读性极差。而业界对于命名,却没有一个统一的命名规范,比如说,获取客户列表,Java类的方法是用get***List还是list****?这些完全的统一的规范 。    这里给出SaaS行业额命名规范,参考了阿里编码规范,加上我十几年来对业务的理解而写成的,可以作为一个开发人员形成一个统一的规范,建议一个项目在启动之前,采用该规...

2018-08-08 20:34:40 2376

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除