{"componentChunkName":"component---src-templates-best-practice-detail-tsx","path":"/best-practice/2020-09-09-serverless-etl","result":{"data":{"currentBlog":{"id":"a68be5c7-9013-5f9b-a4d7-df0a149c8326","frontmatter":{"thumbnail":"https://img.serverlesscloud.cn/202099/1599650772819-1599646529564-%E8%98%91%E8%8F%87%E8%A1%97.jpg","authors":["Tianyun"],"categories":["best-practice"],"date":"2020-09-09T00:00:00.000Z","title":"腾讯云 Serverless ETL —— 蘑菇街实战落地","description":"轻量、快速、灵活、省心、低成本的 Serverless 通用数据处理解决方案！","authorslink":null,"translators":null,"translatorslink":null,"tags":["Serverless","ETL"],"keywords":"Serverless, Serverless ETL","outdated":null},"wordCount":{"words":355,"sentences":68,"paragraphs":68},"fileAbsolutePath":"/opt/build/repo/content/best-practice/2020-09-09-serverless-etl.md","fields":{"slug":"/best-practice/2020-09-09-serverless-etl/","keywords":["serverless","云函数","函数","serverlesscloud","Ckafka","Serverless","腾讯"]},"html":"<h2 id=\"背景\"><a href=\"#%E8%83%8C%E6%99%AF\" aria-label=\"背景 permalink\" class=\"anchor\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>背景</h2>\n<p><img src=\"https://img.serverlesscloud.cn/202099/1599645790447-mogujie.jpg\"></p>\n<p>蘑菇街旨在做一家高科技轻时尚的互联网公司，公司的核心宗旨就是购物与社区的相互结合，为更多消费者提供更有效的购物决策建议。</p>\n<p>蘑菇街上每天有几百万网友在这里交流时尚、购物的话题，相互分享，这些行为会产生大量的数据，当这些数据源产生数据后，需要有一个组件获取数据源的数据，将数据写到 kafka，蘑菇街研发团队以往的解决办法，一是通过 Lofstash、Filebeat 等开源的数据存储方案处理，二是自己写代码实现这种逻辑。</p>\n<p>开始数据量小的时候还可以，随着业务的不断扩张，数据越来越大，为了保障可用性、可靠性以及性能相关的内容，需要大量的研发资源投入，因此，亟待新的解决方案支持。</p>\n<p>CKafka 全称是 Tencent Cloud Kafka ，是一款适合公有云部署、运行、运维的分布式、高可靠、高吞吐和高可扩展的消息队列系统。它 100% 兼容开源的 Kafka API，目前主要支持开源的 0.9, 0.10, 1.1.1, 2.4.2 四个大版本，并提供向下兼容的能力。</p>\n<p>目前 Tencent Cloud Kafka 维护了近万节点的集群，堆积数据达到了 PB 级。是一款集成了租户隔离、限流、鉴权、安全、数据监控告警、故障快速切换、跨可用区容灾等等一系列特性的，历经大流量检验的、可靠的公有云上 Kafka 集群。</p>\n<p>CKafka 目前服务对象包括拼多多、微信、哔哩哔哩，以及腾讯内部的一些大的应用，包括腾讯视频、微视等。</p>\n<h2 id=\"蘑菇街的选择\"><a href=\"#%E8%98%91%E8%8F%87%E8%A1%97%E7%9A%84%E9%80%89%E6%8B%A9\" aria-label=\"蘑菇街的选择 permalink\" class=\"anchor\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>蘑菇街的选择</h2>\n<p>蘑菇街团队对比市场上的技术解决方案，从学习成本、扩缩容能力以及人工维护成本和稳定性方面考虑。</p>\n<p>腾讯云 Serverless 云函数具有天然的优势：</p>\n<ol>\n<li>支持多语言</li>\n<li>学习成本低，不需要学习开源方案，不需要学习分布式调度</li>\n<li>无限的弹性扩容能力</li>\n<li>多重触发方式，事件触发、定时触发、主动触发</li>\n<li>集群稳定性和可用性的维护成本几乎没有</li>\n<li>按实际用量计费，1ms计费，费用很低</li>\n</ol>\n<p>同时，腾讯云 Serverless 云函数+ Ckafka 提供自建的 UI 交互界面，可进行流量告警配置，同时控制台上可进行扩容配置且安全可靠。</p>\n<p>腾讯云 Serverless 团队为蘑菇街提供的业务解决方案，是通过云函数将一个实例中某个 Topic 的消息转储至另一个实例对应的 Topic上，对比原来的 Connector 方案，腾讯云云函数 SCF 能够通过腾讯云控制台进行管理，能控制触发阈值，触发开关等，可以很方便地对每个函数进行管理。简单来讲，</p>\n<ol>\n<li>消息转储：将 Topic 的消息同步至离线集群</li>\n<li>集群迁移：在集群迁移合并的过程中起到一个双写的作用</li>\n</ol>\n<p><img src=\"https://img.serverlesscloud.cn/202099/1599644460822-1599551696850-440ec6a74a0f3abd.png\"></p>\n<p>经过对比，腾讯云 Serverless 云函数 + Ckafka 是最优的解决方案，蘑菇街最终决定选择使用腾讯云 Serverless 云函数 + Ckafka 运用在的消息同步业务上。</p>\n<h2 id=\"腾讯云-serverless-云函数--ckafka-解决方案的优势\"><a href=\"#%E8%85%BE%E8%AE%AF%E4%BA%91-serverless-%E4%BA%91%E5%87%BD%E6%95%B0--ckafka-%E8%A7%A3%E5%86%B3%E6%96%B9%E6%A1%88%E7%9A%84%E4%BC%98%E5%8A%BF\" aria-label=\"腾讯云 serverless 云函数  ckafka 解决方案的优势 permalink\" class=\"anchor\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>腾讯云 Serverless 云函数 + Ckafka 解决方案的优势</h2>\n<p>Kafka 社区的繁荣，让越来越多的电商用户开始使用 Kafka 来做日志收集、大数据分析、流式数据处理等。而公有云上的产品 Ckafka 也借助了开源社区的力量，和云函数结合，推出了非常实用的功能，其优化点包括：</p>\n<ul>\n<li>基于 ApacheKafka 的分布式、高可扩展、高吞吐</li>\n<li>100% 兼容 Apache KafkaAPI（0.9 及 0.10）</li>\n<li>无需部署，直接使用 Kafka 所有功能</li>\n<li>Ckafka 封装所有集群细节，无需用户运维</li>\n<li>支持动态升降实例配置，按照需求付费（开发中）</li>\n<li>对消息引擎优化，性能比社区最高提升 50%</li>\n</ul>\n<p>如下图，云函数可以实时消费 Ckafka 中的消息，比如做数据转存、日志清洗、实时消费等。并且，像数据转存的功能已经集成到了 Ckafka 的控制台上，用户可以一键开启使用，大大降低了用户使用的复杂度。</p>\n<p><img src=\"https://img.serverlesscloud.cn/202099/1599644585301-1599552289710-0becf3fe149768c0.png\"></p>\n<p>对比使用云主机自建 Ckafka Consumer 的方式，云函数帮用户屏蔽掉了很多不必要的开销：</p>\n<ol>\n<li>云函数控制台上可以一键开启 Ckafka 触发器，帮助用户自动创建 Consumer，并由云函数平台来维护组建的高可用；</li>\n<li>Ckafka 触发器自身支持很多实用的配置：支持配置 offset 位置、支持配置1~1万消息聚合条数、支持配置 1~1万次重试次数等；</li>\n<li>基于云函数开发的业务逻辑，天然支持弹性伸缩，无需额外搭建和维护服务器集群等。</li>\n</ol>\n<h2 id=\"腾讯云-serverless-etl-通用数据处理能力\"><a href=\"#%E8%85%BE%E8%AE%AF%E4%BA%91-serverless-etl-%E9%80%9A%E7%94%A8%E6%95%B0%E6%8D%AE%E5%A4%84%E7%90%86%E8%83%BD%E5%8A%9B\" aria-label=\"腾讯云 serverless etl 通用数据处理能力 permalink\" class=\"anchor\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>腾讯云 Serverless ETL 通用数据处理能力</h2>\n<p>互联网竞争日益激烈，无论是蘑菇街还是其他产品都在寻找新的突破，当产品团队尝试做产品迭代或者产品新功能时，初期要做一些新项目的验证，数据拉取、数据分析自然是必要的。</p>\n<p>这部分的数据需求可能会给团队带来很大的压力，一方面，对已有数据处理的主流程和数据结构有适配成本，需要考虑稳定性的风险，这部分需要投入大量的人力和时间成本；另一方面，由于这个过程时间周期比较长的，可能会影响迭代的速度，赶不上竞品。</p>\n<p>这个时候不妨试试腾讯云 Serverless 云函数，前面提到的 CKafka -> SCF -> CKafka 只是腾讯云 Serverless 云函数支持的 ETL 场景中的一条链路，Serverless 云函数能支持通用的数据处理。</p>\n<p>ETL 场景是指业务上需要做数据抽取（Extract）、数据转换（Transform）、数据加载（Load）的场景。腾讯云 Serverless 云函数在这方面有很大的优势：</p>\n<ol>\n<li>更轻量，无需要购买服务器，即可实现产品快速迭代中数据方面的需求。</li>\n<li>更快速实现，由于学习成本低，数据团队只需很轻松地写个脚本，上下游链接一下数据源，中间做一些数据逻辑即可。</li>\n<li>费用成本低，云函数 1ms 计费原则，且只对运行的函数付费，对于有波峰波谷的业务场景，在成本方面更是节省很多。</li>\n<li>灵活，不影响已经有项目的数据处理流程，可单独运行并满足数据验证需求。</li>\n<li>省心，从数据抓取、转存、分析、报表，全流程都实现了。</li>\n</ol>\n<p><img src=\"https://img.serverlesscloud.cn/202099/1599650323178-1599644414141-1599638197569-7f1ea4a4c11ebf37.jpg\"></p>\n<h2 id=\"实战部署\"><a href=\"#%E5%AE%9E%E6%88%98%E9%83%A8%E7%BD%B2\" aria-label=\"实战部署 permalink\" class=\"anchor\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>实战部署</h2>\n<p>说了这么多，一起来实战，了解了原理，操作起来其实也是非常简单了。</p>\n<p>前置条件</p>\n<p>以广州地域为例：</p>\n<ul>\n<li>开启 Elasticsearch 服务</li>\n<li>开启 Ckafka 服务</li>\n</ul>\n<p><strong>1. 创建云函数</strong></p>\n<p>登录云函数控制台，选择地域后，新建函数，选择运行环境Python3.6，搜索“Ckafka”，选中模板函数后，下一步。</p>\n<p><img src=\"https://img.serverlesscloud.cn/202099/1599644030558-01.png\"></p>\n<p>在下一步中，点开高级设置：配置环境变量，如下：</p>\n<p>必填参数：</p>\n<div class=\"gatsby-highlight\" data-language=\"text\"><pre class=\"language-text\"><code class=\"language-text\">ES_Address，ES_User，ES_Password，ES_Index_KeyWord</code></pre></div>\n<p>可选填入：</p>\n<div class=\"gatsby-highlight\" data-language=\"text\"><pre class=\"language-text\"><code class=\"language-text\">ES_Log_IgnoreWord（需要删除的关键词，缺省则全量写入，如填name,password）</code></pre></div>\n<div class=\"gatsby-highlight\" data-language=\"text\"><pre class=\"language-text\"><code class=\"language-text\">ES_Index_TimeFormat（按照天或者小时设置Index，缺省则按照天建立索引，如填hour）</code></pre></div>\n<p><img src=\"https://img.serverlesscloud.cn/202099/1599644034120-02.png\"></p>\n<p>在高级设置中，配置私有网络，需要选择和 ES 相同 VPC，完成函数创建。</p>\n<p><img src=\"https://img.serverlesscloud.cn/202099/1599644038315-03.png\"></p>\n<p><strong>2. 创建 Ckafka 触发器</strong></p>\n<p>在函数的【触发管理】页面，创建触发器，配置对应 Topic 的触发方式，提交后即可生效。</p>\n<p><img src=\"https://img.serverlesscloud.cn/202099/1599644041386-04.png\"></p>\n<p><strong>3. 查看 ES 和函数运行日志</strong></p>\n<ul>\n<li>查看函数运行日志</li>\n</ul>\n<p><img src=\"https://img.serverlesscloud.cn/202099/1599644044468-05.png\"></p>\n<ul>\n<li>查看 Kibana</li>\n</ul>\n<p><img src=\"https://img.serverlesscloud.cn/202099/1599644049846-06.png\"></p>\n<ul>\n<li>扩展能力介绍</li>\n</ul>\n<p>如果想要实现高级日志清洗逻辑，可直接在函数代码中修改逻辑。</p>\n<p><img src=\"https://img.serverlesscloud.cn/202099/1599644053104-07.png\"></p>\n<p>针对函数的运行状态，可以自行配置监控告警，实时感知业务运行情况。</p>\n<p><img src=\"https://img.serverlesscloud.cn/202099/1599644269980-08.png\"></p>\n<hr>\n<div id='scf-deploy-iframe-or-md'></div>\n<hr>\n<p>欢迎访问：<a href=\"https://serverlesscloud.cn/\">Serverless 中文网</a>，您可以在 <a href=\"https://serverlesscloud.cn/best-practice\">最佳实践</a> 里体验更多关于 Serverless 应用的开发！</p>","tableOfContents":"<ul>\n<li><a href=\"/best-practice/2020-09-09-serverless-etl/#%E8%83%8C%E6%99%AF\">背景</a></li>\n<li><a href=\"/best-practice/2020-09-09-serverless-etl/#%E8%98%91%E8%8F%87%E8%A1%97%E7%9A%84%E9%80%89%E6%8B%A9\">蘑菇街的选择</a></li>\n<li><a href=\"/best-practice/2020-09-09-serverless-etl/#%E8%85%BE%E8%AE%AF%E4%BA%91-serverless-%E4%BA%91%E5%87%BD%E6%95%B0--ckafka-%E8%A7%A3%E5%86%B3%E6%96%B9%E6%A1%88%E7%9A%84%E4%BC%98%E5%8A%BF\">腾讯云 Serverless 云函数 + Ckafka 解决方案的优势</a></li>\n<li><a href=\"/best-practice/2020-09-09-serverless-etl/#%E8%85%BE%E8%AE%AF%E4%BA%91-serverless-etl-%E9%80%9A%E7%94%A8%E6%95%B0%E6%8D%AE%E5%A4%84%E7%90%86%E8%83%BD%E5%8A%9B\">腾讯云 Serverless ETL 通用数据处理能力</a></li>\n<li><a href=\"/best-practice/2020-09-09-serverless-etl/#%E5%AE%9E%E6%88%98%E9%83%A8%E7%BD%B2\">实战部署</a></li>\n</ul>"},"previousBlog":{"id":"4af7123d-e5b7-5c3d-9c99-d85c35c84898","frontmatter":{"thumbnail":"https://img.serverlesscloud.cn/2020930/1601452545995-1601451648554-%E5%BE%AE%E4%BF%9Djpg.jpg","authors":["Weibao"],"categories":["best-practice"],"date":"2020-09-28T00:00:00.000Z","title":"微保的 Serverless 云函数实践之路","description":"微保 Serverless 实践之架构演进","authorslink":null,"translators":null,"translatorslink":null,"tags":["Serverless","架构设计"],"keywords":"Serverless Framework,Serverless,SCF","outdated":null},"wordCount":{"words":369,"sentences":79,"paragraphs":79},"fileAbsolutePath":"/opt/build/repo/content/best-practice/2020-09-28-weibao.md","fields":{"slug":"/best-practice/2020-09-28-weibao/","keywords":["serverless","云函数","函数","日志","架构","Serverless","团队","业务","中间层","serverlesscloud","微保"]}},"nextBlog":{"id":"1f8be8e0-2d12-5df8-a762-f7ffc07ec3b4","frontmatter":{"thumbnail":"https://img.serverlesscloud.cn/2020812/1597230581474-002.jpg","authors":["粟俊娥"],"categories":["best-practice"],"date":"2020-08-12T00:00:00.000Z","title":"腾讯云 Severless-Express 项目开发和灰度发布最佳实践","description":"本文教你快速了解 Severless-Express 项目开发和灰度发布，全是干货！","authorslink":["https://github.com/June1991"],"translators":null,"translatorslink":null,"tags":["Serverless","Express"],"keywords":"Serverless, Serverless Framework","outdated":null},"wordCount":{"words":294,"sentences":64,"paragraphs":63},"fileAbsolutePath":"/opt/build/repo/content/best-practice/2020-08-12-serverless-express.md","fields":{"slug":"/best-practice/2020-08-12-serverless-express/","keywords":["serverless","spa","云函数","serverless","express","feature","版本"]}}},"pageContext":{"isCreatedByStatefulCreatePages":false,"blogId":"a68be5c7-9013-5f9b-a4d7-df0a149c8326","previousBlogId":"4af7123d-e5b7-5c3d-9c99-d85c35c84898","nextBlogId":"1f8be8e0-2d12-5df8-a762-f7ffc07ec3b4"}}}