关于apache:Apache-Kafka的4个混沌工程实验-IDCF

Apache Kafka是一个凋谢源代码的分布式消息传递平台,高吞吐量和低提早交付数据。在规模上,它每天能够解决数万亿条记录,同时还提供容错、复制和主动劫难复原性能。只管Kafka有许多不同的应用场景,但最常见的是作为应用程序之间的音讯broker。Kafka能够从多个上游源头接管、解决和重新分配音讯到多个上游使用者,而无需重新配置应用程序。这就能够流式传输大量数据,同时放弃应用程序的涣散耦合,反对诸如分布式计算、日志记录和监控、网站流动跟踪以及物联网(IoT)设施通信之类的场景。 因为Kafka提供了应用程序之间的要害管道,因而可靠性至关重要。咱们须要打算来加重几种可能的故障模式,包含: 音讯broker中断和其余不失常的群集情况Apache ZooKeeper生效,这是Kafka的要害依赖项上游和上游应用程序中的故障不用期待这些故障在预生产或生产中产生,咱们就能通过混沌工程被动对其进行测试,以便制订适当的策略加重影响。本文,咱们将演示混沌工程如何帮忙进步Kafka部署的可靠性。为此,咱们将应用企业SaaS混沌工程平台Gremlin创立并运行四个混沌试验。通过浏览本文,理解Kafka群集可能产生故障的不同形式,如何设计混沌试验来测试这些故障模式,以及如何应用观测后果进步其可靠性。 本文中,咱们将在Confluent平台上演示凌乱的试验,该平台是Kafka最后的创建者提供的企业事件流平台。Confluent平台基于Kafka构建并增加企业性能(例如基于Web的GUI,全面的安全控制以及轻松部署多区域集群的性能)。然而,本文中的试验将实用于任何Kafka集群。 Apache Kafka架构概述为了理解Kafka如何从混沌工程中受害,咱们应该首先钻研一下Kafka的体系架构设计。 Kafka应用发布者/订阅者(或pub/sub)消息传递模型传输数据。上游应用程序(在Kafka中称为发布者或生产者)会生成发送到Kafka服务器(称为broker)的音讯。而后,上游应用程序(在Kafka中称为订阅者或使用者)能够从broker获取这些音讯。音讯被组织在主题的类别中,消费者能够订阅一个或多个主题以应用其音讯。通过充当生产者和消费者之间的中间人,Kafka使咱们可能彼此独立地治理上游和上游应用程序。 Kafka将每个主题细分为多个分区。分区能够跨多个broker镜像以提供复制。这还容许多个使用者(更具体地说,是使用者组)同时解决一个主题。为了避免多个生产者写入单个分区,每个分区都有一个充当领导者的broker,以及没有或多个充当追随者的broker。新音讯将被写入领导者,而追随者则将其复制。追随者被齐全复制后,称为同步正本(ISR)。 该过程由Apache ZooKeeper协调,ZooKeeper治理无关Kafka集群的元数据,例如哪些分区调配给了哪些broker。ZooKeeper是Kafka的必要依赖项(编者注:2.8版本就能够不须要ZooKeeper了),但在其本人的集群上作为齐全独立的服务运行。改善Kafka集群的可靠性必然波及进步其关联的ZooKeeper集群的可靠性。 Kafka和Confluent平台还有其余组件,然而在进步可靠性时,这些是最重要的思考因素。当本文介绍其余组件时,咱们会对其进行更具体的阐明。 为何要对Kafka进行混沌工程?混沌工程是一种被动测试系统故障的办法,目标是使它们更具韧性。咱们通过向零碎中注入大量受控故障,察看影响并解决察看到的问题。这使咱们可能在零碎呈现问题之前,为用户找到解决问题的办法,同时还教会了咱们更多对于零碎在各种条件下的行为信息。 因为有数不清的配置选项,灵便的生产者和消费者的部署形式以及许多其余因素,使得像Kafka这样的分布式系统难以高效治理和运维。仅仅使咱们的broker和ZooKeeper节点不生效是不够的,咱们须要思考在应用程序、正本和其余基础架构组件中可能产生的更加轻微和难以预测的问题。这些可能会以意想不到的形式影响整个部署,如果在生产中产生,则可能须要进行大量的排障开销。 应用混沌工程,咱们能够被动测试这些类型的故障,并在部署到生产之前解决这些故障,从而升高停机和紧急事件的危险。 在Kafka上运行混沌试验在本节中,咱们将逐渐介绍在Confluent平台上部署执行四个不同的混沌试验。混沌试验是一个有打算的过程,将故障注入零碎以理解其响应形式。在零碎上运行任何试验之前,应充分考虑并开发要运行的试验。 创立试验时: 第一步,设定假说要答复的问题以及预期后果是什么。例如,如果试验是测试接受broker中断的能力,则假说可能会指出:“如果broker节点产生故障,则音讯会主动路由到其余broker,而不会失落数据。”第二步,定义爆炸半径,受试验影响的基础架构组件。减小爆炸半径限度了试验可能对基础架构造成的潜在危害,同时还能够将精力集中在特定零碎上。咱们强烈建议从尽可能小的爆炸半径开始,而后随着对进行混沌试验的适应性进步,将其增大。另外,还应该定义幅度,即注入攻打的规模或影响力。例如,低幅度的试验可能是在生产者和broker之间的网络流量中减少20毫秒的提早。大幅度的试验可能是减少500毫秒的提早,因为这将对性能和吞吐量产生显着的影响。与爆炸半径一样,从低幅度开始,而后逐步增大。第三步,监控基础架构。确定哪些指标将助力得出无关假说的论断,在测试之前进行观测以建设基线,并在整个测试过程中记录这些指标,以便能够监测预期和意外的变动。借助Confluent平台,咱们能够应用Control Center从Web浏览器实时直观地察看群集的性能。第四步,运行试验。Gremlin容许以简略、平安和牢靠的形式在应用程序和基础架构上运行试验。咱们通过运行注入攻打来做到这一点,它提供了各种向零碎中注入故障的办法。咱们还要定义停止条件,这是咱们应该进行测试以防止意外损坏的条件。应用Gremlin,咱们能够将状态查看定义为场景的一部分。通过状态查看,咱们能够在进行注入攻打时验证服务状态。如果基础架构运行不失常,并且状态查看失败,将主动进行试验。另外,咱们能够应用内置的暂停按钮立刻进行试验。第五步,从察看后果得出结论。它是否证实或反驳了原先的假如?应用收集的后果来批改基础架构,而后围绕这些改良设计新的试验。随着工夫的推移,反复此过程将有助于使Kafka部署更具韧性。本文中介绍的试验绝不是详尽无遗的,而应将其作为在零碎上进行试验的终点。请记住,只管咱们正在Confluent平台上运行这些试验,但它们能够在任何Kafka集群上执行。请留神,咱们应用的是基于Kafka 2.5.0构建的Confluent 平台 5.5.0。屏幕截图和配置详细信息可能会因版本而异。 试验1: Broker负载对解决提早的影响资源利用率可能会对音讯吞吐量产生显着影响。如果broker正在经验较高的CPU、内存或磁盘I/O利用率,则解决音讯的能力将受到限制。因为Kafka的效率依赖于最慢的组件,因而提早可能会在整个管道中产生级联效应,并导致故障条件,例如生产者备份和复制提早。高负载还会影响集群操作,例如broker运行状况查看,分区重新分配和领导者选举,从而使整个集群处于不失常状态。 优化Kafka时要思考的两个最重要的指标是网络提早和磁盘I/O。Broker一直在本地存储中读写数据,随着音讯速率和群集大小的减少,带宽应用可能成为限度因素。在确定集群大小时,咱们应该确定资源利用率在哪一点上会对性能和稳定性产生不利影响。 为了确定这一点,咱们将进行一个混沌试验,逐步提高broker之间的磁盘I/O利用率,并察看其对吞吐量的影响。在运行此试验时,咱们将应用Kafka Music演示应用程序发送间断的数据流。该应用程序将音讯发送到散布在所有三个broker中的多个主题,并应用Kafka Streams聚合和解决音讯。 应用IO Gremlin生成Broker负载在本试验中,咱们将应用IO Gremlin在broker节点上生成大量磁盘I/O申请。咱们将创立一个计划,并在四个阶段中逐渐减少注入攻打的强度。每次注入攻打将运行三分钟,两头会距离一分钟,因而咱们能够轻松地将I/O利用率的变动与吞吐量的变动分割起来。 此外,咱们将创立一个状态查看,该状态查看应用Kafka Monitoring API在每个阶段之间查看broker的运行状况。状态查看是通过Gremlin发送主动HTTP申请到咱们选定的端点,在这种状况下,该端点是咱们集群的REST API服务器。咱们将应用主题的端点来检索broker的状态,并解析JSON响应以确定它们以后是否处于同步状态。如果任何broker不同步,咱们将立刻进行试验并将其标记为失败。在场景运行期间,咱们还将应用Confluent Control Center监督吞吐量和提早。 假如:磁盘I/O的减少将导致吞吐量的相应降落。论断:即便将磁盘I/O减少到150 MB/s以上,技术攻打也不会对吞吐量或提早产生显著影响。两项指标均保持稳定,咱们的broker均未失去同步或复制有余,也没有音讯失落或损坏。 目前,这给咱们留下了很多开销,然而随着利用范畴的扩充,对吞吐量的要求可能会减少。咱们应该亲密关注磁盘I/O利用率,以确保有足够的扩大空间。如果开始留神到磁盘I/O减少和吞吐量缩小,则应思考: 应用更快的存储设备,例如更高的RPM磁盘或固态存储应用更无效的压缩算法,例如Snappy或LZ4试验2: 音讯失落造成数据失落的危险为了确保胜利传递音讯,生产者和broker应用确认机制。当broker将音讯提交到其本地日志时,它会与响应生产者进行确认,表明已胜利接管到该音讯,并且生产者能够发送下一条音讯。这样能够缩小生产者和broker之间失落音讯的危险,然而不能避免broker之间失落音讯。 例如,假如咱们有一个broker领导,刚从生产者那里收到音讯并发送了确认。Broker的每个订阅者当初都应该获取音讯并将其提交到他们本人的本地日志中。然而,broker在其任何订阅者获取最新消息之前意外失败。跟随者没有一个晓得生产者发送了一条音讯,然而生产者曾经收到了确认,因而它已移至下一条音讯。除非咱们能够复原产生故障的broker,或者找到其余从新发送音讯的办法,否则音讯实际上曾经失落了。 咱们如何确定在集群上产生这种状况的危险?借助混沌工程,咱们能够模仿broker领导的故障并监控音讯流,以确定潜在的数据失落。 应用黑洞Gremlin模仿Broker领导中断在此试验中,咱们将应用黑洞Gremlin删除往返于broker领导的所有网络流量。此试验很大水平上取决于工夫安顿,因为咱们心愿在broker收到音讯之后,但在其订阅者能够复制音讯之前,引起broker的失败。这可通过两种形式执行此操作: 比追随者低的工夫距离,发送间断的音讯流,启动试验,并寻找使用者输入中的空白(replica.fetch.wait.max.ms)。发送音讯后,立刻应用Gremlin API从生产者应用程序触发混沌试验。在本试验中,咱们将应用第一种形式。应用程序每100毫秒产生一条新音讯。音讯流的输入记录为JSON列表,并对其剖析以查找任何差距或时序上的不统一。咱们将对其注入攻打30秒,这将生成300条音讯(每100毫秒一条音讯)。 假如:因为领导者失败,咱们将失落一些音讯,然而Kafka将迅速选出新的领导者,并再次胜利复制音讯。后果:只管领导者忽然失败,音讯列表仍显示所有胜利通过的音讯。因为试验前后记录了额定的音讯,因而咱们的管道总共产生了336个事件,每个音讯在上一个事件之后大概有100毫秒的工夫戳。音讯没有按工夫程序显示,但这很好,因为Kafka不保障分区之间音讯的程序。这是输入示例: 如果想保障所有音讯都已保留,则能够在生产者配置中设置acks = all。这通知生产者在将音讯复制到broker领导及其所有订阅者之前,不要发送新音讯。这是最平安的抉择,然而它将吞吐量限度为最慢broker的速度,因而可能会对性能和提早产生重大影响。 试验3: 防止脑裂Kafka、ZooKeeper和相似的分布式系统容易受到称为“脑裂”问题的影响。在脑裂中,同一群集内的两个节点失去同步并分区,从而产生群集中两个独自且可能不兼容的视图。这会导致数据不统一,数据损坏,甚至造成第二个群集。 这是怎么产生的?在Kafka中,为单个broker节点调配了控制器角色。控制器负责检测群集状态的更改,例如失败的broker、领导者选举和分区调配。每个集群只有一个且只有一个控制器,以保护集群的单个一致性视图。只管这使控制器成为单点故障,但Kafka领有解决此类故障的过程。 所有broker都会定期向ZooKeeper注销,以证实本人的衰弱。如果broker的响应工夫超过zookeeper.session.timeout.ms设置(默认为18,000毫秒),则ZooKeeper会将broker标记为不失常。如果该broker是控制者,则触发控制者选举,正本ISR成为新的控制者。这个新的控制器被调配了一个称为控制器纪元的编号,该编号跟踪最新的控制器选举。如果产生故障的控制器从新联机,它将比拟本人的控制器纪元与ZooKeeper中存储的纪元,辨认出新选的控制器,而后退回为一般broker。 这个过程能够避免多数broker失败,但如果大部分broker都产生了重大故障,那该怎么办呢?咱们能够在不产生脑裂的状况下重新启动它们吗?咱们能够应用混沌工程对此进行验证。 应用关机Gremlin重启大多数broker节点此试验中,咱们将应用关机Gremlin重新启动集群中的三个broker节点中的两个。因为此试验可能会对集群稳定性造成潜在危险(例如,咱们不想意外敞开所有ZooKeeper节点),因而想确保在运行该broker之前,所有三个broker都应处于衰弱状态。咱们将创立一个状态查看,从Kafka Monitoring API中获取衰弱broker的列表,以验证所有三个broker均已启动并正在运行。 这是咱们齐全配置的场景,显示状态检查和关机Gremlin: 假如:Kafka的吞吐量将临时进行,然而两个broker节点都将重新加入群集,而不会呈现问题。后果:控制中心仍列出了三个broker,但显示其中两个不同步且分区复制有余。这是预料之中的,因为节点曾经失去了与其余broker和ZooKeeper的分割。 当先前的控制器(broker1)脱机时,ZooKeeper立刻选举残余的broker(broker3)为新的控制器。因为这两个broker在不超过ZooKeeper会话超时的状况下重新启动,因而,从broker失常运行工夫的图表,能够看出它们始终处于联机状态。然而,当咱们的音讯管道转移到broker3时,查看吞吐量和正本的图表,就会发现这显著地影响了吞吐量和分区运行状况。 尽管如此,broker毫无意外地重新加入了集群。由此能够得出结论,咱们的集群能够接受临时的少数失败。性能将显着降落,集群将须要选举新的领导者,重新分配分区,并在其余broker之间复制数据,然而不会陷入脑裂的场面。如果花更长的工夫来复原broker,则此后果可能会有所不同,因而,咱们心愿确定在重大生产中断的状况下,已制订了事件响应打算。 ...

July 12, 2021 · 1 min · jiezi

关于apache:下载实时计算正当时助你轻松get-Apache-Flink-动向

简介:本书将助您轻松 Get Apache Flink 1.13 版本最新特色,同时还蕴含出名厂商多场景 Flink 实战经验,学用一体,干货多多!Apache Flink是当下实时计算畛域的事实技术标准,作为支流的流式计算引擎 Flink 能够实现订阅、剖析、解决等一系列数据处理流程,让数据在第一工夫施展价值。最近几年Apache Flink 也从流计算的引擎开始逐步领有了流批一体的计算能力,可灵活处理多源数据,疾速剖析后果并展现,不便用户更快更好更高效的实现业务工作。 作为疾速倒退的新一代大数据引擎,Apache Flink自身的架构劣势也吸引着越来越多的开源爱好者投入到社区的建设来。截止到2021年6月,社区的star数达到16500,contributor数达到894,有27238次commits,“实时计算正过后”Apache Flink曾经融入到泛滥企业的业务生产线中去,成为建设实时大数据处理平台的首选。 本书将为开发者们在第一工夫 get Apache Flink 1.13 版本新特色和性能晋升;同时联结知乎、腾讯、民生银行、B站等厂商提供 Flink 在多场景中的实战经验,轻松 Get 企业大数据服务能力! 收费下载《Apache Flink-实时计算正过后》 电子书亮点Apache Flink 1.13 版本正式公布,深度解读新版本外围性能,上手更容易;深刻理解知乎、腾讯、民生银行、B站等出名厂商实战经验,干货满满;150多页图文大餐,让读者玩转新版本!精彩领先看 技术篇: 点击查看 Apache Flink 1.13.0 正式公布,流解决利用更加简略高效! 点击查看 深刻解读 Flink SQL 1.13 点击查看 Flink 1.13,面向流批一体的运行时与 DataStream API 优化 点击查看 Flink 1.13,State Backend 优化及生产实践分享 点击查看 Flink + Iceberg 全场景实时数仓的建设实际 实际篇: 点击查看 知乎的 Flink 数据集成平台建设实际 点击查看 腾讯游戏实时计算利用平台建设实际 点击查看 Flink SQL CDC 实际以及一致性剖析 点击查看 Apache Flink在 bilibili 的多元化摸索与实际 ...

July 7, 2021 · 1 min · jiezi

关于apache:参与-Apache-顶级开源项目的-N-种方式Apache-Dubbo-Samples-SIG-成立

简介: 一说到参加开源我的项目奉献,个别大家的反馈都是代码级别的奉献,总感觉我的代码被社区合并了,我才算一个贡献者,这是一个常见的谬误认知。其实,在一个开源社区中有十分多的角色是 non-code contributor,一个开源社区中的很多要害职责被大家给疏忽了。 头图起源:https://opensource.guide/起源 | 阿里巴巴云原生公众号 只有奉献代码才算是参加开源我的项目社区奉献吗?一说到参加开源我的项目奉献,个别大家的反馈都是代码级别的奉献,总感觉我的代码被社区合并了,我才算一个贡献者,这是一个常见的谬误认知。其实,在一个开源社区中有十分多的角色是 non-code contributor,一个开源社区中的很多要害职责被大家给疏忽了。组织流动也能够是奉献社区: 你能够像远在巴西库亚巴的 @fzamperin学习,为你喜爱的开源我的项目组织 workshop 或线下 meetup你还能够帮忙社区成员找到适合的线下峰会来提交技术议题……技术写作或者技术布道也是奉献社区: 为你喜爱的开源我的项目编写或者改良文档建设一个如何应用这个开源我的项目的 samples将文档翻译成其余语言,帮忙寰球开发者意识、应用该我的项目在本人的公众号或者博客分享应用该项目标指南和心得……设计和官网开发也是奉献社区: 重构开源我的项目官网来帮忙开发者更好的意识、应用该开源我的项目进行用户调研来更好地改善官网导航和目录构建一个 style guide 来帮忙该我的项目领有一个更对立、欠缺的视觉设计为该开源我的项目设计贴纸、T 恤等周边……Apache Dubbo Samples SIG 成立!samples 贡献者招募中Apache Dubbo 倒退到明天,曾经有 386 个贡献者,贡献者了包含代码、测试、用例、文档、应用倡议等丰盛内容。以后 Dubbo Core 有 2.7、3.0 两个十分沉闷的演进分支,其中 2.7 版本已被泛滥知名企业大规模的投入生产环境,如携程、工商银行、瓜子二手车等,而 3.0 分支也曾经在 3 月份公布了 preview 版本,依照打算在 6 月份第一个 3.0 可用版本也将正式公布。内核的疾速演进与迭代促成了 Dubbo 的疾速倒退,同时,也给整个社区与 Committer 外围项目组带来新的挑战,这体现在: 新 Feature 相干的用户示例与文档缺失。用户对新版本个性如何应用无从通晓,翻阅代码成为惟一的路径。稳定性无奈失去充沛保障。在迭代过程中,单元测试、集成测试没有失去无效的补充,这导致测试覆盖度的降落和回归老本的低落,更蹩脚的是如果发版环节有些问题仍未被发现,则它们将不可避免的被带到用户应用环节。因为文档和用例的缺失,咱们不得不解决大量的 Issue、也包含其余的线上答疑,来解答用户的疑难,其中有一些是用户不晓得某个具体性能怎么用,有一些则是应用了不正确的配置形式导致不能失常运行;稳定性的降落则是对咱们本人以及 Dubbo 用户两方面的双重打击,继续的呈现问题会导致用户开始对 Dubbo 的版本公布失去信念,而对咱们这些外围维护者而言,破费大量精力实现的版本却给用户带来了困扰,这会让整个开发组也变得丧气。毫无疑问,对于 Dubbo 社区而言,解决以上问题成为了以后火烧眉毛的工作工作,这自身的重要性并不亚于大家所热衷的外围性能开发,但咱们也意识到,投入到其中须要破费肯定的精力,仅仅靠以后的几位维护者会十分吃力,尤其是思考到他们还须要兼顾整个 Dubbo 社区的运作。在这样的背景下,咱们想到了招集来自社区的力量,明天在 Committer 核心成员的统一倡议下,Apache Dubbo 决定成立 Samples SIG(注:SIG 是 special interest group 的缩写,即兴趣小组),以期能改善以上的示例缺失、稳定性等问题。毫无疑问,这个 SIG 的运行须要宽广开发者的积极参与,当然,社区的外围开发者们也会踊跃的沉闷在其中。 ...

May 20, 2021 · 1 min · jiezi

关于apache:精彩回顾-Apache-Flink-x-Iceberg-Meetup-上海站

简介:PPT下载链接来啦!4 月 17 日,Apache Flink Meetup 上海站圆满结束!本次 Meetup,社区邀请了来自阿里巴巴、腾讯、Dell 科技团体、汽车之家的 4 位技术专家分享了超多对于 Flink & 数据湖的内容,全方位解析数据湖生产利用难题。 泛滥技术同学积极参与了此次流动,相互之间进行了敌对的技术交换,同时也替换了各自对 Flink x Iceberg 生产利用的现状与将来的认识。当然,最重要的是从各位大咖那播种了满满的实用干货! Meetup 议题回顾:社区活动 | Apache Flink Meetup · 上海站,数据湖专场 流动亮点:汽车之家基于 Apache Iceberg 进行数仓架构降级过程中的一些实际。商业对象存储与 Iceberg 适配的最佳实际办法。腾讯如何将 Flink + Iceberg 技术利用到多个百亿级数据入湖工作。借助 Flink 和 Iceberg 来尝试解决多种数据入湖的相干挑战。▼ 现场精彩照片 ▼ Flink x Iceberg Meetup 上海站嘉宾分享 PPT 下载及直播回顾链接如下: 【PPT下载】 https://files.alicdn.com/tpsservice/b201e20d578e1f3c7d52c1624a3e727a.zip 【直播回顾】 https://developer.aliyun.com/live/246619 ▼ Iceberg 更多干货举荐 ▼ Flink 集成 Iceberg 在同程艺龙的生产实践 Flink + Iceberg 全场景实时数仓的建设实际 ...

April 30, 2021 · 1 min · jiezi

关于apache:Apache-DolphinScheduler-毕业成为-Apache-首个由国人主导的大数据工作流调度领域顶级项目

寰球最大的开源软件基金会 Apache 软件基金会(以下简称 Apache)于北京工夫 2021 年 4 月 9 日在官网渠道发表 Apache DolphinScheduler 毕业成为 Apache 顶级我的项目。这是首个由国人主导并奉献到 Apache 的大数据工作流调度畛域的顶级我的项目。 DolphinScheduler™ 曾经是联通、IDG、IBM、京东物流、联想、新东方、诺基亚、360、顺丰和腾讯等 400+ 公司在应用的分布式可视化大数据工作流调度零碎。 DolphinScheduler 于 2019 年 8 月 29 日由易观捐献给 Apache 并启动孵化。之后在导师的领导下,由孵化器治理委员会成员进行辅导和孵化,在 2021 年 2 月 19 日在 Apache 孵化器以 8 票反对一次性通过毕业提案投票。3 月 18 日,Apache 董事会通过  DolphinScheduler 毕业决定,完结了为期 18 个月的孵化,正式确定 DolphinScheduler 成为 Apache 顶级我的项目。 2021 年 4 月 9 日由 Apache 市场副总裁 Sally Khudairi 在 Apache 软件基金会各渠道官号上公布官网通告。 对于 Apache DolphinSchedulerApache DolphinScheduler 是一个分布式易扩大的带有弱小可视化 DAG 界面的新一代工作流调度平台,自 17 年在立项之初就确定了使命 - “解决大数据工作之间盘根错节的依赖关系,使整个数据处理过程直观可见”,从此配置工作流程再也不须要写代码啦! ...

April 9, 2021 · 1 min · jiezi

关于apache:1800-美金Apache-ShardingSphere-带薪远程实习招募啦-2021-Google-编程之夏

2021 Google Summer of Code(GSoC)谷歌编程之夏是由谷歌主办的全球性编程实习生我的项目,意在激励青年学生通过参加实在的开源软件开发,晋升本身技术实力,为学生们和开源、自由软件、技术相干的组织建立联系,学生们奉献代码并取得报酬! 目前,京东科技主导的开源我的项目,ASF 首个分布式数据库中间件生态圈我的项目 Apache ShardingSphere 社区现已正式作为导师组织退出 2021 谷歌编程之夏,欢送同学们提交我的项目申请。 <1>如何参加Google 编程之夏,即Google Summer of Code(GSoC)是由谷歌主办的全球性编程实习生我的项目。如果用一句话概括这个全球性流动,就是参加学生用一个寒假的工夫,在所选开源我的项目的导师领导下为开源我的项目奉献代码,并取得奖金报酬。 值得注意的是,随着肆虐寰球的新冠疫情继续冲击着人们的日常生活,在联合去年教训的根底上,GSoC 2021 做了些许调整。 缩短我的项目工夫:从 12 周、共 350 小时,调整为 10 周、共 175 个小时,即每周只要求 17.5 个小时工作量。这意味着我的项目的规模会变小,给参加学生带来了更大的灵活性,例如入选者能够更容易地同时进行公司实习和加入 GSoC;扩充参加群体:除了大学里的本科、硕士和博士生外,新增了coding schools,community universities 等来自不同教育机构背景的学生(具体机构资质请联系 GSoC 官网确认);总体来说,GSoC 做出调整的初衷,就是为开源社区吸引更多的新鲜血液,造就长期开发者。目前,Apache ShardingSphere 社区作为 mentor 组织已退出流动中,在学生从相熟社区到奉献代码的整个过程中提供领导,欢送同学们申请加入! <2>流动处分如果你是一名在校学生,无论是本科、硕士、博士生,还是coding schools,community universities 等来自不同教育机构背景的学生,只有对编程感兴趣,咱们激励你申请 GSoC! 参加 GSoC 并入选的学生均可取得薪资 1800 美金,约合 11700 人民币。(★ ★) 除了丰富的现金薪酬外,你还能取得: 直接参与一线开源编程我的项目开发的教训间接承受一线资深开源软件开发者领导的机会Google 公司内推机会(我的项目终审通过者)近程工作教训有可能受邀加入开源组织开发者大会的机会... ...<3>流动日程 对于GSoC,您可拜访以下网址理解更多信息: 官网流动阐明:https://summerofcode.withgoog... 具体工夫线:https://summerofcode.withgoog... GSoC-CN:一些中国 GSoC 入选者保护的教训分享 :https://github.com/gsoc-cn/gs... ShardingSphere 社区公共邮箱: dev@shardingsphere.apache.org ...

April 2, 2021 · 1 min · jiezi

关于ubuntu:Linux系统配置NFS文件共享服务

相似winodws的网络共享性能,Linux零碎也提供了多种网络文件共享形式,常见的有NFS,Samba,FTP,本文介绍NFS的形式网络文件系统装置与配置 NFS简介 nfs在在消息传递过程中依赖RPC协定,应用NFS时用户端只须要应用mount命令将近程主机的目录挂载到本地即可。例如要把10.10.0.12的/home/test挂载到本地10.10.0.11的/home/test目录下 [root@localhost ~]# mount 10.10.0.12:/home/test /home/test 配置NFS服务器 NFS 须要装置nfs-utils.rpm rpcbind.rpm 版本号因零碎版本有所差异 [root@localhost ~]# yum install -y nfs-utils rpcbind...... exports参数阐明 -a 全副挂载/etc/exports 文件内的设置,-r 从新挂载/etc/exports 文件内的设置,-u卸载某一目录 shownmount参数阐明 -a 列出nfs共享的残缺目录信息,-d 列出客户端近程装置的目录,-e 显示导出目录的列表 nfs参数阐明 ro 只读权限,rw 读写权限,all_squash匿名用户或组,no_all_squash 非匿名用户或组,root_squash将root用户和组映射为匿名用户和组,no_root_squash 与root_squash相同,sync 将数据同步写入缓冲区中,async 将数据先保留在内存缓冲区,再写入磁盘 设置expoprts 文件 [root@localhost ~]# cat /etc/exports/home/test .(rw) 启动服务 [root@localhost ~]# systemctl start rpcbind[root@localhost ~]# systemctl start nfs-server 配置NFS客户端 [root@localhost ~]# mount -t nfs -o rw 10.10.0.12:/home/test /home/test 如此,就能够应用! 本文原创地址:https://www.linuxprobe.com/redhat-nfs-server.html编辑:王华超,审核员:逄增宝 ...

March 26, 2021 · 1 min · jiezi

关于apache:首次针对亚太时区的-ApacheCon-在线会议-ApacheCon-Asia-2021-来了演讲征集中……

ApacheCon 是 Apache 软件基金会(ASF)的官网寰球系列大会。作为久负盛名的开源盛宴,ApacheCon 在开源界备受关注,也是开源静止晚期的出名流动之一。 早在 1998 年,在 ASF 成立之前,ApacheCon 曾经吸引了各个档次的参与者,在 300 多个 Apache 我的项目及其不同的社区中摸索 "今天的技术"。也是在这一届上,开发 HTTPD 服务的开发者们欢聚一堂,并决定成立 Apache 软件基金会。 (图为1998 年首次 ApacheCon 大会照片) ApacheCon 每年举办一次,个别在欧洲或北美举办,是 Apache 开发者们线下交换、探讨、见面的绝佳机会,也是分享想法、思维激荡的难得的场合。通过入手实作、主题演讲、理论案例钻研、培训、黑客松流动等形式,展现 Apache 我的项目的最新倒退和新兴翻新。 只管 2020 年有许多挑战,然而 Apache 软件基金会举办了第一次虚构大会 2020 ApacheCon@Home,对许多过来经常无奈亲自到场加入 ApacheCon 的人,却是一个让绝佳的机会,让他们能够在线接触到许多人。 相比于过来通常数百人缺席的 ApacheCon 的线下大会,去年咱们有将近 3,500 人加入 了第一届 ApacheCon@Home,享受了将近 200 个小时的内容、同行会议、轻松的虚构见面会。 而往年,为了更好地服务于亚太快速增长的 Apache用户和贡献者,ApacheCon 组委会以及 Apache 软件基金会很快乐地发表,首次针对亚太地区时区的 ApacheCon 在线会议ApacheCon Asia 大会将于2021 年 8 月 6 日至 8 日在线举办。 ApacheCon 将再次展现来自 Apache 软件基金会的几十个我的项目相干的内容,以及对于社区、Apache 如何运作、围绕 Apache 软件的商业模式、开源的法律问题以及其余许多主题的内容。 ...

March 26, 2021 · 1 min · jiezi

关于云计算:全票通过微众开源项目-EventMesh-进入-Apache-孵化器

往年 2 月微众银行开源我的项目 EventMesh 正式通过国内顶级开源组织 Apache 软件基金会(简称 ASF )的投票决定,以全票通过的优良体现成为 ASF孵化器我的项目。 这是微众银行第一个进入 ASF 的我的项目,也是国内金融行业首个进入 ASF 孵化器的开源我的项目,标记着微众银行在践行金融科技全面开源路线上的重要里程碑。 近年来,随着微服务、容器、服务网格、 Serverless 等云原生技术的倒退,事件驱动架构也再次成为热点,引起 IT 界宽泛的关注。事件驱动架构是一种用于设计利用的软件架构和模型。对于事件驱动零碎而言,事件的捕捉、通信、解决和长久保留是解决方案的外围构造。事件驱动架构能够最大水平缩小耦合度,很好地扩大与适配不同类型的服务组件,因而是现代化分布式应用架构的现实之选 对于 EventMesh 在微服务畛域,EventMesh(事件网格) 作为一项根底服务技术与 Service Mesh(服务网格) 具备等同的定位,是 Service Mesh 很好的补充,且相比 Service Mesh,具备笼罩更广泛应用场景的能力。 而微众开源的 EventMesh 我的项目就是以事件驱动为外围的分布式服务运行时,通过动静的插件式云原生根底服务层,将应用程序和中间件层拆散,并提供了灵便,牢靠和疾速的事件散发和解决能力,同时能够对事件进行治理,能够作为利用过程的连贯层,提供企业实现其数字化转型的指标所需的全套利用过程间通信模式。 EventMesh 我的项目于 2020 年 8 月在 GitHub 上对外开源,晚期是为了解决微众银行外部多语言客户端接入音讯总线的问题,随着云原生技术的一直倒退成熟与落地,富客户端的简单逻辑逐步下沉到 EventMesh 中,演变成为了 Sidecar 服务,同时也可作为 Gateway 集群部署,以一种更通用的协定接口裸露服务,简化事件利用开发,供各种事件源和事件指标集成。 EventMesh 我的项目负责人陈广胜示意:随着业务场景的一直变动,“事件”是古代企业中一个重要的“生命线”,而在云原生技术的催化下,面向分布式应用的事件驱动架构会造成外围的基础设施层。在将来,云原生事件驱动架构会集成更多的利用和服务,而 EventMesh 我的项目也将在更宽泛的利用场景中体现出它的价值。 Champion 寄语Apache EventMesh 我的项目的 Champion,也是 GSoC Mentor、Apache RocketMQ 联结创始人、Linux OpenMessaging 的发起人冯嘉示意: 以 EDA+Serverless 架构理念驱动的 Apache EventMesh 填补了开源畛域在 Eventing as A Infrastructure 的空白,它能解耦、屏蔽利用与底层中间件交互细节,联合 Knative、KEDA 等容器化技术,实现多状态部署,具备十分光明的发展前景。十分期待更多的贡献者退出到这个极富生命力的社区,独特打造云原生时代面向利用开发的外围基础设施。 ...

March 23, 2021 · 1 min · jiezi

关于apache:ASF第一位华人董事

前言明天一早关上朋友圈就看到几条音讯,都是在讲吴晟入选新一届Apache董事会成员,在肯定水平上讲中国曾经进入Apache外围并且还会始终展示向上的趋势,十分期待中国在软件畛域可能有更多的领军人物进入国际化组织,例如各种基金会。同时也期待中国大企在软件上的翻新而不是卖菜。 新一届董事会成员名单在Apache网站页面https://apache.org/foundation/#board-members曾经可能看到以后最新一届的董事会成员,最初一个名字Sheng Wu正是吴晟大佬. Apache Member(成员)在看到文章重磅:吴晟入选 Apache 软件基金会 2021年董事中介绍ASF成员之前我始终认为只有成为了Apache我的项目的Committer就曾经算是Apache Member了,原来Committer只是打怪降级的第一步,离Apache Member还有很大的间隔。 结语最初,再次祝贺吴晟成为首位ASF华人董事,心愿中国软件畏缩不前! 欢送来我的博客查看我的最新文章

March 16, 2021 · 1 min · jiezi

关于apache:首位中国人吴晟当选-Apache-软件基金会新一任董事

技术编辑:鸣飞丨发自 思否编辑部思否报道丨公众号:SegmentFault开源社联结创始人、理事,ASF Member 刘天栋对本文亦有奉献 在刚刚完结的 ASF Annual Meeting 上,2021 年新任 ASF Member 及董事会成员诞生了。Apache 软件基金会通过官网 blog 向大家颁布了新一任董事的选举成绩。 局部内容译文: 在本周举办的 Apache 软件基金会(ASF)年度会员大会上,以下人员入选为 ASF 董事会成员。 Bertrand Delacretaz (现任董事)Roy Fielding (现任董事)Sharan Foga (新任董事)Justin Mclean (现任董事)Craig Russell (现任董事)Sam Ruby (现任董事)Roman Shaposhnik (回归董事)Sander Striker (现任董事)Sheng Wu (新任董事)Apchae 软件基金会感激 Shane Curcuru、Patricia Shanahan 和 Niclas Hedhman(在会员大会之前辞去董事职务)所提供的服务,并欢送咱们的新董事和回归董事。 值得关注的是,在强烈地竞选中(15 选 9)吴晟(Sheng Wu)胜利入选为 Apache 软件基金会新一任董事,他也是历史上首位来自中国的董事。 吴晟是 Tetrate.io 开创工程师,Apache SkyWalking 创始人,Apache SkyWalking VP 和 PMC 成员;Apache ShardingSphere, Apache APISIX, 和 Apache Incubator 的 PMC 成员。他见证了开源文化和 Apache Way 在中国的接受程度逐年进步,越来越多的开发者退出 Apache 社区,成为贡献者、Committer,甚至基金会正式成员。吴晟在 2020 年被评比为《2020 中国开源先锋 33 人之心尖上的开源人物》。 ...

March 12, 2021 · 1 min · jiezi

关于apache:京东云新一代自研云服务器-4-月上线COLING-2020丨面向机器阅读理解的双向认知思维网络

开发者社区技术周刊 又和大家见面了,快来看看这周有哪些值得咱们开发者关注的重要新闻吧。 谷歌公布 Flutter 2京东云新一代自研云服务器4月上线Apache Flink 1.12.2 公布,流批一体真正对立运行!人行道机器人在宾夕法尼亚等州曾经被视同“行人”混合事实平台 Mesh 重磅推出,科幻融入事实Facebook 新 AI 模型 SEER 实现自监督学习EMNLP 2020丨基于超边交融的文本加强常识图谱凋谢域问答COLING 2020丨面向机器浏览了解的双向认知思维网络行 业 要 闻.Industry   News1.谷歌公布 Flutter 2 3 月 4 日,谷歌重磅公布了下一代 Flutter,专为 Web、挪动和桌面而构建的  Flutter 2! Flutter 的重大降级版本 Flutter 2 为了从根本上扭转开发者对构建利用的认识,将 Flutter 从挪动开发框架扩大成可移植框架,因此开发者无需重写代码即可将利用扩大至桌面或网页。 此外,利用 Flutter 2 还能实现许多性能: 开发者可应用雷同的代码库,将本地利用公布到五个操作系统上:iOS、Android、Windows、macOS 和 Linux;针对 Chrome、Firefox、Safari 或 Edge 等浏览器提供不同的网络体验;Flutter 还能够嵌入汽车、电视和智能家用电器。2.京东云新一代自研云服务器 4 月上线 3 月 2 日音讯,新一代自研京东云服务器将于 2021 年 4 月上线, 云实例承载能力将比同价格的规范品晋升2倍以上。 第二代京东云服务器将同时担负起京东团体外部利用撑持,以及京东云对外服务。第二代京东云服务器是继第一代服务器“微定制”之后,基于外部多样化海量业务需要,以及京东云各行业客户需要, 自主研发与深度翻新的新一代云服务器基础架构, 通过零碎架构设计翻新、核心部件翻新,实现了高效、灵便、高性价比的指标。后续,京东云还将把这些自研翻新成绩,通过开源社区回馈给行业,为 IT 行业的翻新倒退做更多奉献。 3.Apache Flink 1.12.2 公布,流批一体真正对立运行! Apache Flink 来到了 1.12.2 版本,此版本集中在 bug 的修复上。以下是局部更新内容: ...

March 9, 2021 · 1 min · jiezi

关于apache:开课啦基于-dubbogo-的服务端技术升级实战

杭州开课啦教育科技有限公司高级开发工程师 曾凡维技术选型背景2020年是我司发展壮大的一年,整个公司团队由原来的几百人裁减至当初的几千人,在集中应用的时候基本上会有几千人同时在经营后盾进行操作,公司原有的外部后盾经营零碎是用PHP搭建起来的,性能跟业务上已逐步不能满足公司的需要布局,加上目前我司开发部曾经做了微服务拆分,主体对外服务是java语言的Dubbo集群,后盾零碎须要无缝对接java的Dubbo服务,所以PHP曾经逐步不能满足我司的需要。 过后本人也调研过PHP的Dubbo我的项目,因为我的项目已根本无人更新保护所以pass掉,前面本人对简洁高性能的go语言感兴趣,而后就关注到了Dubbo-go我的项目,通过一段时间的调研之后发现Dubbo Go 合乎咱们的业务须要,并且社区十分的沉闷,前面便决定选用 Dubbo-go 作为后盾的 pc 业务框架。 可能也有同学会问为什么不应用跨言反对水平更好的 gRPC 呢,因为很多公司最开始的 RPC 服务集群都是基于Dubbo 生态构建的,如果换框架老本太大,所以根本不会思考,gRPC 尽管跨语言反对水平更好然而很多货色都须要本人造轮子,比方服务注册,服务发现,日志监控等。 过后在决定选用 Dubbo-go 的时候开发外部也有一些拥护的声音的,为什么不间接转 java,转 java 的话就没有跨语言通信的问题了,转 java 的问题在于入门老本高,而且对于整个公司的技术栈来说,放弃语言的多样性,能力更加从容的应答将来的业务变动,Go 自身是一个不弱于 Java 的高性能语言,非常适合微服务架构。 面临的挑战确定了框架选型后,我接到的首要任务便是要搭建出一套可疾速创立业务我的项目的脚手架,开发出基于 HTTP 协定的RPC 代理服务,部署须要接入公司的容器化部署平台,一切都是从零开始,在网上基本上找不到能够借鉴的材料。首先是要进行 Dubbo-go 我的项目的架构的布局,确定我的项目目录构造,通过参考 Dubbo-go Demo以及其它的 Go 我的项目最终确定了我的项目的目录构造,以下目录构造可作为参考。 为了与 Java服务注册核心保持一致,Dubbo-go 在我的项目选型上选用如下组件: 应用 zookeeper 作为注册核心nacos 作为配置核心数据库 orm 采纳 gorm音讯队列应用 RocketMQ为了减少开发的效率咱们在 provider 服务初始化前能够对配置进行精简只保留最根底的配置就能够相似上面这种,provider 服务的编码参考 Dubbo-go demo 就能够了 上面是服务启动的main办法代码 Dubbo-go RPC 服务网关设计个别应用 Dubbo,provider 端须要暴露出接口和办法,consumer 端要十分明确服务应用的接口定义和办法定义,还有入参返参类型等等信息,还须要基于provider端提供的 API,两端能力失常通信调用。 然而网关的应用场景是并不关怀要调用的接口的具体定义,网关只关注要调用的办法、传递的参数、能接管返回后果就能够了,实现网关代理的根底是 Dubbo/Dubbo-go 的泛化调用个性。 上面是 Dubbo-go 官网给的 demo,泛化服务加载后须要期待 3 秒能力实现调用,然而在理论应用的时候必定是不能实时加载服务去期待 3 秒,所以在网关利用启动时就须要加载缓存好须要泛化调的服务。 ...

March 7, 2021 · 2 min · jiezi

关于apache:ubuntu20041desktop上部署phpipam

1. 介绍 随着网络规模增大,单纯依附Excel等电子表格已难以无效进行网络管理。存在以下问题: 无奈对填写信息的正确与否进行校验不足网络资源可视化治理异地治理艰难多人保护时,存在版本问题 在参考Kenelite的IPAM随笔、维基百科-对于IPAM介绍后,开始了phpIPAM的装置应用。phpipam官网介绍有以下个性: 其中IP地址扫描、IP资源信息属性可配置、VLAN及子网治理以及用户权限的治理性能根本满足需要,要是带有OpUtils交换机端口映射治理性能就更好了! 2. 装置配置2.1装置apache,mysql,php#以下为官网教程的必要安装包ipam@ubuntu:/$ sudo apt-get install apache2ipam@ubuntu:~$ sudo apt-get install mariadb-serveripam@ubuntu:~$ sudo apt-get install php ipam@ubuntu:~$ sudo apt-get install php7.4-pearipam@ubuntu:~$ sudo apt-get install php7.4-gmpipam@ubuntu:~$ sudo apt-get install php7.4-mysqlipam@ubuntu:~$ sudo apt-get install php7.4-mbstringipam@ubuntu:~$ sudo apt-get install php7.4-gd#mcrypt为php加密反对扩大库,从 php 7.1.0 曾经将此扩大移除到PECL,须要手动装置,此处未进行装置ipam@ubuntu:~$ sudo apt-get install php7.4-curlipam@ubuntu:~$ sudo apt-get install git #以下为官网教程外的php扩大库#snmp扩大库为phpipam snmp功能模块的必要扩大库,倡议装置,其余本人看着办ipam@ubuntu:~$ sudo apt-get install php7.4-snmpipam@ubuntu:~$ sudo apt-get install php7.4-fpm php7.4-sqlite3 php7.4-gd php7.4-odbc php7.4-sybase php7.4-gmp php7.4-opcache php7.4-tidy php7.4-cli php7.4-imap php7.4-pgsql php7.4-xml php7.4-common php7.4-interbase php7.4-phpdbg php7.4-xmlrpc php7.4-intl php7.4-pspell php7.4-xsl php7.4-dba php7.4-json php7.4-readline php7.4-zip php7.4-dev php7.4-ldap php7.4-snmp php7.4-enchant php7.4-soap#2.2下载安装phpipam办法一:通过git下载 ...

February 12, 2021 · 2 min · jiezi

关于apache:Apache-Atlas入门

Apache Atlas介绍Apache Atlas是托管于Apache旗下的一款元数据管理和治理的产品,Apache Atlas提供api和一系列插件能够不便将数据库元数据信息导入到atlas中进行剖析,atlas也提供web界面对元数据进行治理,通过atlas,企业能够对数据库元数据建设资产目录,并对这些资产进行分类和治理,为数据分析,数据治理提供高质量的元数据信息。 什么是元数据企业外部可能运行多种类型数据库,从大类上能够分,大数据平台,sql数据库,nosql数据库,图数据库等,从具体的数据库类型可能是mysql,oracle,mongodb等,不论是什么类型的数据库,终归都是一个目标,存储数据,对怎么治理数据每个数据库有每个数据库的形式,以oracle为例 schema是一组数据库对象的汇合table是存储数据的实体column列示意数据库的每个属性view视图示意虚构表,示意一组查问的逻辑汇合materialview物化视图则是对视图的实体化同义词示意数据库对象的别名...等等那么schema,table,column这些形容数据的信息就是元数据,元数据库治理有什么用,咱们平时做开发可能很少会去思考这个问题,元数据管理对保障数据库品质是十分重要的,通过元数据管理 剖析表,视图等数据库对象间的依赖关系剖析字段间的传递关系,在元数据库治理中,咱们称之为数据血缘关系剖析是否存在反复字段,矛盾字段等为企业提供数据地图每个业务零碎可能会本人定义表,视图,这些数据从哪来又流往哪去,数据之间是否存在关联,和其余零碎的数据是否存在反复字段和矛盾字段,这些就是元数据管理要解决的问题。 apache atlas装置Atlas目前只能自行编译源码进行装置,Atlas应用java开发,然而是以python形式启动,所以装置之前,环境必须满足以下需要 jdk 1.8+maven3.xpython2.7+你能够从这里下载最新版本的Atlas代码,以2.1.0版本为例 $ tar -xvf apache-atlas-2.1.0-sources.tar.gz$ cd apache-atlas-sources-2.1.0$ mvn clean install$ mvn clean -DskipTests package -Pdist,embedded-hbase-solr装置相干依赖的过程可能会很长,有多长呢,大略一天左右吧,有时候还要迷信上下网能力下载下来,所以这货色不适宜急性子的人把玩 如果你看到了以下输入,祝贺你装置胜利 INFO] Reactor Summary:[INFO] [INFO] Apache Atlas Server Build Tools 1.0 ................ SUCCESS [ 0.904 s][INFO] apache-atlas 2.1.0 ................................. SUCCESS [ 7.481 s][INFO] Apache Atlas Test Utility Tools 2.1.0 .............. SUCCESS [ 6.085 s][INFO] Apache Atlas Integration 2.1.0 ..................... SUCCESS [ 7.561 s][INFO] Apache Atlas Common 2.1.0 .......................... SUCCESS [ 3.016 s][INFO] Apache Atlas Client 2.1.0 .......................... SUCCESS [ 0.334 s][INFO] atlas-client-common 2.1.0 .......................... SUCCESS [ 1.254 s][INFO] atlas-client-v1 2.1.0 .............................. SUCCESS [ 1.706 s][INFO] Apache Atlas Server API 2.1.0 ...................... SUCCESS [ 2.309 s][INFO] Apache Atlas Notification 2.1.0 .................... SUCCESS [ 4.108 s][INFO] atlas-client-v2 2.1.0 .............................. SUCCESS [ 1.118 s][INFO] Apache Atlas Graph Database Projects 2.1.0 ......... SUCCESS [ 0.202 s][INFO] Apache Atlas Graph Database API 2.1.0 .............. SUCCESS [ 1.349 s][INFO] Graph Database Common Code 2.1.0 ................... SUCCESS [ 1.351 s][INFO] Apache Atlas JanusGraph-HBase2 Module 2.1.0 ........ SUCCESS [ 1.747 s][INFO] Apache Atlas JanusGraph DB Impl 2.1.0 .............. SUCCESS [ 6.776 s][INFO] Apache Atlas Graph DB Dependencies 2.1.0 ........... SUCCESS [ 1.730 s][INFO] Apache Atlas Authorization 2.1.0 ................... SUCCESS [ 1.990 s][INFO] Apache Atlas Repository 2.1.0 ...................... SUCCESS [ 13.068 s][INFO] Apache Atlas UI 2.1.0 .............................. SUCCESS [ 44.313 s][INFO] Apache Atlas New UI 2.1.0 .......................... SUCCESS [ 42.839 s][INFO] Apache Atlas Web Application 2.1.0 ................. SUCCESS [01:13 min][INFO] Apache Atlas Documentation 2.1.0 ................... SUCCESS [ 1.562 s][INFO] Apache Atlas FileSystem Model 2.1.0 ................ SUCCESS [ 2.956 s][INFO] Apache Atlas Plugin Classloader 2.1.0 .............. SUCCESS [ 1.284 s][INFO] Apache Atlas Hive Bridge Shim 2.1.0 ................ SUCCESS [ 2.836 s][INFO] Apache Atlas Hive Bridge 2.1.0 ..................... SUCCESS [ 7.575 s][INFO] Apache Atlas Falcon Bridge Shim 2.1.0 .............. SUCCESS [ 1.455 s][INFO] Apache Atlas Falcon Bridge 2.1.0 ................... SUCCESS [ 2.289 s][INFO] Apache Atlas Sqoop Bridge Shim 2.1.0 ............... SUCCESS [ 0.244 s][INFO] Apache Atlas Sqoop Bridge 2.1.0 .................... SUCCESS [ 5.200 s][INFO] Apache Atlas Storm Bridge Shim 2.1.0 ............... SUCCESS [ 0.695 s][INFO] Apache Atlas Storm Bridge 2.1.0 .................... SUCCESS [ 2.701 s][INFO] Apache Atlas Hbase Bridge Shim 2.1.0 ............... SUCCESS [ 1.547 s][INFO] Apache Atlas Hbase Bridge 2.1.0 .................... SUCCESS [ 5.306 s][INFO] Apache HBase - Testing Util 2.1.0 .................. SUCCESS [ 2.853 s][INFO] Apache Atlas Kafka Bridge 2.1.0 .................... SUCCESS [ 2.156 s][INFO] Apache Atlas classification updater 2.1.0 .......... SUCCESS [ 0.955 s][INFO] Apache Atlas Impala Hook API 2.1.0 ................. SUCCESS [ 0.252 s][INFO] Apache Atlas Impala Bridge Shim 2.1.0 .............. SUCCESS [ 0.245 s][INFO] Apache Atlas Impala Bridge 2.1.0 ................... SUCCESS [ 3.901 s][INFO] Apache Atlas Distribution 2.1.0 .................... SUCCESS [ 01:08 h]启动$ cd apache-atlas-sources-2.1.0/distro/target/apache-atlas-2.1.0-server/apache-atlas-2.1.0/bin$ python atlas_start.pyconfigured for local hbase.hbase started.configured for local solr.solr started.setting up solr collections...starting atlas on host localhoststarting atlas on port 21000..............................Apache Atlas Server started!!!在浏览器关上http://localhost:21000/如果你看到以下画面,阐明启动胜利 ...

January 22, 2021 · 4 min · jiezi

关于apache:连续三年蝉联第一Flink-荣膺全球最活跃的-Apache-开源项目

2020年,一个注定会被历史铭刻的一年。在全球化单干受到挑战的大环境下,作为寰球最大的开源软件基金会,Apache 软件基金所引领的开源社区,仍然汇聚了寰球的顶尖开发人员,交出了一份鼓舞人心的成绩单。2021年1月1日,Apache 基金会在其官网博客上发表了文章《Apache in 2020 - By The Digits》[1],用数字回顾了2020 一整年的社区倒退: Apache 软件基金会在过来的一年中,来自各个领域共计 238 个我的项目共迭代了靠近 3500 个公布版本。Apache 软件基金会的所有开源软件在现在奉献着超过 220 亿美元的价值。Apache 的线上会议吸引了超过 150 个国家靠近 5750 名参与者,为期两天的Apache Con 更是吸引了超过 150 万的浏览。 而 Apache Flink 作为 Apache 软件基金会 199 个顶级我的项目中的一员,在这份报告中,无论从社区用户活跃度、开发者活跃度,还是曝光度等多个维度上,都获得了卓然的问题。 社区邮件列表活跃度:TOP 1邮件列表(mailing list)是 Apache 软件基金会各个我的项目罕用的,用于开发者和使用者之间进行沟通的渠道,个别分为开发者交换 (dev@ mailing list)和用户交换(user@ mailing list)两个频道,咱们往往会用邮件列表的活跃度来反映社区的交换沟通活跃度。2020年,Flink 获得了用户交换邮件频道第一名和开发者交换频道第二名的好问题: 特地值得一提的是,在前20名邮件列表中,Flink 社区是惟一提供中文用户交换频道的(user-zh@flink.apache.org),而且其活跃度在2020年中仅次于 Flink 的英文用户邮件列表。自2018年开始,Flink 在邮件列表的活跃度已间断三年蝉联第一,咱们很欣慰地看到越来越多的中文母语使用者在开源社区中发声,为寰球开源软件社区带来不可漠视的影响力。 Commits 提交:TOP 2开源我的项目在过来一年的新增提交(commit)数,是一种罕用的掂量开源我的项目开发活跃度的指标。Apache 软件基金会每年都会颁布去年的最多提交数的前五名,而 Flink 在2020年度新增 commit 数目中排名第二,仅次于路由引擎构建构建软件Apache Camel。如果把范畴限度在大数据计算/存储畛域,Apache Flink 则是当仁不让的开发者最沉闷的我的项目。如果放眼到过来的 2019 [2]、2018年 [3] 年度报告,每年的最沉闷的5个开源软件中,都能看到大数据畛域的身影,其中 Flink、Hadoop、HBase、Beam、Airflow、Spark 均有过上榜,咱们绘制了如下的表格来形容这一趋势(因为只颁布了 TOP5,所以有些我的项目会在某些年份落榜): ...

January 12, 2021 · 1 min · jiezi

关于apache:有道精品课实时数据中台建设实践

撰文/ 李荣谦 编辑/ Ryan 起源:有道技术团队(ID: youdaotech) 0 序言本期文章中,有道精品课技术团队将和大家分享有道精品课数据中台的架构演进过程以及 Doris 作为一个 MPP 剖析型数据库是如何为一直增长的业务体量提供无效撑持并进行数据赋能的。 本文以咱们在实时数仓选型的教训为切入点,进一步着重分享应用 Doris 过程中遇到的问题,以及咱们针对这些问题所做出的调整和优化。 1 背景概述1.1 业务场景依据业务需要,目前有道精品课的数据层架构上可分为离线和实时两局部。 离线零碎次要解决埋点相干数据,采纳批处理的形式定时计算。而实时流数据次要来源于各个业务零碎实时产生的数据流以及数据库的变更日志,须要思考数据的准确性、实时性和时序特色,处理过程非常复杂。 有道精品课数据中台团队依靠于其实时计算能力在整个数据架构中次要承当了实时数据处理的角色,同时为上游离线数仓提供实时数据同步服务。 数据中台次要服务的用户角色和对应的数据需要如下: 经营/策略/负责人次要查看学生的整体状况,查问数据中台的一些课程维度实时聚合数据;辅导/销售次要关注所服务学生的各种实时明细数据;品控次要查看课程/老师/辅导各维度整体数据,通过T+1的离线报表进行查看;数据分析师对数据中台 T+1 同步到离线数仓的数据进行交互式剖析;1.2 数据中台后期零碎架构及业务痛点 如上图所示,在数据中台1.0架构中咱们的实时数据存储次要依靠于 Elasticsearch,遇到了以下几个问题: 聚合查问效率不高数据压缩空间低不反对多索引的 join,在业务设计上咱们只能设置很多大宽表来解决问题不反对规范 SQL,查问老本较高2、实时数仓选型基于下面的业务痛点,咱们开始对实时数仓进行调研,调研了 Doris、ClickHouse、TiDB+TiFlash、Druid、Kylin,思考到查问性能、社区倒退、运维老本等多种因素,咱们最初抉择 Doris 作为咱们的实时数仓。 3、基于Apache Doris的数据中台2.03.1 架构降级在实现了实时数仓的选型后,咱们针对 Doris 做了一些架构上的扭转,以施展它最大的作用,次要分为以下几个方面: >>>>Flink双写 将所有 Flink Job 改写,在写入Elasticsearch的时候旁路输入一份数据到 Kafka,并对简单嵌套数据创立上游工作进行转化发送到 Kafka,Doris 应用 Routine Load 导入数据。 >>>>Doris On Es 因为之前咱们的实时数仓只有 Es,所以在应用 Doris 的初期,咱们抉择了通过 Doris 创立 Es 表面的形式来欠缺咱们的 Doris 数仓底表,同时也升高了查问老本,业务方能够无感知的应用数仓底表。 ...

December 31, 2020 · 1 min · jiezi

关于apache:Apache-APISIX-DevCon-2020-活动报名中

Apache APISIX 从刚写下第一行代码的石破天惊到 Apache 基金会顶级我的项目,只用了短短 15 个月工夫。 在这个过程中,Apache APISIX 始终在飞速的倒退和迭代,当然这离不开 130  多位 contributor 的奉献和社区几千位开发者的反对,也离不开数百家公司的实际和反馈。 一个好消息是 Apache APISIX DevCon 2020 线下开发者流动马上就来啦!这是一个分享和交换 Apache APISIX 在理论我的项目和开发中的教训绝佳机会。话不多说,上面就来介绍一下这次流动的详细信息。 大会工夫和地点:流动工夫:2020.12.26 周六:9 点 -- 18 点流动地点:上海市腾云大厦 日程安排:上午:9:30  温铭:Apache APISIX 的过来和将来 10:00  李扬:APISIX 与微服务网关模式在 Airwallex 的实际 10:40  吴旺:基于 APISIX 的跨集群流量治理在思必驰的实际利用 11:20  刁寿钧:  Apache APISIX 在腾讯云智能钛机器学习平台的实际与摸索 下午:13:30   王院生:Apache APISIX 与 Envoy 的联合 14:20   厉辉 & 金卫:Apache APISIX 在 k8s ingress 的最佳实际 15:10   张仁宇 & 李凌: 云原生网关 Apache APISIX 在 KubeSphere 容器平台的利用 ...

December 17, 2020 · 1 min · jiezi

关于apache:Web服务器王者之争Apache-vs-Nginx

Apache和Nginx都属于Web服务器,两者都实现了HTTP 1.1协定。无论是抉择哪个,都是依据利用场景来决定的,所以些文件仅从利用场景登程,来比照两者之间的各自特点。要让正确的工具,做出正确的事。Web服务器Web服务器也称为WWW(WORLD WIDE WEB)服务器,次要性能是提供网上信息浏览服务。 应用层应用HTTP协定。HTML文档格局。浏览器对立资源定位器(URL)。Web服务器经常以B/S(Browser/Server)形式提供服务。浏览器和服务器的交互方式如下: GET /index.php HTTP/1.1 +---------------+     +----------------+ |               +---->                 | |   Browser     |     |   Server       | |               <----+                 | +---------------+     +----------------+               HTTP/1.1 200 OK浏览器向服务器收回HTTP申请(Request)。服务器收到浏览器的申请数据,通过剖析解决,向浏览器输入响应数据(Response)。浏览器收到服务器的响应数据,通过剖析解决,将最终结果显示在浏览器中。Apache概述Apache HTTP Server是Apache软件基金会的一个凋谢源代码的网页服务器,能够在大多数计算机操作系统中运行,因为其跨平台和安全性。被宽泛应用,是最风行的Web服务器端软件之一。它疾速、牢靠并且可通过简略的API裁减,将Perl/Python等解释器编译到服务器中。 ...

November 27, 2020 · 6 min · jiezi

关于apache:好消息Elastic-Job-300beta-版本正式发布

本期看点 本周Apache ShardingSphere团队很快乐的向大家发表:ApacheShardingSphere ElasticJob-3.0.0-beta和ShardingSphere ElasticJob UI-3.0.0-beta的新版本正式公布了! ElasticJob是一个散布式调度解决方案,提供分布式工作的分片,弹性伸缩,全自动发现,基于工夫驱动、数据驱动、常驻工作和长期工作的多任务类型,工作聚合和动静调配资源,故障检测、主动修复,生效转移和重试,欠缺的运维平台和管理工具,以及对云原生的良好反对等性能个性,能够全面满足企业对于工作治理和批量作业的全面调度解决能力。 ElasticJob于2020年5月28日成为Apache ShardingSphere子项目。 本次公布版本通过一直的打磨优化做出的调整如下,欢送大家测试和应用: 01ElasticJob-3.0.0-betaAPI 变更API changes 重构作业监听器配置。重构作业谬误器程序配置。重构作业跟踪配置。新个性New Feature 反对HTTP类型作业。从内核模块中删除Spring Boot依赖项。作业执行谬误时反对电子邮件、微信、钉钉的告诉机制。Bug修复Bug fixes 修复One-Off Job无奈分布式执行的问题。修复应用PostgreSQL作为事件跟踪存储时,会反复创立已有的表导致事件跟踪不可用的问题。修复从新分片标记设置不正确时可能产生的死锁问题。02ElasticJob UI-3.0.0-beta加强Enhancement 在短少JDBC驱动程序时提供更明确的报错信息。反对作业自定义属性的增删改查管控。在作业运行历史记录页面中,减少作业名称和服务器IP显示项。降级Dockerfile。GitHub地址:https://github.com/apache/sha...https://github.com/apache/sha... 官方网站:https://shardingsphere.apache... 下载链接:https://shardingsphere.apache... 扫码关注咱们

November 13, 2020 · 1 min · jiezi

关于apache:Apache的虚拟主机配置及伪静态

虚拟主机个别是在配置多域名的时候 。咱们在一个服务器中能够配置很多个网站,这个时候就要有多份配置保障 每一个域名拜访网站的内容和源代码是不一样的 。废话不多说 首先 咱们进入Apache 装置后的目录 如下图 cd /etc/httpd/接下来咱们看下 conf 文件夹下 cd confll 咱们接着关上 httpd.conf 配置文件 vim httpd.conf 配置里边咱们能够看到 #咱们的服务目录地址ServerRoot “/etc/httpd” #监听的 80 端口 Listen 80 #加载 module 通过* 通配所有的 .conf 文件 Include conf.modules.d/*.conf #回绝内部拜访Require all denied #代码配置默认都是放到这个门路DocumentRoot "/var/www/html" 当然咱们能够随便指定咱们放代码的地位。 接下来咱们来配置一下咱们的虚拟主机 在 Esc 状态下通过命令大 G 来到文件的最上面 咱们搜一下 virtual。 在 Esc 状态下 /virtual当咱们进入编辑状态的时候如上图:提醒文件是只读的。咱们退出来 通过 sudo 提权的形式进行关上命令: sudo vim httpd.conf 咱们在 virtual 下边增加配置一个虚拟主机 监听 80 端口 <VirtualHost *:80>ServerName www.aqingkong.comDocumentRoot /data/www</VirtualHost>配置完之后重启咱们的服务器命令: ...

November 2, 2020 · 2 min · jiezi

关于apache:Mac-OS-终端起动关闭重启apache的方法

Mac OS 终端起动、敞开、重启apache的办法 关上终端 重启apache:sudo /usr/sbin/apachectl restart敞开apache:sudo /usr/sbin/apachectl stop开启apache:sudo /usr/sbin/apachectl start

September 30, 2020 · 1 min · jiezi

关于apache:ApacheConhome-中文场Community-主题分享

Apache 软件简直深刻到每个用户的计算设施之中,从笔记本电脑到平板、到挪动设施,笼罩企业和要害应用程序。Apache 我的项目驱动着互联网世界宽广畛域,比方治理海量数据、执行成千上万的浮点计算并存储各行业的泛滥在线数据。 本次线上大会 ApacheCon 将集中展现泛滥 Apache 我的项目的最新进展。 干流科技工程师琚致远将带来“从 Web Engineer 到 Apache APISIX PMC Juzhiyuan”主题分享。 琚致远,干流科技工程师,开源网关我的项目 Apache APISIX PMC,freeCodeCamp 中国外围组织者。致力于人人皆可编程,并激励更多人参加到开源我的项目中来。 在靠近6年的 Web 学习过程中,我从开源社区受害颇多,泛滥的社区资源在帮忙本人一直成长!在本次会议中,我将分享本人从一名 Web 工程师到继续参加开源我的项目的经验,以及退出 Apache APISIX 我的项目后,感触到的社区格调与文化,以便让更多开发者理解、参加并拥抱开源我的项目,一起更好地保护社区生态。 Tencent TVP of Chatbot 天使投资人李卓桓将带来“OSS.Chat - A bridge to the Apache Way in China”主题分享。 李卓桓,Tencent TVP of Chatbot,天使投资人。清华大学本科,中欧国际工商学院EMBA,北京邮电大学 CS Ph.D(在读)。曾任水木清华BBS站长,并创建 zixia bbs。OSS.Chat 我的项目 Committer,GitHub 8,000+ Stars 开源 Chatbot 我的项目 Wechaty 作者,Conversational AI 践行者。著有《智能对话与深度学习》、《Chatbot从0到1》、《扼要的TensorFlow 2》等技术作品。 OSS.Chat 我的项目的使命是为开源我的项目开发社群搭建一道买通 WeChat 及其它社交平台 (将来) 和 GitHub Issues 与邮件列表的三向沟通和翻译壁垒的桥梁,让 ASF 的文化、技术和合作流程能尽快地容易地被承受,而不是一开始就磕磕绊绊。通过 Chatbot 这种自动化流程机制,让开发者可能更加便捷的分享和沟通开源我的项目的开发信息。尤其是对社区凋谢材料的存档和二次演绎解决,是咱们认为很有意义的一件事件。透过 OSS.Chat 我的项目,咱们心愿能进一步推广、流传乃至于优化 Apache 我的项目社区的文化、技术、与合作。 ...

September 25, 2020 · 1 min · jiezi

关于apache:ApacheConhome-中文场ECharts-主题分享

Apache 官网寰球大会在线会议目前共有 170+ 场演讲议题,并有来自 DataStax, IBM, Imply, Instaclustr, NASA 喷气推动实验室, 橡树岭国家实验室, Red Hat, Tetrate, Two Sigma 与 VMWare 等公司或组织的泛滥大咖做主题分享。 百度工程师、Apache ECharts 我的项目 PPMC 宿爽将带来「ECharts: 是否同时“应用简略”和“强个性化定制”?”」主题演讲。 数据可视化图表库的主要职责是,找到适合的形象形式,来简化数据可视化的编程。这往往须基于通用案例、易用性、灵活性、可维护性等因素,形象造成概念和 API,提供给用户来学习和表白。 这其中,“开箱即用”式的简便,和个性化强定制能力,如何去共存?本主题分享了 echarts 多年演进中对这些形象的认知,以及通过“自定义系列”、“系列坐标系组合”等概念设计,来实现个性化图表的案例。

September 25, 2020 · 1 min · jiezi

关于apache:ApacheConhome-中文场中间件主题分享

Apache 软件基金会官宣:寰球社区在线大会 ApacheCon@Home 行将召开,2020 年 9月 29 日 - 10月1日共有 10 个主题分享、24 个论坛、170+ 场演讲与大家分享。 9 月 29 日的分享中,京东数科数字技术核心架构专家张亮将带来“Apache ShardingSphere 5.x 新性能”主题演讲。 张亮,京东数科数字技术核心架构专家,Apache ShardingSphere 项目管理委员会主席,开源我的项目 ElasticJob 创始人。 酷爱开源,推崇优雅代码。曾出版书籍《将来架构——从服务化到云原生》。 Apache ShardingSphere 5.x 的第一个版本行将公布。在 5.x 版本中,Apache ShardingSphere 从架构设计到产品范畴都做出了重大变革。 在这个版本中,ShardingSphere 遵循可插拔的体系架构设计理念,构建一个灵便的、可嵌入的和可扩大的我的项目。 新版本不再将数据分片作为产品惟一的外围性能主线,而是转向构建分布式数据库生态系统。 在新版本中,数据分片、分布式事务和数据库治理等外围性能与内核齐全拆散,成为内核可插拔组件的一部分。 整个产品的生态系统通过 SPI 织入的模式全面凋谢,将数据迁徙、弹性调度、数据加密、影子库压测等全新性能齐全融入产品生态。 本次分享将全面介绍 Apache ShardingSphere 5.x 的新性能及其架构状态。 GitHub: https://github.com/terrymanu,随时欢迎技术交换和斧正。 本次大会也将举办由社区自发组织、按“Apache 之道”予以特设的中文论坛,其余也有诸如德语、印地语还有西班牙语论坛,可点击 [](https://www.apachecon.com/aca... https://www.apachecon.com/acah2020/tracks/ 查看全副论坛议程。 请点击 https://www.apachecon.com/acah2020/ 报名本次大会。你选中的演讲会被记下,流动进行时可观看参加。

September 25, 2020 · 1 min · jiezi

关于apache:ApacheConhome-中文场大数据主题分享

ApacheCon 是 Apache 软件基金会官网的寰球系列大会,1998 年胜利举办第一届。ApacheCon 集中展现泛滥 Apache 我的项目的最新进展,相干内容皆由 Apache 我的项目及所在社区精心出现。各程度的参与者都能全方位、多层次地理解 Apache 我的项目翻新与停顿,比方:大数据、内容散发、金融科技、机器学习等等。 9月30日的演讲中,腾讯资深研发工程师张国成将带来“Apache TubeMQ: 大数据场景下的新的MQ抉择”主题演讲。 Apache TubeMQ(incubating)是撑持万亿级数据规模的分布式音讯队列(MQ)零碎,专一于海量数据下的数据传输和存储。与许多开源MQ我的项目相比,TubeMQ在稳定性,性能和低成本方面具备独特的劣势。 本次交换次要介绍大数据场景下数据传输从百亿到万亿量级变动时消息中间件(MQ)所面临的挑战,剖析TubeMQ是如何解决这类问题来满足业务须要;同时针对前面TubeMQ倒退进行探讨。 百度资深研发工程师陈明雨将带来“Apache Doris- 一款反对对海量数据进行疾速剖析的MPP数据库”主题演讲。 陈明雨,百度资深研发工程师,6年分布式系统研发教训,始终专一于分布式可扩大剖析型数据库畛域,主导参加了 ApacheDoris 从百度开源到进入 Apache 孵化器的全过程,同时也是 ApacheDoris 的 PPMC 成员。 Apache Doris(Incubating) 是一款反对对海量数据进行疾速剖析的MPP数据库。Doris 自设计之初,就秉承着极简运维、高效牢靠、易学易用的准则,为用户提供全面而高效的海量数据分析能力。 自 2018 年底进入 Apache 孵化器后,Doris 曾经公布了 5 个大版本,接管了来自社区100 多位开发者的奉献,并在多加互联网头部企业和垂直畛域企业落地和利用。 本次分享次要蕴含 Doris 的倒退历程、零碎架构、次要个性和利用案例四个局部,帮忙听众对 Doris 有一个全面而具象的意识。同时,本次分享也会介绍刚刚公布的 0.13 版本以及行将公布的 0.14 的新个性。在新版本中,咱们能看到 Doris 正在向着批量和实时对立的数仓畛域摸索,帮忙简化企业大数据平台架构。 最初会介绍 Doris 社区目前的倒退状况,心愿可能帮忙开发者更方便快捷的退出开源社区。 本次大会也将举办由社区自发组织、按“Apache 之道”予以特设的中文论坛,其余也有诸如德语、印地语还有西班牙语论坛,可点击 [](https://www.apachecon.com/aca... https://www.apachecon.com/acah2020/tracks/ 查看全副论坛议程。 请点击 https://www.apachecon.com/acah2020/ 报名本次大会。你选中的演讲会被记下,流动进行时可观看参加。 ...

September 25, 2020 · 1 min · jiezi

关于apache:圆桌论坛来自中国的新-ASF-成员分享开源世界的责任与义务

往年 ApacheCon 和其余 Apache 线下面对面流动转移到线上进行,人人都能够在家参加。本次大会话题多样精彩纷呈,共有 10 个主题分享、24 个论坛、170+ 场演讲。 来自中国的新 Apache 软件基金会会员吴晟、潘娟、姜宁、张铎将在圆桌会议中探讨深度参的与 Apache 基金会的工作,谈他们的开源历程,以及他们对Apache软件基金会和开源世界的责任与任务。 吴晟曾多是Apache SkyWalking VP 和PMC 成员;Apache ShardingSphere, Apache APISIX, 和 Apache Incubator 的 PMC 成员。将在次在公开会议中发表对于开源的演讲。 潘娟是京东数科高级DBA & Apache ShardingSphere PMC。次要负责京东数科分布式数据库开发、数据库运维自动化平台开发等工作。曾负责京东数科数据库自动化平台设计与开发,现专一于Apache ShardingSphere分布式数据库中间件平台的研发。 姜宁是 ASF 成员、华为技术专家,参加过 Apache Camel, Apache CXF, Apache ServiceMix 以及 Apache ServiceComb 等多个我的项目, 在退出华为之前,他是红帽软件的首席软件工程师,同时他也在 FuseSource, IONA 以及中航信工作过。 他在 QCon 北京,架构师峰会上做过无关微服务和分布式系统,以及开源相干演讲。 张铎是 ASF 成员、小米云平台部专家软件工程师。他是Apache HBase 我的项目的主席,也参加过一些其余的 Apache 我的项目,例如Hadoop,Yetus 等等。他还是数个Apache 孵化器我的项目的导师,例如 Nuttx 和 Pegasus。 ...

September 25, 2020 · 1 min · jiezi

关于apache:ApacheConhome-中文场讲师吴晟中国拥抱和共建-Apache文化的进展

Apache 软件基金会(ASF)发表,ApacheCon@Home 在线会议将于 2020 年 9月 29 日 - 10月1日召开,携 350 个开源我的项目的整体意愿开发者、管理员和主题演讲嘉宾带来 10 个主题分享、24 个论坛、170+ 场演讲。 ASF 的 35 个新会员中有 11 个来自中国。随着越来越多的我的项目从中国起步,从孵化器作为新的 TLP 毕业,中国有越来越多的人参加到 Apache 中来。 来自中国的 Apache 成员将在在线主题演讲中讲述他们的开源之旅,以及他们对 Apache 软件基金会和开源世界的责任和任务。 吴晟,ASF Member,Apache SkyWalking VP 和PMC 成员;Apache ShardingSphere, Apache APISIX, 和 Apache Incubator 的 PMC 成员。 吴晟在 2017 年退出了 Apache 社区,他作为来自中国的 Apache 我的项目导师,曾多次在公开会议中发表对于开源的演讲。这次他将在主题演讲中分享中国拥抱和共建Apache文化的停顿。

September 25, 2020 · 1 min · jiezi

关于apache:Apache修改默认端口

Apache批改默认端口1、批改配置文件(1)批改 /etc/apache2/ports.conf 将 NameVirtualHost *:80Listen 80# 改为本人须要的端口NameVirtualHost *:9000Listen 9000(2)有的须要批改default和httpd.conf配置文件 #查找配置文件sudo find / -name defaultsudo find / -name httpd.conf(3)重启apache sudo /etc/init.d/apache2 restart端口批改结束。apache的端口批改为9000了。2、批改默认网站目录:/etc/apache2/sites-available/default# 将/var/www 批改位你的门路: /var/www/html/3、批改默认主页文档:/etc/apache2/mods-available/dir.conf# 将 index.* 替换为 xxx.*4、最初不过随apache2的版本不同 文件的搁置地位不一样。 查看 DirectoryIndex 在apache2哪个文件外面:grep -iR DirectoryIndex /etc/apache2 # 我的Ubuntu 15.04是这样的root@ubuntu:/etc/apache2/sites-enabled# grep -iR DirectoryIndex /etc/apache2/etc/apache2/mods-enabled/dir.conf:DirectoryIndex index.html index.cgi index.pl index.php index.xhtml index.htm/etc/apache2/mods-available/dir.conf:DirectoryIndex index.html index.cgi index.pl index.php index.xhtml index.htm

September 23, 2020 · 1 min · jiezi

关于apache:译文|如何将-Pulsar-用作消息队列

原文作者为 Luk Perkins,来自 Splunk 团队。文章翻译已取得原作者受权。音讯队列是大多数大规模数据架构的次要组件。如果必须对数据进行实时处理,那么应用音讯队列是很好的抉择。 数据处理管道会产生各种故障,数据 consumer 可能会受到提早或齐全不能工作,网络分区可能会临时切断整个 consumer 组与数据管道的连贯等。 有些状况必须应用音讯队列,例如: 开发拼车应用程序,不思考顶峰时段的应用峰值,须要确保每个乘车申请最终只匹配到一位司机金融级事务交易管道须要同步申请解决,以避免数据失落搭建基于微服务的解决管道,前端为具备多个写入端点的 REST API(每秒进行数千次运算),须要确保即便后端微服务呈现故障,所有的工作对象都保留在零碎中音讯队列如何工作下图为音讯队列常见的工作形式(并对故障做出响应)的示意图: 在上图中,producer 1、2、3 和 4 通过音讯 broker 将音讯发送到管道,而 consumer 1、2、3 和 4 解决(而后确认)这些音讯。在本示例中,当 consumer 1 呈现故障时,会呈现十分重大的问题。Producer 会持续将数据传送到零碎中,但 consumer 1 不能持续解决音讯。Broker 应该开始存储所有本来将会用于 consumer 1 的音讯数据,直到 consumer 1 可能持续解决音讯。 从这个示例能够看出,对于堆栈中任何重要的音讯队列而言,稳固的存储组件都必不可少。侥幸的是,音讯队列与反对音讯队列的存储系统一样性能良好。如果存储组件易发故障、受到损坏,或运行迟缓,因此即使仅有一个组件呈现故障,也不能很好地应答,那么强烈建议大家更换存储部件。 引入 Apache Pulsar一般而言,由不同的零碎解决订阅-公布音讯和音讯队列。例如,典型的技术栈可能应用 Apache Kafka 解决公布-订阅音讯,应用 RabbitMQ 解决音讯队列。在这种状况下,尽管零碎工作良好,然而你须要同时部署、治理多个音讯零碎。 我最喜爱 Apache Pulsar 的一点就是,它能够轻松连贯订阅-公布音讯和音讯队列。Pulsar 是第一个为了同时解决订阅-公布音讯和音讯队列而开源的音讯零碎。 因为应用 Apache BookKeeper 分布式日志存储数据库作为存储组件,Pulsar 能够轻松地同时反对订阅-公布音讯和音讯队列。BookKeeper 作为日志存储系统,基于音讯 topic 数据结构而构建,反对程度扩大(减少 “bookie” 数量即可扩大容量),且运行迅速。 ...

September 22, 2020 · 2 min · jiezi

关于apache:年度开源盛会-ApacheCon-来临Apache-Pulsar-专场大咖齐聚

简介ApacheCon 是 Apache 软件基金会举办的年度社区盛会,汇聚泛滥 Apache 我的项目与社区成员,交流思想、共话合作,大会议题从大数据到机器学习、Web 框架等都有笼罩,是理解和相熟将来科技发展趋势的绝佳窗口。 2020 年 ApacheCon 大会全程线上举办,从 9 月 29 日到 10 月 1 日,会议共继续 3 天。Apache Pulsar 作为 Apache 软件基金会顶级我的项目,在本次大会开设了 Apache Pulsar 专场论坛。 专场详情:https://apachecon.com/acah202... 收费报名:https://hopin.to/events/apach... Apache Pulsar/BookKeeper 专场议题Apache Pulsar/BookKeeper 专场论坛共设置了 17 个议题,大部分围绕 Apache Pulsar 的行业利用案例、技术概念、周边生态等方向开展,分享各自最佳实际与教训。为了看得更分明,小编做了流动日历供大家参考。 大会报名各位感兴趣的小伙伴,连忙报名啦!这里再播送一遍报名地址:https://hopin.to/events/apach...。 或扫码报名: 参会指南要点✔ 会议报名/观看:须要提前进入大会报名平台进行报名✔ 整个大会都在线上举办,为保障参会体验,请保障网络晦涩,最低网络条件为下载速度5Mbit/s 和上传速度 2Mbit/s✔ 浏览器举荐 Google Chrome 和 Mozilla Firefox

September 22, 2020 · 1 min · jiezi

关于apache:Pulsar-Flink-Connector-250-正式发布

通过一直地致力,社区胜利公布 Pulsar Flink Connector 2.5.0 版本。Pulsar Flink Connector 集成了 Apache Pulsar 和 Apache Flink(数据处理引擎),容许 Apache Flink 向 Apache Pulsar 读写数据。 我的项目地址:https://github.com/streamnati... 上面将具体介绍 Pulsar Flink Connector 2.5.0 引入的新个性,心愿可能帮忙大家更好地了解 Pulsar Flink Connector。 背景Flink 是一款疾速倒退的分布式计算引擎,在 1.11 版本中,反对以下新个性: 外围引擎引入了非对齐的 Checkpoint 机制。这一机制明显改善了 Flink 容错机制,它能够进步重大反压作业的 Checkpoint 速度。提供一套新的 Source 接口。通过对立流和批作业 Source 的运行机制,反对罕用的外部实现,如事件工夫解决、watermark 生成和闲暇并发检测。这套新的 Source 接口能够极大地升高开发新 Source 的复杂度。Flink SQL 反对变动数据捕捉(Change Data Capture,CDC)。它使 Flink 能够不便地通过像 Debezium 这类工具来翻译和生产数据库的变动日志。Table API 和 SQL 也有助于文件系统连接器反对更多用户场景和格局,从而反对将流式数据从 Pulsar 写入 Hive 等场景。PyFlink 优化多个局部的性能,包含反对向量化的用户自定义函数(Python UDF)。这些改变使 Flink Python 接口能够与罕用的 Python 库(如 Pandas 和 NumPy)进行互相操作,从而使 Flink 更适宜数据处理与机器学习的场景。在新版本公布后,为了让小伙伴们尽快应用反对 Flink 1.11 的 Pulsar Flink Connector,咱们对新版 Pulsar Flink Connector 进行了降级。 ...

September 11, 2020 · 2 min · jiezi

关于apache:Apache-Pulsar-在-BIGO-的性能调优实战上

背景在人工智能技术的反对下,BIGO 基于视频的产品和服务受到宽泛欢送,在 150 多个国家/地区领有用户,其中包含 Bigo Live(直播)和 Likee(短视频)。Bigo Live 在 150 多个国家/地区衰亡,Likee 有 1 亿多用户,并在 Z 世代中很受欢迎。 随着业务的迅速增长,BIGO 音讯队列平台承载的数据规模呈现了成倍增长,上游的在线模型训练、在线举荐、实时数据分析、实时数仓等业务对音讯的实时性和稳定性提出了更高的要求。 BIGO 音讯队列平台应用的是开源 Kafka,然而随着业务数据量的成倍增长、音讯实时性和零碎稳定性要求一直进步,多个 Kafka 集群的保护老本越来越高,次要体现在: 数据存储和音讯队列服务绑定,集群扩缩容/分区平衡须要大量拷贝数据,造成集群性能降落当分区正本不处于 ISR(同步)状态时,一旦有 broker 产生故障,可能会造成丢数或该分区无奈提供读写服务当 Kafka broker 磁盘故障/使用率过高时,须要进行人工干预集群跨区域同步应用 KMM(Kafka Mirror Maker),性能和稳定性难以达到预期在 catch-up 读场景下,容易呈现 PageCache 净化,造成读写性能降落尽管 Kafka 的 topic partition 是程序写入,然而当 broker上有成千盈百个topic partition 时,从磁盘角度看就变成了随机写入,此时磁盘读写性能会随着 topic partition 数量的减少而升高,因而 Kafka broker 上存储的 topic partition 数量是有限度的随着 Kafka 集群规模的增长,Kakfa 集群的运维老本急剧增长,须要投入大量的人力进行日常运维。在 BIGO,扩容一台机器到 Kafka 集群并进行分区平衡,须要 0.5人/天;缩容一台机器须要 1 人/天为了进步音讯队列实时性、稳定性和可靠性,升高运维老本,咱们重新考虑了 Kafka 架构设计上的有余,调研是否从架构设计上解决这些问题,满足以后的业务要求。 下一代音讯流平台:PulsarApache Pulsar 是 Apache 软件基金会顶级我的项目,是下一代云原生分布式音讯流平台,集音讯、存储、轻量化函数式计算为一体。Pulsar 于 2016 年由 Yahoo 开源并捐献给 Apache 软件基金会进行孵化,2018 年成为Apache 软件基金会顶级我的项目。 ...

August 20, 2020 · 7 min · jiezi

关于apache:Pulsar-社区周报0808-0814

对于 Apache PulsarApache Pulsar 是 Apache 软件基金会顶级我的项目,是下一代云原生分布式音讯流平台,集音讯、存储、轻量化函数式计算为一体,采纳计算与存储拆散架构设计,反对多租户、长久化存储、多机房跨区域数据复制,具备强一致性、高吞吐、低延时及高可扩展性等流数据存储个性。 导语各位小伙伴们,Pulsar 社区周报来啦!每周 Pulsar 社区周报,为大家出现 Pulsar 客户端、broker、平安、Pulsar IO、社区活动等内容,帮忙社区小伙伴们把握 Pulsar 我的项目及社区每周停顿,也不便大家更好地参加到 Pulsar 社区中来! 感激本周以下小伙伴为 Apache Pulsar 添砖加瓦(排名不分先后,看看你有没有上榜): @gaoran10、@jianyun8023、@315157973、@ebyhr、@BewareMyPower、@hangc0276、@wolfstudy、@sijie、@srkukarni、@jiazhai、@merlimat、@sijia-w、@Jennifer88huang、@Mefl、@codelipenghui、@geetha-rangaswamaiah接下来,一起看看 08-08 ~ 08-14 有哪些值得你关注的停顿吧! 重要代码停顿因为 PR 较多,仅列举较大 PR 停顿,不包含本周全副动静上面 PR 均已 Merge 进 Pulsar 主分支[Transaction] 改良对生产事务音讯的反对。PR 地址:https://github.com/apache/pulsar/pull/7781贡献者:@gaoran10[Transaction] 反对将生产的事务型音讯发送到 Pulsar broker 并执行提交命令。PR 地址:https://github.com/apache/pul...贡献者:@gaoran10[Topic Policy] 反对在 Topic 级别设置存留配额。PR 地址:https://github.com/apache/pul...贡献者:@jianyun8023 [Topic policy] 反对在 Topic 级别设置 MaxUnackMessagesPerSubscription 。PR 地址: https://github.com/apache/pul...贡献者:@315157973[Topic policy] 反对设置 Topic 级别的音讯提早策略。PR 地址:https://github.com/apache/pul...贡献者:@315157973[Build] 将 Presto 降级到 332 版本。PR 地址:https://github.com/apache/pul...贡献者:@ebyhr[Pulsar-IO hdfs2] 减少从以后工夫创立子目录的配置,不便批量解决 HDFS 文件。PR 地址:https://github.com/apache/pul...贡献者:@BewareMyPower[Broker] 减少反对对 ZooKeeper 缓存执行器线程池大小可配置。PR 地址:https://github.com/apache/pul...贡献者:@hangc0276[Broker] 减少反对对 orderedExecutor 线程数可配置。PR 地址:https://github.com/apache/pul...贡献者:@hangc0276重要 Bug 修复备注: ...

August 19, 2020 · 1 min · jiezi

关于apache:特性预览Apache-顶级项目-Apache-Pulsar-261-版本

在正式分享 2.6.1 版本更新细节之前,冉小龙首先为咱们分享了两个相干 PIP 的内容。 一个是 PIP-47 中对于「基于工夫来进行版本更新」的打算。该 PIP 提出后,从 2.5.0 版本到目前行将公布的 2.6.1 版本中,工夫更短、公布频率更高成为最突出的特点。同时反馈周期快,根本是每三个月更新一个大版本。这样用户也能够大略理解版本的一个更新周期,增进了我的项目透明度。 另一个是 PIP-69 中打算在 Go Client 中集成 schema 相干的性能和个性,更多详情介绍能够参考下方:https://github.com/apache/pulsar/wiki/PIP-69%3A-Schema-design-for-Go-client。 版本更新状况此次 2.6.1 版本更新接管了来自社区的 112 次 commits,笼罩 broker、Pulsar Functions、Go Function、Pulsar SQL、Schema、Java/CPP Client 等层面。同时截止目前 Apache Pulsar 我的项目已有 6400+ star、1500+ fork,以及行将超过 300 人的 contributor 数量。 接下来就简略介绍一些 2.6.1 版本中的更新性能吧。 修复 Key_Shared 中 stick hash range 抵触的问题 Key_Shared 订阅模式能够保障用户在订阅到某个 topic 时,能够指定 producer message key。音讯会依据指定 key 的不同,通过 hash range 有序发送到不同的 consumer。 ...

August 19, 2020 · 2 min · jiezi

关于apache:简介Apache-顶级项目-Apache-Pulsar-成长回顾

对于 Apache PulsarApache Pulsar 是 Apache 软件基金会顶级我的项目,是下一代云原生分布式音讯流平台,集音讯、存储、轻量化函数式计算为一体,采纳计算与存储拆散架构设计,反对多租户、长久化存储、多机房跨区域数据复制,具备强一致性、高吞吐以及低延时的高可扩大流数据存储个性。本篇文章,咱们将带着刚刚圆满结束的 Pulsar Summit 精华版内容,为大家分享 Apache Pulsar 的成长历史。 对于 Pulsar Summit 会议本次 Pulsar Summit 次要是由 StreamNative 和 Splunk 主办,集结了来自欧洲、亚洲、北美洲泛滥国内大厂的 CEO、开发人员、数据架构师等。 还有来自 Pulsar Committer、Contributor 的实战经验分享,波及公布/订阅音讯、事件流、无服务器计算、实时剖析、事件驱动应用程序和治理生产中的要害工作等最佳实际。 Pulsar 我的项目的成长Pulsar 最后是以「集音讯和事件流为一体的云原生平台」呈现在众人背后。Pulsar 我的项目的撑持不仅仅是地域性的,其实更是一个全球性的开源我的项目,达到了几大洲用户/使用率同步增长的成果。 很多国际性公司,比方 Splunk、Narvar、Instructure、腾讯、虎牙等,这些公司大多看中了 Pulsar 的独特性能,开始用 Pulsar 代替之前的零碎进行部署本人的产品,也通过他们的用户扩充了 Pulsar 我的项目影响力和社区活跃度,使 Pulsar 取得了更多关注。 想要获取更多应用 Pulsar 来部署本人产品的公司列表,能够参考:https://pulsar.apache.org/en/powered-by/。 Pulsar 劣势 同时,在年初咱们整顿「Pulsar 年度报告」时,也总结出了 Pulsar 的一些劣势,比方: 能够减少产品敏捷性,让公司疾速应答市场变动;为业务开发解锁新的应用方向;升高开发成本以及改良客户体验等。Apache Pulsar 用其差异化特色吸引了越来越多的用户。 在考察中也发现,Pulsar 云原生、存储与计算拆散和以分片为核心的架构设计,是用户最青睐的亮点。还有可强伸缩性和高弹性,Pulsar 真的是把 MQ行业的特点拿捏的恰到好处呢,费用不太高还很无能,性价比超高的好嘛!! 咱们在收集 Pulsar 用户案例时也发现,大部分用户将 Pulsar 用作打造异步应用程序、外围我的项目等实际,或者是从 Kafka 等我的项目迁徙到 Pulsar 来构建 ETL 流水线(提取、转换、加载)操作等。这也是目前 Pulsar use case 的外围应用场景。 ...

August 18, 2020 · 2 min · jiezi

关于apache:Apache-APISIX-和-Envoy-性能大比拼

在CNCF组织的一场技术分享会上,第一次听到了 Enovy 这么一个货色,分享的嘉宾巴拉巴拉讲了一大堆,啥都没记住,就记住了一个特地新鲜的概念“通信总线”,前面 google 了下 Envoy 这个货色到底是什么,发现官网上如是形容: “_Envoy 是专为大型古代 SOA(面向服务架构)架构设计的 L7 代理和通信总线_” 也就是说, Envoy 是为了解决 Server Mesh 畛域而诞生一款 L7 代理软件,这里我网上找了一张图,我了解种的 Envoy 大略是如下的部署架构。(如果错了请大佬指教) 既然是L7的代理软件嘛,作为长年混迹 openresty 社区的老司机,天然忍不住把它拿来搞一搞,比照比照。 咱们抉择的比试对象是最近刚从 Apache 社区毕业的 APISIX,它是基于 OpenResty 实现的 API 网关。(其实也就是 L7 代理而后加了路由、认证,限流、动静上游等等之类的性能) 为什么抉择它呢,因为有一次社区分享的时候据说这货的路由实现十分棒,正好咱们的当初业务的路由零碎乌七八糟,扒拉了下 APISIX 的源码,发现的确是6到飞起,吊打我看到过的同类产品, 所以印象粗浅,就它了! 这里附上一张在 APISIX 官网扒拉的图,真是一图胜千言,一看就晓得这玩意儿是怎么工作的; 开搞吧,首先咱们去官网找到两个产品的最版本: Apache APISIX 1.5 和 Envoy 1.14 构建环境筹备压力测试客户端:wrk;测试次要指标包含:网关提早、QPS 和是否线性扩大;测试环境:微软云 Linux (ubuntu 18.04), Standard D13 v2 (8 vcpus, 56 GiB memory);测试形式1:采纳单核运行横向比照(因为它们都是基于 epoll 的IO模型,所以用单核压测验证它们的解决能力);测试形式2:采纳多核运行横向比照,次要是为了验证两者在增加多(过程|线程)的场景下其整体解决能力是否可能线性增长;测试场景这里咱们用 nginx 搭建了一个上游服务器,配置 2 个 worker,接管到申请间接应答 4k 内容,参考配置如下: ...

August 18, 2020 · 2 min · jiezi

关于apache:Apache-APISIX-和-Envoy-性能大比拼

在CNCF组织的一场技术分享会上,第一次听到了 Enovy 这么一个货色,分享的嘉宾巴拉巴拉讲了一大堆,啥都没记住,就记住了一个特地新鲜的概念“通信总线”,前面 google 了下 Envoy 这个货色到底是什么,发现官网上如是形容: “_Envoy 是专为大型古代 SOA(面向服务架构)架构设计的 L7 代理和通信总线_” 也就是说, Envoy 是为了解决 Server Mesh 畛域而诞生一款 L7 代理软件,这里我网上找了一张图,我了解种的 Envoy 大略是如下的部署架构。(如果错了请大佬指教) 既然是L7的代理软件嘛,作为长年混迹 openresty 社区的老司机,天然忍不住把它拿来搞一搞,比照比照。 咱们抉择的比试对象是最近刚从 Apache 社区毕业的 APISIX,它是基于 OpenResty 实现的 API 网关。(其实也就是 L7 代理而后加了路由、认证,限流、动静上游等等之类的性能) 为什么抉择它呢,因为有一次社区分享的时候据说这货的路由实现十分棒,正好咱们的当初业务的路由零碎乌七八糟,扒拉了下 APISIX 的源码,发现的确是6到飞起,吊打我看到过的同类产品, 所以印象粗浅,就它了! 这里附上一张在 APISIX 官网扒拉的图,真是一图胜千言,一看就晓得这玩意儿是怎么工作的; 开搞吧,首先咱们去官网找到两个产品的最版本: Apache APISIX 1.5 和 Envoy 1.14 构建环境筹备压力测试客户端:wrk;测试次要指标包含:网关提早、QPS 和是否线性扩大;测试环境:微软云 Linux (ubuntu 18.04), Standard D13 v2 (8 vcpus, 56 GiB memory);测试形式1:采纳单核运行横向比照(因为它们都是基于 epoll 的IO模型,所以用单核压测验证它们的解决能力);测试形式2:采纳多核运行横向比照,次要是为了验证两者在增加多(过程|线程)的场景下其整体解决能力是否可能线性增长;测试场景这里咱们用 nginx 搭建了一个上游服务器,配置 2 个 worker,接管到申请间接应答 4k 内容,参考配置如下: ...

August 18, 2020 · 2 min · jiezi

关于apache:致力打造下一代云原生分布式消息系统StreamNative-完成源码资本数百万美元-PreA-轮融资红杉中国种子基金跟投

Apache 顶级我的项目 Pulsar 背地的开源流数据公司 StreamNative 发表实现数百万美元 Pre-A 轮融资,本轮融资由源码资本领投。StreamNative 在创建初期即取得红杉中国种子基金天使轮投资,在本次 Pre-A 轮红杉中国种子基金持续跟投。 StreamNative(北京原流数据科技倒退有限公司,简称为 StreamNative),成立于 2019 年初,是一家开源根底软件公司。由 Apache 软件基金会顶级我的项目 Apache Pulsar™️、Apache BookKeeper™️ 外围开发者组建而成,围绕 Apache Pulsar 及 Apache BookKeeper 打造下一代流数据平台,目前是寰球惟一一家由 Pulsar 和 BookKeeper 我的项目原生外围开发者组建的守业公司。 音讯零碎作为大数据平台基础设施组件,对于构建大数据应用程序尤其要害。Pulsar 采纳计算与存储拆散的分层架构设计,反对多租户、长久化存储、多机房跨区域数据复制,具备强一致性、高吞吐以及低延时的高可扩大流数据存储个性,优雅地解决了目前风行音讯零碎如 Kafka 等在诸多场景遇到的技术瓶颈,并且能够大大降低 IT 设施投入、简化运维操作,晋升稳定性,助力业务疾速倒退。开发者无需批改任何代码,就能够应用 StreamNative 与合作伙伴开发的开源组件从其余零碎疾速迁徙到 Pulsar 平台。 目前已有泛滥国内外大型互联网和传统行业公司采纳 Pulsar,应用案例散布在人工智能、金融、电信运营商、直播与短视频、物联网、批发与电子商务、在线教育等多个行业,如美国有线电视网络巨头 Comcast、Yahoo!、腾讯、中国电信、中国移动、BIGO、VIPKID 等。 Pulsar 作为全球性开源我的项目,目前已有近 300 名世界各地的贡献者,最新版本为 2.6.0。得益于疾速成长的沉闷社区,和越来越宏大的贡献者、开发者群体,Pulsar 短短几周就能取得较大性能改良与版本迭代——这对开源我的项目成长来说至关重要。 StreamNative 创始人兼 CEO 郭斯杰示意:“咱们看到云原生是正在产生的重要技术演进。在云原生时代,开发者应该把更多精力放在应用程序和微服务上,而不是把工夫节约在保护简单的音讯和流数据基础设施上。Pulsar 作为下一代云原生分布式音讯流平台,集音讯、存储、轻量化函数式计算为一体,内置诸多其余零碎商业版本才有的个性,是云原生时代解决实时音讯流数据传输、存储和计算的最佳解决方案。 作为本轮融资的领投方,源码资本陈润泽示意:“随着数字基础设施的遍及,海量对象、流程和业务逐步被线上化,流数据的接管、存储和计算会成为企业的共性需要,流数据平台作为根底软件的重要位置日益晋升。而在企业减速上云的背景下,将来的根底软件肯定是开源和云原生的。StreamNative的产品架构和路线图正是很好地符合了这些趋势。StreamNative的团队有成熟的社区经营教训,也长期投身于前沿技术与产品翻新。咱们置信,团队可能在将来的企业数字化转型中表演重要角色。” 目前 StreamNative 团队成员工程师占比 80% 以上,开创团队成员曾就任于 Yahoo、Twitter、EMC 等出名大公司。本轮融资将减速 StreamNative 在产品研发、开源社区和生态构建方向的推动,StreamNative 也将在将来数月公布基于 Apache Pulsar 的云端产品。 ...

August 12, 2020 · 1 min · jiezi

关于apache:致力打造下一代云原生分布式消息系统StreamNative-完成源码资本数百万美元-PreA-轮融资红杉中国种子基金跟投

Apache 顶级我的项目 Pulsar 背地的开源流数据公司 StreamNative 发表实现数百万美元 Pre-A 轮融资,本轮融资由源码资本领投。StreamNative 在创建初期即取得红杉中国种子基金天使轮投资,在本次 Pre-A 轮红杉中国种子基金持续跟投。 StreamNative(北京原流数据科技倒退有限公司,简称为 StreamNative),成立于 2019 年初,是一家开源根底软件公司。由 Apache 软件基金会顶级我的项目 Apache Pulsar™️、Apache BookKeeper™️ 外围开发者组建而成,围绕 Apache Pulsar 及 Apache BookKeeper 打造下一代流数据平台,目前是寰球惟一一家由 Pulsar 和 BookKeeper 我的项目原生外围开发者组建的守业公司。 音讯零碎作为大数据平台基础设施组件,对于构建大数据应用程序尤其要害。Pulsar 采纳计算与存储拆散的分层架构设计,反对多租户、长久化存储、多机房跨区域数据复制,具备强一致性、高吞吐以及低延时的高可扩大流数据存储个性,优雅地解决了目前风行音讯零碎如 Kafka 等在诸多场景遇到的技术瓶颈,并且能够大大降低 IT 设施投入、简化运维操作,晋升稳定性,助力业务疾速倒退。开发者无需批改任何代码,就能够应用 StreamNative 与合作伙伴开发的开源组件从其余零碎疾速迁徙到 Pulsar 平台。 目前已有泛滥国内外大型互联网和传统行业公司采纳 Pulsar,应用案例散布在人工智能、金融、电信运营商、直播与短视频、物联网、批发与电子商务、在线教育等多个行业,如美国有线电视网络巨头 Comcast、Yahoo!、腾讯、中国电信、中国移动、BIGO、VIPKID 等。 Pulsar 作为全球性开源我的项目,目前已有近 300 名世界各地的贡献者,最新版本为 2.6.0。得益于疾速成长的沉闷社区,和越来越宏大的贡献者、开发者群体,Pulsar 短短几周就能取得较大性能改良与版本迭代——这对开源我的项目成长来说至关重要。 StreamNative 创始人兼 CEO 郭斯杰示意:“咱们看到云原生是正在产生的重要技术演进。在云原生时代,开发者应该把更多精力放在应用程序和微服务上,而不是把工夫节约在保护简单的音讯和流数据基础设施上。Pulsar 作为下一代云原生分布式音讯流平台,集音讯、存储、轻量化函数式计算为一体,内置诸多其余零碎商业版本才有的个性,是云原生时代解决实时音讯流数据传输、存储和计算的最佳解决方案。 作为本轮融资的领投方,源码资本陈润泽示意:“随着数字基础设施的遍及,海量对象、流程和业务逐步被线上化,流数据的接管、存储和计算会成为企业的共性需要,流数据平台作为根底软件的重要位置日益晋升。而在企业减速上云的背景下,将来的根底软件肯定是开源和云原生的。StreamNative的产品架构和路线图正是很好地符合了这些趋势。StreamNative的团队有成熟的社区经营教训,也长期投身于前沿技术与产品翻新。咱们置信,团队可能在将来的企业数字化转型中表演重要角色。” 目前 StreamNative 团队成员工程师占比 80% 以上,开创团队成员曾就任于 Yahoo、Twitter、EMC 等出名大公司。本轮融资将减速 StreamNative 在产品研发、开源社区和生态构建方向的推动,StreamNative 也将在将来数月公布基于 Apache Pulsar 的云端产品。 ...

August 12, 2020 · 1 min · jiezi

关于apache:超千人围观零基础高效适配折叠屏沙龙在线成功举办

2020年7月30日,由软件绿色联盟、华为联结举办的第六期主题技术沙龙流动以线上直播的形式于云端圆满闭幕。本场沙龙的分享嘉宾是来自华为、京东、微博的资深技术专家,以零根底高效适配折叠屏为主题在线畅聊,吸引了千余名开发者在线观看。沙龙的演讲内容聚焦了行业内前沿的折叠屏技术和热门的利用实际案例,重点围绕折叠屏手机平行视界、多窗口、拖拽适配三大方面,为更多的开发者高效适配折叠屏提供强有力撑持。 对于入门不久的高级开发者、小白来说,如何最轻松、最高效地进行折叠屏开发和部署?本文对此次线上沙龙流动的核心内容进行了整顿,感兴趣的小伙伴可通过视频学习。接下来让咱们一起回顾下本期沙龙精彩内容。 折叠屏手机平行视界分享首先是来自华为CBG软件部的高级工程师郑燕华重点介绍了平行视界简介、典型场景、案例分享、根底适配、重点参数介绍等方面的内容,为开发者解读了折叠屏手机平行视界配置接入办法、开发领导以及适配倡议。 平行视界以Activity为根本单位以左右窗口拆散显示技术、双窗口生命周期治理、双窗口显示模式和切换逻辑为核心技术的实现利用内分屏的零碎侧解决方案。利用能够依据本身业务设计分屏显示Activity组合,以实现合乎应用逻辑的最佳单利用多窗口用户体验,且反对一次开发,多端部署。 传统浏览形式VS平行视界浏览形式 典型场景 分屏示意图 京东App折叠屏手机平行视界性能适配新的技术能够带来多样化的体验,也须要泛滥产品能更好的为其适配,满足工作娱乐、生存购物需要等。京东App作为业余的综合网上购物商城,在本议题中,京东高级Android研发耿蕾从适配成果、适配过程、适配计划、布局四方面为开发者演示了京东App折叠屏手机的实战案例。 在适配的过程中,首先调研确定初步适配计划、预估批改老本。紧接着与业务方同步适配计划,对业务方提出的疑难进行解答,确定最终适配计划。 多窗口适配指南华为CBG软件部高级工程师朱登奎重点讲述了华为智慧分屏性能介绍、华为智慧分屏利用适配关键点的内容。其中,华为智慧分屏利用适配关键点: 1、如何申明反对多窗口 2、正确应用利用资源 3、正确处理Configuration变动 4、正确处理多窗口下的沉迷式 5、华为SDK接口的应用 讲师对以上5点为开发者进行了具体分享。 随着挪动终端设备的屏幕尺寸越来越大,多窗口模式势必成为利用显示的一种重要模式,华为的侧边栏Dock也会成为重要的手机利用入口,心愿越来越多的利用适配多窗口,丰盛手机的多窗口生态。 折叠屏连续性和拖拽适配介绍软件绿色联盟对国内TOP1000支流利用进行了适配评测剖析,评测数据显示,折叠屏适配率为90%,整体体现优异。在18类千款支流利用中,其中游戏类、儿童类利用适配完成率低于90%,需重点关注折叠屏开发领导系列内容并进行改良。 来自华为的折叠屏项目经理闫鸿飞次要分享了MateX规格和接口介绍、根底适配、典型案例、开发与调试、拖拽等内容,帮忙开发者高效适配折叠屏。那针对折叠屏这一翻新机型,适配的根底要求是什么呢? 利用的所有页面在折叠态和开展大屏态下都能全屏显示,UI显示失常;利用的所有页面在折叠态和开展大屏态之间切换都能保障用户业务不中断,UI显示失常;屏幕折叠开展时保障业务的连续性和UI调整。形式1:页面不重启,动静调整布局 形式2:页面重启,重启前保留页面和用户数据的形式 不重启:须要调整的显示内容不多,倡议抉择。在onConfigurationChanged办法中通过代码动静调整UI来适配;从新初始化View,把View和数据从新绑定即可。重启:UI简单,须要动静调整的中央多,倡议针对大屏独自写一套layout资源放在(layout-sw600dp)目录上面。在销毁activity之前,通过onSaveInstancesState()存储状态,在onCreate()或者是onRestoreInstanceState()进行状态的复原。微博折叠屏手机拖拽适配教训分享折叠屏手机在微博公布器的场景里是如何实现文字、图片、视频拖拽的呢?在这个议题中,来自新浪微博的高级Android工程师李伟将议题内容划分为3个局部进行介绍,别离是: 拖拽成果展现实现计划解析微博拖拽二期布局实现计划解析中,分屏拖拽实现波及的API有: 技术在一直变革,作为开发者须要随着变革摸索新的开发设计解决方案,置信对于折叠屏的翻新体验还有更多可能性。不同的产品和性能会有新的要求,期待大家提出更好的计划。

August 3, 2020 · 1 min · jiezi

apache虚拟主机配置

apache2.4的最终配置成果:httpd.conf Listen 19010# Virtual hostsInclude conf/extra/httpd-vhosts.confhttpd-vhosts.conf # IP:Port,以端口号配置虚拟机<VirtualHost 127.0.0.1:19010> # 网站谬误时提醒的分割管理员邮箱(可不配置) ServerAdmin webmaster@dummy-host.example.com # 虚拟主机根目录 DocumentRoot "${SRVROOT}" # 服务器名称(可不配置) ServerName dummy-host.example.com # 服务器别名(可不配置) ServerAlias www.dummy-host.example.com # 谬误日志 ErrorLog "logs/dummy-host.example.com-error.log" # 拜访日志 CustomLog "logs/dummy-host.example.com-access.log" common # 拜访目录的配置,能够是其的一个子文件夹 <Directory "${SRVROOT}/public"> # 管制特定目录将启用哪些服务器个性 Options FollowSymLinks # 指明Apache服务器是否去找.htacess文件作为配置文件 AllowOverride All # 管制申请是否能够拜访 Require all granted </Directory></VirtualHost>局部参数具体阐明: Options FollowSymLinksOptions指令是Apache配置文件中一个比拟常见也比拟重要的指令,Options指令能够在Apache服务器外围配置(server config)、虚拟主机配置(virtual host)、特定目录配置(directory)以及.htaccess文件中应用。Options指令的次要作用是管制特定目录将启用哪些服务器个性。All 示意除 `MultiViews`之外的所有个性。这也是Options指令的 **默认设置**。None 示意不启用任何的服务器个性。FollowSymLinks 服务器容许在此目录中应用符号连贯。如果该配置选项位于 `<Location>`配置段中,将会被疏忽。Indexes 如果输出的网址对应服务器上的一个文件目录,而此目录中又没有 `DirectoryIndex`指令(例如: `DirectoryIndex index.html index.php`),那么服务器会返回由 `mod_autoindex`模块生成的一个格式化后的目录列表,并列出该目录下的所有文件。MultiViews ...

July 10, 2020 · 2 min · jiezi

centos74升级apachemalformed-header-from-script

遇到问题:centos7.4升级httpd从2.4.6到2.4.41后网页登录就直接退出。查看httpd错误日志:malformed header from script 'pmc_fcgi': Bad header: xc7xebxb2xbbxd2xaaxd6xd8xb8xb4xb3xf5xcaxbcxbbxafxa3xa1 解决办法:修改配置文件/etc/httpd/conf/httpd.conf,在LoadModule注释下边添加LoadModule fastcgi_module modules/mod_fastcgi.so 后续:运维在添加时将该该句放置在配置文件最后,发现依然报错。可能原因是:自定义的fcgi在conf.modules.d下的conf文件配置。加载module应该在读取conf(Include conf.modules.d/*.conf)之前。

July 6, 2020 · 1 min · jiezi

Apache-BookKeeper-简介

原作者:Sijie Guo翻译:StreamNative-SijiaApache BookKeeper 是企业级存储系统,旨在保证高持久性、一致性与低延迟。Pulsar 由雅虎研究院(Yahoo! Research)开发,旨在实现 Hadoop 分布式文件系统(HDFS)NameNode 的高可用,在此之前,NameNode 不具备高可用特性,存在单点故障的问题。自 2011 年起,BookKeeper 开始在 Apache ZooKeeper 下作为子项目孵化,并于 2015 年 1 月作为顶级项目成功问世。在这四年间,Twitter、Yahoo、Salesforce 等公司使用 BookKeeper 存储和服务重要数据,并支撑了许多不同场景。本文将简要介绍 BookKeeper 的概念和相关术语。 背景介绍BookKeeper 的开发者(Benjamin Reed、Flavio Junqueira、Ivan Kelly)凭借搭建 ZooKeeper 的经验设计了一个灵活的系统,能够支持多种工作负载。最初,BookKeeper 是分布式系统的预写式日志(WAL)机制。现在 BookKeeper 已经发展成为支持多个企业级系统的基础构建模块,如:Twitter 的 EventBus、雅虎的 Apache Pulsar 等。 BookKeeper 是什么?BookKeeper 是一种优化实时工作负载的存储服务,具有可扩展、高容错、低延迟的特点。根据我们多年的工作经验,企业级的实时存储平台应符合以下几项要求: 以极低的延迟(小于 5 毫秒)读写 entry 流能够持久、一致、容错地存储数据在写数据时,能够进行流式传输或追尾传输有效地存储、访问历史数据与实时数据BookKeeper 的设计完全符合以上要求,并广泛用于多种用例,例如为分布式系统提供高可用性或多副本(如 HDFS NameNode 节点、Twitter 的 Manhattan key-value 存储);在单个集群中或多个集群间(多个数据中心)提供跨机器复制;为发布/订阅(pub-sub)消息系统(如 Twitter 的 EventBus、Apache Pulsar)提供存储服务;为流工作存储不可变对象(例如:检查点数据的快照)等。 BookKeeper 的概念及术语BookKeeper 复制并持久存储日志流。日志流是形成良好序列的记录流。 记录数据以不可分割记录的序列,而不是单个字节写入 Apache BookKeeper 的日志。记录是 BookKeeper 中最小的 I/O 单元,也被称作地址单元。单条记录中包含与该记录相关或分配给该记录的序列号(例如递增的长数)。客户端总是从特定记录开始读取,或者追尾序列。也就是说,客户端通过监听序列来寻找下一条要添加到日志中的记录。客户端可以单次接收单条记录,也可以接收包含多条记录的数据块。序列号也可以用于随机检索记录。 ...

July 3, 2020 · 2 min · jiezi

为什么选择-Apache-BookKeeper第-1-部分

原作者:Sijie Guo翻译:StreamNative-SijiaApache BookKeeper 针对实时工作负载进行了优化,是可扩展、可容错、低延迟的日志存储服务。BookKeeper 最初由雅虎研究院(Yahoo! Research)开发,而后于 2011 年作为 Apache ZooKeeper 的子项目孵化,最终在 2015 年 1 月作为 Apache 的顶级项目问世。自最初引入以来,诸如 Twitter、Yahoo!、Salesforce 等公司广泛使用 BookKeeper 在多种用例中存储、服务重要数据。在本文中,我将介绍 BookKeeper 如何确保持久性、一致性与低延迟,还会重点介绍 BookKeeper 的保证和关键特性,这些内容都是开源的。 在上一篇文章中,我对 Apache BookKeeper 进行了技术层面的概述,并介绍了一些相关的概念和术语。一个 BookKeeper 集群包括: Bookies:一组独立的存储服务器元数据存储系统:用于服务发现和元数据管理BookKeeper 客户端可以使用较高级别的 DistributedLog API(也称为日志流 API)或较低级别的 ledger API。Ledger API 允许用户直接与 bookies 交互。下图即为 BookKeeper 安装的典型示例。 ![图1 典型的 BookKeeper 安装(通过多个 API 连接的应用程序)](https://upload-images.jianshu... 流存储要求在 Apache BookKeeper 简介一文中已经提到,实时存储平台应该同时满足以下要求: 即使在强持久性条件下,客户端也能够以极低的延迟(小于 5 毫秒)读写 entry 流能够持久、一致、容错地存储数据在写入时,客户端能够进行流式传输或追尾传输有效存储数据,支持访问历史数据与实时数据BookKeeper 通过提供以下保证来同时满足上述各项要求: 保证说明多副本复制数据并将其持久存储在多台机器上,或存储在多个数据中心以保证容错。持久性复制成功后,可以实现持久存储数据。在向客户端发送确认前,强制启用 fsync。一致性通过简单、可重复读取的一致性模型保证不同读者之间的一致性。可用性通过 ensemble 更改和推测读取提高读写可用性,同时增强一致性和持久性。低延迟通过 I/O 隔离来保护读写延迟,同时保持一致性和持久性。多副本BookKeeper 在一个数据中心内的多个机器上,或是多个数据中心之间,复制每条数据记录并存储多个副本(通常是 3 个或 5 个副本)。一些分布式系统使用主/从或管道复制算法在副本之间复制数据(例如,Apache HDFS、Ceph、Kafka 等),BookKeeper 的不同之处在于使用 quorum-vote 并行复制算法来复制数据,以确保可预测的低延迟。图 2 即为 BookKeeper 集成中的多副本。 ...

July 3, 2020 · 2 min · jiezi

windows-apache和php安装

apache下载地址:https://www.apachehaus.com/cg...php下载地址:https://windows.php.net/downl... 1.apache安装apache下载后解压,使用cmd进入bin,执行命令: httpd.ext -k install为windows安装apache。安装成功后可在计算机管理->服务中看到:安装成功时会自动尝试启动此时如果没有修改过httpd.conf会有如下错误:该错误进入conf/httpd.conf进行修改serverRoot,如下图:修改后可正常启动。在地址栏上输入localhost,可见下图:apache安装成功。 2.php安装php下载后解压,进入主目录,复制php.ini-development为php.ini。修改php.init的扩展库路径,如下图:修改php.init启用需要的扩展如下图:再打开apache的httpd.conf,进行如下配置: # php7 support  LoadModule php7_module "D:\ProgramFiles\php-7.2.31/php7apache2_4.dll"AddHandler application/x-httpd-php .php# configure the path to php.iniPHPIniDir "D:\ProgramFiles\php-7.2.31"在apache的htdocs下新建phpinfo.php,内容如下: <?php phpinfo();?>重新启动apache,在浏览器地址栏上输入: http://localhost/phpinfo.php看到如下图则php安装成功。

June 29, 2020 · 1 min · jiezi

windows-apache和php搭配问题

windows下apache和php的版本搭配是个常见的问题,这里记录一下自己的选择。如果windows下使用IIS,则忽略此文章。apache下载地址:https://www.apachehaus.com/cgi-bin/download.plxphp下载地址:https://windows.php.net/download/ 1.vc进入下载地址后apache和php都有vc9,vc11,vc13vc15等版本选择,x86和x64就不解释,看自己的操作系统是32位还是64位进行选择。下面对vc进行一下说明:VC9 => Visual C++ 2008 x86|x64 RedistributableVC11 => Visual C++ 2012 x86|x64 RedistributableVC14 => Visual C++ 2013 x86|x64 RedistributableVC15 => Visual C++ 2015-2019 x86|x64 Redistributable如果你的操作系统不存在你需要下载对应的vc版本需要你另外安装对应的vc,建议直接下载操作系统对应的vc版本 2.ts和ntsts(Thread-Safety)即线程安全,多线程访问时,采用了加锁机制,当一个线程访问该类的某个数据时,进行保护,其他线程不能进行访问直到该线程读取完,其他线程才可使用。不会出现数据不一致或者数据污染php以ISAPI方式加载的时候选择这个版本.,php以ISAPI方式加载的时候选择这个版本. nts(None-Thread Safe)即非线程安全,就是不提供数据访问保护,有可能出现多个线程先后更改数据造成所得到的是 脏数据php以fast cgi方式运行的时候选择这个版本,具有更好的性能;ISAPI(Internet Server Application Programming Interface), 通常是指被http服务器所加载,以服务器的模块形式运行,由微 软提出,故只能在win平台上运行,例如win下的apache,iis[据说用fast cgi 方式工作更稳定],而linux上php 则以 Apache模块或者php-fpm的方式运行。 ts和nts是在php的版本中进行选择,因为apache的工作模式是线程安全,所以php选择的也是ts的版本。另外apache在配置php是需要使用php7apache2.4.dll(php5则是php5apache2.2.dll),如果是nts版本则没有则这个dll,因此不要下错了。 3.版本apache2.2的版本最高支持到php5.4 php5.5以上只能使用apache2.4

June 28, 2020 · 1 min · jiezi

apache-PHP-隐藏-indexphp-报错-No-input-file-specified-解决办法

在.htaccess中修改(如果是框架,则在public下的.htaccess) <IfModule mod_rewrite.c>Options +FollowSymlinks -MultiviewsRewriteEngine onRewriteCond %{REQUEST_FILENAME} !-dRewriteCond %{REQUEST_FILENAME} !-fRewriteRule ^(.*)$ index.php [L,E=PATH_INFO:$1]</IfModule>OJBK

June 24, 2020 · 1 min · jiezi

Web-服务器显示-no-input-file-specified

今天部署服务器时,显示no input file specified,一度以为是Apache和Nginx的伪静态设置错误,又在另一个服务器试了下,发现没问题,应该是环境配置出了问题,切换了个PHP版本,发现可以了,对比两个版本的php.ini文件,发现以前修改过open_basedir open_basedir 将php所能打开的文件限制在指定的目录树中,包括文件本身。当程序要使用例如fopen()或file_get_contents()打开一个文件时,这个文件的位置将会被检查。当文件在指定的目录树之外,程序将拒绝打开将其注释后,问题解决

June 3, 2020 · 1 min · jiezi

成为Apache官方认可的Committer有什么优势

什么是Apache软件基金会?Apache软件基金会(Apache Software Foundation),是当今最具影响力的非盈利性开源软件项目组织,正式成立于1999年,主要由开发者与用户的团体组成。在Apache软件基金会主导下,已有350多个顶级开源项目毕业,包括全球最著名的网络服务器软件Apache HTTP Server。秉持着“开放、创新、社区”的精神,很多Apache项目已经建立起强大成功的生态圈,社区充满活力。 除了许多在信息技术领域十分具有影响力的项目外,Apache许可证(Apache License),Apache贡献者协议许可(CLAs)和开放合作的模式(Apache Way)也在业内有着突出的贡献,其影响力远远扩大到Apache软件基金会以外。 Apache软件基金会如今已成为现代开源软件生态系统的基石。 为什么要成为Apache committer?说了这么多,不管大家之前对Apache软件基金会了解到了什么程度,都可以看出,这是一个极具影响力的组织,在业内广受认可。 如果能够成为一名官方承认的committer,不仅是对自己的极大认可,表明自身有能力参与到Apache级的项目开发中,并作出切实的贡献;而且还能够受到业内广泛尊重,无论是对求职还是升职加薪都很有帮助。 简单来说,不管是和其他小伙伴们炫耀,还是写到简历上都倍儿有面子 并且,官方认可的committer还会获取带@apache后缀的邮箱,还能名列Apache网站上 (http://people.apache.org/comm...) 在世界上千百万的工程师中,只有极少数的人才能成为committer拥有这些特权,是不是很诱人呢? 想象一下,小伙伴们浏览Apache网站时看到了你的名字,或者和面试官发邮件时,他们会不会有种不明觉厉的感觉,形象瞬间就高大上了有木有! 如何成为官方认可的committer?下面就是本篇文章的重点啦,需要做些什么,才会成为一名官方认可的committer呢? 活跃地参与到Apache项目中,比如Apache ShardingSphere(Incubating)即可。 不如从领个任务练练手开始?目前公布出的任务如下,欢迎领取: 实现使用Inline表达式对Sharding-SpringBoot进行规则配置 https://github.com/sharding-s... 实现使用SpringBoot占位符方式对Sharding-SpringBoot进行规则配置 https://github.com/sharding-s... 我们以后也会定期在GitHub上以issue的方式发布一些开发功能任务, 欢迎通过订阅我们的邮件列表关注,具体方式可参照官网: http://shardingsphere.io/comm... 通过订阅Apache ShardingSphere的邮件列表,还可以了解到Apache ShardingSphere的最新项目进展,功能开发计划,Bug列表等;还能与ShardingSphere开发人员直接对话,讨论您遇到的问题,您的想法和建议等,我们一定会积极回复。 P.S. ShardingSphere最近完成了向Apache过渡的重要一步,正式将官网和GitHub迁移到了Apache网站。 以下是迁移后的网址: 官网(http://shardingsphere.apache....) GitHub(https://github.com/apache/inc...) 结语Apache ShardingSphere(Incubating)自2016开源以来,不断精进、不断发展,被越来越多的企业和个人认可:Github上收获6000+的stars,70+公司企业的成功案例。此外,越来越多的企业和个人也加入到Apache ShardingSphere(Incubating)的开源项目中,为它的成长和发展贡献了巨大力量。 我们从未停息过脚步,聆听社区伙伴的需求和建议,不断开发新的、强大的功能,不断使其健壮可靠! 开源不易, 我们却愿向着最终的目标,步履不停! 那么,正在阅读的你,是否可以助我们一臂之力呢?分享、转发、使用、交流,以及加入我们,都是对我们最大的鼓励! 项目地址: https://github.com/apache/inc... 更多信息请浏览官网: http://shardingsphere.apache....

June 2, 2020 · 1 min · jiezi

apache-经常无法访问目录列表显示-403-forbidden

apache经常无法访问目录列表,显示403 forbidden开发学习时,每次重置apache时,老是报错:Forbidden You don't have permission to access / on this server.,真是气死人 我统计一下我碰到过的问题和解决办法 首先Linux的话网站目录权限直接改成755 解决办法1: 找到 /usr/local/apache/conf/httpd.conf Include conf/extra/httpd-vhosts.conf由于vhosts刚装时没有配置过,将其注释了掉,然后重启apache就能访问了 解决办法2: 把index.php和|.php(PHP探针,没有的话就不用动)文件名修改掉 解决办法3: 这个困扰了我很久,改了apache配置文件也没用后来发现是根目录.htaccess文件被我设置成-indexs,改成+indexs就行了![.htaccess](https://cdn.learnku.com/uploads/images/202005/26/34227/vHz8RnYmuy.png!large)

May 26, 2020 · 1 min · jiezi

Tomcat实战调优方案

作者 | 牛迁迁 来源 | https://blog.csdn.net/u010028... <p><font size="4">Tomcat的默认配置,性能并不是最优的,我们可以通过优化tomcat以此来提高网站的并发能力。提高Tomcat的性能可以分为两个方向。</font></p><p><font size="6" color="3399dd">服务器资源</font></p> <p><font size="4">服务器所能提供CPU、内存、硬盘的性能对处理能力有决定性影响,所以说服务器性能牛B,Tomcat也不会太差。当然提高服务器的硬件配置,是需要大量RMB的支持的。所以不到万不得已不会采用这种方式,一般公司会采取下面这种通过优化配置,来提升Tomcat性能的方式。</font></p> <p><font size="6" color="3399dd">优化配置</font></p> <p><font size="4">优化配置之前,我们需要配置一个tomcat管理员账户,来登录查看Tomcat控制台提高的各种参数。</font></p> <p><font size="4">在conf/ tomcat-users.xml下添加用户:</font></p> <pre class="prettyprint" name="code"><span class="hljs-tag"><<span class="hljs-title">role</span> <span class="hljs-attribute">rolename</span>=<span class="hljs-value">"manager"</span>/></span><span class="hljs-tag"><<span class="hljs-title">role</span> <span class="hljs-attribute">rolename</span>=<span class="hljs-value">"manager-gui"</span>/></span><span class="hljs-tag"><<span class="hljs-title">role</span> <span class="hljs-attribute">rolename</span>=<span class="hljs-value">"admin"</span>/></span><span class="hljs-tag"><<span class="hljs-title">role</span> <span class="hljs-attribute">rolename</span>=<span class="hljs-value">"admin-gui"</span>/></span><span class="hljs-tag"><<span class="hljs-title">user</span> <span class="hljs-attribute">username</span>=<span class="hljs-value">"tomcat"</span> <span class="hljs-attribute">password</span>=<span class="hljs-value">"tomcat"</span> <span class="hljs-attribute">roles</span>=<span class="hljs-value">"admin-gui,admin,manager-gui,manager"</span>/></span><div class="hljs-button {2}" data-title="复制"></div></pre> <p><font size="4">启动tomcat,登录查看信息:http://127.0.0.1:8080/</font></p> <p></p><center><img src="https://img-blog.csdn.net/201...; alt="这里写图片描述" title=""></center><p></p> <p></p><center><img src="https://img-blog.csdn.net/201...; alt="这里写图片描述" title=""></center><p></p> <p><font size="5" color="3399dd">tomcat的3种运行模式 </font></p> <p><font size="4">tomcat的运行模式有3种:</font></p> <p><font size="4">bio: 默认的模式,性能非常低下,没有经过任何优化处理和支持.</font></p> <p><font size="4">nio: nio(new I/O),是Java SE 1.4及后续版本提供的一种新的I/O操作方式(即java.nio包及其子包)。Java nio是一个基于缓冲区、并能提供非阻塞I/O操作的Java API,因此nio也被看成是non-blocking I/O的缩写。它拥有比传统I/O操作(bio)更好的并发运行性能。</font></p> <p><font size="4"> apr: 安装起来最困难,但是从操作系统级别来解决异步的IO问题,大幅度的提高性能.</font></p> <p><font size="4">启动NIO模式</font></p> <p><font size="4">修改server.xml里的Connector节点,修改protocol为org.apache.coyote.http11.Http11NioProtocol</font></p> <p></p><center><img src="https://img-blog.csdn.net/201...; alt="这里写图片描述" title=""></center><p></p> <p></p><center><img src="https://img-blog.csdn.net/201...; alt="这里写图片描述" title=""></center><p></p> <p><font size="5" color="3399dd">执行器优化(线程池)</font></p> <p><font size="4">在tomcat中每一个用户请求都是一个线程,所以可以使用线程池提高性能。</font></p> <p><font size="4">开启并且使用 配置: </font></p><center><img src="https://img-blog.csdn.net/201...; alt="这里写图片描述" title=""></center><p></p> <p><font size="4">在Connector中指定使用共享线程池</font></p> <p></p><center><img src="https://img-blog.csdn.net/201...; alt="这里写图片描述" title=""></center><p></p> <p><font size="4">查看Tomcat控制台</font></p> <p></p><center><img src="https://img-blog.csdn.net/201...; alt="这里写图片描述" title=""></center><p></p> <p><font size="4">Executor重要参数说明:</font></p> <p><font size="4">name:共享线程池的名字。这是Connector为了共享线程池要引用的名字,该名字必须唯一。默认值:None;</font></p> <p><font size="4">namePrefix:在JVM上,每个运行线程都可以有一个name 字符串。这一属性为线程池中每个线程的name字符串设置了一个前缀,Tomcat将把线程号追加到这一前缀的后面。默认值:tomcat-exec-;</font></p> <p><font size="4">maxThreads:该线程池可以容纳的最大线程数。默认值:200;</font></p> <p><font size="4">maxIdleTime:在Tomcat关闭一个空闲线程之前,允许空闲线程持续的时间(以毫秒为单位)。只有当前活跃的线程数大于minSpareThread的值,才会关闭空闲线程。默认值:60000(一分钟)。</font></p> <p><font size="4">minSpareThreads:Tomcat应该始终打开的最小不活跃线程数。默认值:25。</font></p> <p><font size="4">threadPriority:线程的等级。默认是Thread.NORM_PRIORITY</font></p> <p><font size="4">Connector重要参数说明:</font></p> <p><font size="4">executor:表示使用该参数值对应的线程池;</font></p> ...

November 5, 2019 · 1 min · jiezi

译用SQL统一所有一种有效的语法惯用的流和表管理方法

现在还没有一个统一的流式SQL语法标准,各家都在做自己的。本文在一些业界应用的基础上提出了一个统一SQL语法的建议。Spark同样存在这个问题,社区版本在流式SQL上迟迟没有动作。EMR Spark在今年上半年提供了自己设计版本的流式SQL支持,也会在后续的更新中吸收和支持这些优秀的设计建议。 原文:https://blog.acolyer.org/2019/07/03/one-sql-to-rule-them-all/ 资料:One SQL to rule them all: an efficient and syntactically idiomatic approach to management of streams and tables Begoli et al., SIGMOD’19 在数据处理方面,似乎最终都会回归到SQL上!今天选择的这篇文章作者来自于Apache Beam,Apache Calcite以及Apache Flink的专家们,阐述了他们在构建流式处理SQL接口的经验。最终整理了一些SQL标准的扩展建议。 The thesis of this paper, supported by experience developing large open-source frameworks supporting real-world streaming use cases, is that the SQL language and relational model as-is and with minor non-intrusive extensions, can be very effective for manipulation of streaming data.这篇文章的论点是,在开发使用大规模开源框架解决现实世界的实际流式场景经验下,SQL语言及关系性模型在当前及非侵入式扩展后,对于流数据的操作非常有效。 ...

July 16, 2019 · 2 min · jiezi

性能优化漫谈

工欲善其事必先利其器技术世界正朝着黑盒化的方向发展,欲要对性能调优,需了解内部原理,同时掌控全局,溯本溯源。性能基础知识之算法 性能分析][6] 图片描述 jvm调优

July 11, 2019 · 1 min · jiezi

每日Scrum中的3个重要问题是什么

这是整个团队简洁地同步每个人的个人进度(Burn down chart)与迭代的Sprint,特征或故事点估计的机会。换句话说,站立是一个状态更新会议,时间限制为十五分钟,下面有三个基本问题。 你昨天做了什么?你今天会做什么?是否有任何阻碍者或障碍阻碍您开展工作?一个强大的Scrum软件,支持Scrum项目管理。它具有Scrum工具,如用户故事地图,产品积压管理,sprint积压管理,任务管理,日常scrum会议,sprint计划工具,sprint审查工具,sprint回顾工具,burndown,障碍,利益相关者和团队管理。 每日Scrum中3个问题的目的在每日的Scrum是一个Sprint期间重点检查和适应的会议。它旨在快速通知每个人整个团队的情况。这不是详细的状态会议。下面列出的是每日Scrum会议的一些好处: 同步团队的工作。识别并消除发展障碍适应每日计划和Sprint Backlog。通过查看和更新燃尽图来跟踪进度[](https://www.visual-paradigm.c...改善团队参与和协作。什么是每日Scrum?持续时间:约15分钟 参与者: Scrum Master,Scrum团队和产品负责人 规则和指南: 在同一时间和地点开始工作日Scrum Master是会议的推动者会议与整个团队一起举行,以便不会延长会议超过15分钟Scrum团队的每个成员都应该回答上面提到的三个问题Scrum团队的每个成员都应该花费不到2到3分钟的时间来回答上述问题这是简单易懂的,但并不是团队用一个声音说话。它还可以快速降级为状态会话,并且不会为sprint backlog的进度带来真正的清晰度。 每日站立会议

July 8, 2019 · 1 min · jiezi

windows-server-apache-80端口启动失败

一台测试服务器,版本是windows server 2012,环境是apache+mysql+php,在上周五还运行的好好的,过了个周末,周一来了以后apache死活启动不了,查看apache错误日志也没有看出什么来;这时候想起了windows 还有个系统日志,然后经过排查,发现是一个pid为4的进程占用了80端口,问了度娘,度娘说这是windows系统内核进程,还给了我解决方法,我想应该是windows server系统更新的时候干的好事,下面是方法步骤: 1、打开注册表:regedit2、找到:HKEY_LOCAL_MACHINESYSTEMCurrentControlSetservicesHTTP3、在右边找到Start这一项,将其改为04、重启系统,System进程不会占用80端口重启之后,再启动Apache就可以了。 链接:https://www.chinaz.com/web/20... 来源:站长之家 记一下,免得下次忘了

July 8, 2019 · 1 min · jiezi

ubuntu远程搭建-lamp环境

最近服务器重装了,安装环境的时候百度了很多,为了以后方便,特此整理一、安装Apache// 安装sudo apt install apache2 -y// 重启apache/etc/init.d/apache2 restart进行以上操作之后可以在本地输入服务器的ip地址,看是否成功 二、安装mysqludo apt install mysql-server mysql-client// 查看 3306端口是否监听sudo netstat -ano | grep 3306三、安装php安装 sudo apt install php7.2-mysql php7.2-curl php7.2-json php7.2-cgi php7.2 libapache2-mod-php7.2查看版本 php --version输出phpinfo vim /var/www/html/phpinfo.php// php文件内容如下<?php echo phpinfo();?>访问验证 http://Server_IP/phpinfo.php四、远程连接mysql服务器连接不上不上远程服务器的话,记得进行以下操作:修改以下文件中的值:将bind-address = 127.0.0.1更改为bind-address = 0.0.0.0 保存退出 vim /etc/mysql/mysql.conf.d/mysqld.cnf五、本地使用 navicat 或者其他的软件远程连接mysql

July 8, 2019 · 1 min · jiezi

HBase的安装和使用

文章作者:foochane  原文链接:https://foochane.cn/article/2019062801.html 1 Hbase基本介绍Hbase是一个分布式数据库,可以提供数据的实时随机读写。 Hbase与mysql、oralce、db2、sqlserver等关系型数据库不同,它是一个NoSQL数据库(非关系型数据库),并且有如下特点: Hbase的表模型与关系型数据库的表模型不同:Hbase的表没有固定的字段定义;Hbase的表中每行存储的都是一些key-value对Hbase的表中有列族的划分,用户可以指定将哪些kv插入哪个列族Hbase的表在物理存储上,是按照列族来分割的,不同列族的数据一定存储在不同的文件中Hbase的表中的每一行都固定有一个行键,而且每一行的行键在表中不能重复Hbase中的数据,包含行键,包含key,包含value,都是byte[ ]类型,hbase不负责为用户维护数据类型Hbase对事务的支持很差HBASE相比于其他nosql数据库(mongodb、redis、cassendra、hazelcast)的特点:因为Hbase的表数据存储在HDFS文件系统中,所以存储容量可以线性扩展; 数据存储的安全性可靠性极高! 2 Hbase的表结构rowkey:行键base_infoextra_info001name:zs,age:22,sex:malehobbiy:read,addr:beijing002name:laowang,sex:male hbase的表模型跟mysql之类的关系型数据库的表模型差别巨大 hbase的表模型中有:行的概念;但没有字段的概念 行中存的都是key-value对,每行中的key-value对中的key可以是各种各样的。 hbase表模型的要点 一个表,有表名一个表可以分为多个列族(不同列族的数据会存储在不同文件中)表中的每一行有一个“行键rowkey”,而且行键在表中不能重复表中的每一对key-value叫做一个cellhbase可以对数据存储多个历史版本(历史版本数量可配置),默认取最新的版本整张表由于数据量过大,会被横向切分成若干个region(用rowkey范围标识),不同region的数据也存储在不同文件中hbase会对插入的数据按顺序存储: 首先会按行键排序同一行里面的kv会按列族排序,再按k排序hbase的表数据类型: hbase中只支持byte[] ,此处的byte[] 包括了: rowkey,key,value,列族名,表名。表划分为不同的region。 3 Hbase工作机制[图片上传失败...(image-ec30fc-1561887883664)] Hbase分布式系统包含两个角色 管理角色:HMaster(一般2台,一台active,一台standby)数据节点角色:HRegionServer(多台,和datanode在一起)Hbase不做数据处理的话,不需要yarn,yarn是复制Mapreduce计算的,Hbase只是负责数据管理 4 Hbase安装4.1 安装准备首先,要有一个HDFS集群,并正常运行; Hbase的regionserver应该跟hdfs中的datanode在一起其次,还需要一个zookeeper集群,并正常运行,所以安装Hbase要先安装zookeeper,zookeeper前面已经安装过了。然后,安装Hbase 4.2 节点安排各个节点角色分配如下: 节点安装的服务Masternamenode datanode regionserver hmaster zookeeperSlave01datanode regionserver zookeeperSlave02datanode regionserver zookeeper4.3 安装Hbase解压hbase安装包 hbase-2.0.5-bin.tar.gz 修改hbase-env.sh export JAVA_HOME=/usr/local/bigdata/java/jdk1.8.0_211# 不启动hbase自带的zookeeper,我们自己已经装了export HBASE_MANAGES_ZK=false修改hbase-site.xml <configuration> <!-- 指定hbase在HDFS上存储的路径 --> <property> <name>hbase.rootdir</name> <value>hdfs://Master:9000/hbase</value> </property> <!-- 指定hbase是分布式的 --> <property> <name>hbase.cluster.distributed</name> <value>true</value> </property> <!-- 指定zk的地址,多个用“,”分割 --> <property> <name>hbase.zookeeper.quorum</name> <value>Master:2181,Slave01:2181,Slave02:2181</value> </property></configuration>修改 regionservers ...

June 30, 2019 · 4 min · jiezi

Flume日志采集框架的使用

文章作者:foochane  原文链接:https://foochane.cn/article/2019062701.html Flume日志采集框架 安装和部署 Flume运行机制 采集静态文件到hdfs 采集动态日志文件到hdfs 两个agent级联Flume日志采集框架在一个完整的离线大数据处理系统中,除了hdfs+mapreduce+hive组成分析系统的核心之外,还需要数据采集、结果数据导出、任务调度等不可或缺的辅助系统,而这些辅助工具在hadoop生态体系中都有便捷的开源框架,如图所示: 1 Flume介绍Flume是一个分布式、可靠、和高可用的海量日志采集、聚合和传输的系统。Flume可以采集文件,socket数据包、文件、文件夹、kafka等各种形式源数据,又可以将采集到的数据(下沉sink)输出到HDFS、hbase、hive、kafka等众多外部存储系统中。 对于一般的采集需求,通过对flume的简单配置即可实现。 Flume针对特殊场景也具备良好的自定义扩展能力,因此,flume可以适用于大部分的日常数据采集场景。 2 Flume运行机制Flume分布式系统中最核心的角色是agent,flume采集系统就是由一个个agent所连接起来形成,每一个agent相当于一个数据传递员,内部有三个组件: Source:采集组件,用于跟数据源对接,以获取数据Sink:下沉组件,用于往下一级agent传递数据或者往最终存储系统传递数据Channel:传输通道组件,用于从source将数据传递到sink单个agent采集数据: 多级agent之间串联: 3 Flume的安装部署1 下载安装包apache-flume-1.9.0-bin.tar.gz解压 2 在conf文件夹下的flume-env.sh添加JAVA_HOME export JAVA_HOME=/usr/local/bigdata/java/jdk1.8.0_2113 根据采集的需求,添加采集方案配置文件,文件名可以任意取 具体可以看后面的示例 4 启动flume 测试环境下: $ bin/flume/-ng agent -c conf/ -f ./dir-hdfs.conf -n agent1 -Dflume.root.logger=INFO,console命令说明: -c:指定flume自带的配置文件目录,不用自己修改-f:指定自己的配置文件,这里问当前文件夹下的dir-hdfs.conf-n:指定自己配置文件中使用那个agent,对应的配置文件中定义的名字。-Dflume.root.logger:把日志打印在控制台,类型为INFO,这个只用于测试,后面将打印到日志文件中生产中,启动flume,应该把flume启动在后台: nohup bin/flume-ng agent -c ./conf -f ./dir-hdfs.conf -n agent1 1>/dev/null 2>&1 &4 采集静态文件到hdfs4.1 采集需求某服务器的某特定目录下,会不断产生新的文件,每当有新文件出现,就需要把文件采集到HDFS中去 4.2 添加配置文件在安装目录下添加文件dir-hdfs.conf,然后添加配置信息。 先获取agent,命名为agent1,后面的配置都跟在agent1后面,也可以改为其他值,如agt1,同一个配置文件中可以有多个配置配置方案,启动agent的时候获取对应的名字就可以。 根据需求,首先定义以下3大要素 数据源组件即source ——监控文件目录 : spooldirspooldir有如下特性: 监视一个目录,只要目录中出现新文件,就会采集文件中的内容采集完成的文件,会被agent自动添加一个后缀:COMPLETED(可修改)所监视的目录中不允许重复出现相同文件名的文件下沉组件即sink——HDFS文件系统 : hdfs sink ...

June 30, 2019 · 2 min · jiezi

Hive常用函数的使用

文章作者:foochane 原文链接:https://foochane.cn/article/2019062501.html 1 基本介绍1.1 HIVE简单介绍Hive是一个可以将SQL翻译为MR程序的工具,支持用户将HDFS上的文件映射为表结构,然后用户就可以输入SQL对这些表(HDFS上的文件)进行查询分析。Hive将用户定义的库、表结构等信息存储hive的元数据库(可以是本地derby,也可以是远程mysql)中。 1.2 Hive的用途做数据分析,不用自己写大量的MR程序,只需要写SQL脚本即可用于构建大数据体系下的数据仓库hive 2 以后 把底层引擎从MapReduce换成了Spark 启动hive前要先启动hdfs 和yarn 2 使用方式2.1 方式1:直接使用hive服务端输入命令 $ hive即可: hadoop@Master:~$ hiveSLF4J: Class path contains multiple SLF4J bindings.SLF4J: Found binding in [jar:file:/usr/local/bigdata/hive-2.3.5/lib/log4j-slf4j-impl-2.6.2.jar!/org/slf4j/impl/StaticLoggerBinder.class]SLF4J: Found binding in [jar:file:/usr/local/bigdata/hadoop-2.7.1/share/hadoop/common/lib/slf4j-log4j12-1.7.10.jar!/org/slf4j/impl/StaticLoggerBinder.class]SLF4J: See http://www.slf4j.org/codes.html#multiple_bindings for an explanation.SLF4J: Actual binding is of type [org.apache.logging.slf4j.Log4jLoggerFactory]Logging initialized using configuration in file:/usr/local/bigdata/hive-2.3.5/conf/hive-log4j2.properties Async: trueHive-on-MR is deprecated in Hive 2 and may not be available in the future versions. Consider using a different execution engine (i.e. spark, tez) or using Hive 1.X releases.hive>show databases;OKdbtestdefaultTime taken: 3.539 seconds, Fetched: 2 row(s)hive>技巧:让提示符显示当前库: ...

June 30, 2019 · 12 min · jiezi

zookeeper的安装和使用

文章作者:foochane  原文链接:https://foochane.cn/article/2019062601.html zookeeper数据存储形式 zookeeper安装 zookeeper命令行客户端的使用1 zookeeper数据存储形式zookeeper中对用户的数据采用kv形式存储 key:是以路径的形式表示的,各key之间有父子关系,比如 / 是顶层key 用户建的key只能在/ 下作为子节点,比如建一个key: /aa 这个key可以带value数据 也可以建一个key: /bb 也可以建多个key: /aa/xx zookeeper中,对每一个数据key,称作一个znode 2 znode类型zookeeper中的znode有多种类型: 1、PERSISTENT 持久的:创建者就算跟集群断开联系,该类节点也会持久存在与zk集群中2、EPHEMERAL 短暂的:创建者一旦跟集群断开联系,zk就会将这个节点删除3、SEQUENTIAL 带序号的:这类节点,zk会自动拼接上一个序号,而且序号是递增的组合类型: PERSISTENT :持久不带序号EPHEMERAL :短暂不带序号PERSISTENT 且 SEQUENTIAL :持久且带序号EPHEMERAL 且 SEQUENTIAL :短暂且带序号3 安装zookeeper解压安装包 zookeeper-3.4.6.tar.gz 修改conf/zoo.cfg # The number of milliseconds of each ticktickTime=2000# The number of ticks that the initial # synchronization phase can takeinitLimit=10# The number of ticks that can pass between # sending a request and getting an acknowledgementsyncLimit=5# the directory where the snapshot is stored.# do not use /tmp for storage, /tmp here is just # example sakes.dataDir=/usr/local/bigdata/data/zkdata# the port at which the clients will connectclientPort=2181# the maximum number of client connections.# increase this if you need to handle more clients#maxClientCnxns=60## Be sure to read the maintenance section of the # administrator guide before turning on autopurge.## http://zookeeper.apache.org/doc/current/zookeeperAdmin.html#sc_maintenance## The number of snapshots to retain in dataDir#autopurge.snapRetainCount=3# Purge task interval in hours# Set to "0" to disable auto purge feature#autopurge.purgeInterval=1server.1=Master:2888:3888server.2=Slave01:2888:3888server.3=Slave02:2888:3888对3台节点,都创建目录 /usr/local/bigdata/data/zkdata ...

June 30, 2019 · 2 min · jiezi

Spark内置图像数据源初探

作者:林武康,花名知瑕, 阿里巴巴计算平台事业部EMR团队的高级开发工程师,Apache HUE Contributor, 参与了多个开源项目的研发工作,对于分布式系统设计应用有较丰富的经验,目前主要专注于EMR数据开发相关的产品的研发工作。 概述在Apache Spark 2.4中引入了一个新的内置数据源, 图像数据源.用户可以通过DataFrame API加载指定目录的中图像文件,生成一个DataFrame对象.通过该DataFrame对象,用户可以对图像数据进行简单的处理,然后使用MLlib进行特定的训练和分类计算.本文将介绍图像数据源的实现细节和使用方法. 简单使用先通过一个例子来简单的了解下图像数据源使用方法. 本例设定有一组图像文件存放在阿里云的OSS上, 需要对这组图像加水印,并压缩存储到parquet文件中. 废话不说,先上代码: def main(args: Array[String]): Unit = { val conf = new SparkConf().setMaster("local[*]") val spark = SparkSession.builder() .config(conf) .getOrCreate() val imageDF = spark.read.format("image").load("oss://<bucket>/path/to/src/dir") imageDF.select("image.origin", "image.width", "image.height", "image.nChannels", "image.mode", "image.data") .map(row => { val origin = row.getAs[String]("origin") val width = row.getAs[Int]("width") val height = row.getAs[Int]("height") val mode = row.getAs[Int]("mode") val nChannels = row.getAs[Int]("nChannels") val data = row.getAs[Array[Byte]]("data") Row(Row(origin, height, width, nChannels, mode, markWithText(width, height, BufferedImage.TYPE_3BYTE_BGR, data, "EMR"))) }).write.format("parquet").save("oss://<bucket>/path/to/dst/dir") } def markWithText(width: Int, height: Int, imageType: Int, data: Array[Byte], text: String): Array[Byte] = { val image = new BufferedImage(width, height, imageType) val raster = image.getData.asInstanceOf[WritableRaster] val pixels = data.map(_.toInt) raster.setPixels(0, 0, width, height, pixels) image.setData(raster) val buffImg = new BufferedImage(width, height, imageType) val g = buffImg.createGraphics g.drawImage(image, 0, 0, null) g.setColor(Color.red) g.setFont(new Font("宋体", Font.BOLD, 30)) g.drawString(text, width/2, height/2) g.dispose() val buffer = new ByteArrayOutputStream ImageIO.write(buffImg, "JPG", buffer) buffer.toByteArray }从生成的parquet文件中抽取一条图像二进制数据,保存为本地jpg,效果如下: ...

June 27, 2019 · 3 min · jiezi

原理解析-深入了解-Apache-Flink-的网络协议栈

作者:Nico Kruber 翻译:曹英杰 Flink 的网络协议栈是组成 flink-runtime 模块的核心组件之一,是每个 Flink 作业的核心。它连接所有 TaskManager 的各个子任务(Subtask),因此,对于 Flink 作业的性能包括吞吐与延迟都至关重要。与 TaskManager 和 JobManager 之间通过基于 Akka 的 RPC 通信的控制通道不同,TaskManager 之间的网络协议栈依赖于更加底层的 Netty API。 本文将首先介绍 Flink 暴露给流算子(Stream operator)的高层抽象,然后详细介绍 Flink 网络协议栈的物理实现和各种优化、优化的效果以及 Flink 在吞吐量和延迟之间的权衡。 1.逻辑视图Flink 的网络协议栈为彼此通信的子任务提供以下逻辑视图,例如在 A 通过 keyBy() 操作进行数据 Shuffle : 这一过程建立在以下三种基本概念的基础上: ▼ 子任务输出类型(ResultPartitionType):Pipelined(有限的或无限的):一旦产生数据就可以持续向下游发送有限数据流或无限数据流。Blocking:仅在生成完整结果后向下游发送数据。 ▼ 调度策略:同时调度所有任务(Eager):同时部署作业的所有子任务(用于流作业)。上游产生第一条记录部署下游(Lazy):一旦任何生产者生成任何输出,就立即部署下游任务。上游产生完整数据部署下游:当任何或所有生产者生成完整数据后,部署下游任务。 ▼ 数据传输:高吞吐:Flink 不是一个一个地发送每条记录,而是将若干记录缓冲到其网络缓冲区中并一次性发送它们。这降低了每条记录的发送成本因此提高了吞吐量。低延迟:当网络缓冲区超过一定的时间未被填满时会触发超时发送,通过减小超时时间,可以通过牺牲一定的吞吐来获取更低的延迟。 我们将在下面深入 Flink 网络协议栈的物理实现时看到关于吞吐延迟的优化。对于这一部分,让我们详细说明输出类型与调度策略。首先,需要知道的是子任务的输出类型和调度策略是紧密关联的,只有两者的一些特定组合才是有效的。 Pipelined 结果是流式输出,需要目标 Subtask 正在运行以便接收数据。因此需要在上游 Task 产生数据之前或者产生第一条数据的时候调度下游目标 Task 运行。批处理作业生成有界结果数据,而流式处理作业产生无限结果数据。 批处理作业也可能以阻塞方式产生结果,具体取决于所使用的算子和连接模式。在这种情况下,必须等待上游 Task 先生成完整的结果,然后才能调度下游的接收 Task 运行。这能够提高批处理作业的效率并且占用更少的资源。 下表总结了 Task 输出类型以及调度策略的有效组合: ...

June 26, 2019 · 3 min · jiezi

使用apache的HttpClient进行http通讯隐藏的HTTP请求头部字段是如何自动被添加的

我们用apache的HttpClient这个库消费云端的Restful API时,一般都需要两次HTTP调用,第一次获得某种token,比如获取防止跨域请求伪造攻击Cross-site request forgery - CSRF的token,或者比如微信API的access token,第二次再进行真正的API消费。 通常情况下,第一次请求完毕后,服务器都会给客户端返回一些cookie字段,在第二次请求时,如果使用的是postman测试工具或者apache的HttpClient这个库,cookie字段都会自动被附加在第二次请求的HTTP头部。详情可以参考我写的另一篇博客:OData service parallel performance measurement – how to deal with XSRF token in Java Program and JMeterhttps://blogs.sap.com/2017/08... 本文就来介绍apache的HttpClient,在发送第二个Http请求时,是如何自动插入从第一个请求获得的服务器颁发的cookie的。 首先进入HttpClient的单步调试:InternalHttpClient.doExecute方法: 第85行的origheaders,即取出程序员在代码里指定的http请求头部字段,比如basic Authentication,content-type,token等等: 这个cookie是什么时候传进来的? 看来我们必须进入httpcore-4.4.3.jar这个apache HttpClient的实现里去调试。 经过观察发现,一旦我执行完204行的conn.sendRequestHeader方法,就能观察到Cookie被自动设置了,所以奥妙就在第204行里。 自动添加Content-Length头部字段: 由此可见Content-length是通过方法entity.getContentLength()自动计算出来的,因此我们程序员不必在自己的应用代码里重复这个计算动作。 自动加入host字段: 自动加入Connection: Keep-Alive UserAgent的自动填充:Apache-HttpClient/4.5.1, 这个也不用程序员操心。 终于到了我要找的RequestAddCookies这个HTTPRequestInterceptor了。光从这个类的字面意思就能猜到它和HTTP请求的Cookie有关。 新建一个Cookie,这个CookieOrigin构造函数里的hpst,path和secure标志位都是Chrome开发者工具的Cookie标签页里能看到。 从 Cookie Store里取出前一次请求中由服务器返回的Cookie: 这里把Cookie store里的cookie加到第二个请求的头部字段,谜底就这样解开了。 要获取更多Jerry的原创文章,请关注公众号"汪子熙":

June 22, 2019 · 1 min · jiezi

困扰已久的问题cgifastcgiPHPfpm汇总

一个模糊的概念无论是php,python编程语言,还是apache,nginx服务器对于cgi协议是个绕不开的话题。安装,部署都会经常的看到,那么它们到底是干什么的,网上的答案非常的多!今天通过它们进行一波汇总,彻底告别这个难关。参考:https://www.dayuzy.com/?p=476 HTTP到cgi协议当浏览器的客户端输入网站走http协议到了web服务器,比如apache,这个大家都很清楚。web服务器没有处理php文件的功能,就会请求php解释器(php-cgi.exe)。或者,不是PHP文件,比如是python文件,web服务器也会去请求python的解释器。既然这么多解释器,不能没有一个协议规定它们的标准,否则乱套了,这时候cgi协议就出来了,说白了就是apache/nginx和后端的脚本语言(php,python等)交互之间制定的协议。 php-cgi是什么在windows系统上面,安装了php后,在安装目录下面有下面三个文件: php.exe:命令行执行php脚本文件。php-cgi.exe:通过CGI或FastCGI在web服务器(apache)上运行PHP时可以使用的CGI可执行文件,可以理解为php解释器(也有说是官方的FastCGI进程管理器,至于是什么文章后面再分析,这里就当作php解释器)。php-win.exe:用于在不使用命令行窗口的情况下执行PHP脚本的PHP可执行文件(例如,使用Windows GUI的PHP应用程序)。以上的三个文件互不影响,我本地测试删除两个另外一个也能用。在命令行运行一个php文件 F:\softwares\phpStudy\PHPTutorial\php\php-7.2.1-nts>F:\softwares\phpStudy\PHPTutorial\php\php-7.2.1-nts> php F:\softwares\phpStudy\PHPTutorial\index.phpHello World #php.exe运行结果F:\softwares\phpStudy\PHPTutorial\php\php-7.2.1-nts>php-cgi F:\softwares\phpStudy\PHPTutorial\index.phpX-Powered-By: PHP/7.2.1 #php-cgi.exe运行结果Content-type: text/html; charset=UTF-8 #php-cgi.exe运行结果Hello World #php-cgi.exe运行结果F:\softwares\phpStudy\PHPTutorial\php\php-7.2.1-nts>php-win F:\softwares\phpStudy\PHPTutorial\index.php #php-win.exe运行,结果是空行F:\softwares\phpStudy\PHPTutorial\php\php-7.2.1-nts>apache如何支持phpapache调用php有三种方式,模块、cgi、FastCgi,这些方法网上都能找到,下面说明一下原理。 模块:这是apache独有的对php支持,nginx是没有这种方式的,通过这种方式apache就可以直接处理php脚本了,至于是多进程、多线程要取决于apache的工作方式。参加:Apache三种工作模式介绍与配置cgi(通用网关接口):当apache有php脚本需要处理时,通过走cgi协议调用php解释器php-cgi.exe,并且php-cgi.exe会读取php.ini配置文件,作为apache的子进程。这里有个缺点:客户端浏览器的请求多了,apache创建的子进程会特别多,并且每次都重新读取php.ini配置文件。FastCgi就是为了解决cgi的问题,制定的协议。该协议规定,php-cgi.exe我不再做你apache的子进程了,我独立了,这样你轻松了吧!我单独构成一个服务,这个服务规定一个master主进程,再启用几个worker进程。master负责对php.ini等配置文件,以及接收apache发过来的请求,分配给worker进程进行处理。这样就构成了apache作为客户端,FastCgi协议程序作为服务端。这个FastCgi协议程序就是PHP-fpm,它就是FastCgi协议的具体实现。cgi和FastCgi是什么它们都是协议,FastCgi解决了cgi的一些缺点。 php-cgi.exe和PHP-fpm是什么?php-cgi.exe是解释器,也可以当作一个简易的cgi/FastCgi管理器。比如在windows系统中nginx是如何与php结合的呢?linux通过php-fpm,但是windows没有php-fpm,这个时候打开任务管理器会发现CGI/FastCGI(32位)这个进程,nginx就是反向代理给它的。 location ~ \.php(.*)$ { fastcgi_pass 127.0.0.1:9000; #这里的9000端口就是``php-cgi.exe``监听的 fastcgi_index index.php; fastcgi_split_path_info ^((?U).+\.php)(/?.+)$; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; fastcgi_param PATH_INFO $fastcgi_path_info; fastcgi_param PATH_TRANSLATED $document_root$fastcgi_path_info; include fastcgi_params; }我们在命令行查看一下php-cgi.exe的帮助,它也是可以进行一些简单的配置的。F:\softwares\phpStudy\PHPTutorial\php\php-7.2.1-nts>php-cgi -hUsage: php [-q] [-h] [-s] [-v] [-i] [-f <file>] php <file> [args...] -a Run interactively -b <address:port>|<port> Bind Path for external FASTCGI Server mode -C Do not chdir to the script's directory -c <path>|<file> Look for php.ini file in this directory -n No php.ini file will be used -d foo[=bar] Define INI entry foo with value 'bar' -e Generate extended information for debugger/profiler -f <file> Parse <file>. Implies `-q' -h This help -i PHP information -l Syntax check only (lint) -m Show compiled in modules -q Quiet-mode. Suppress HTTP Header output. -s Display colour syntax highlighted source. -v Version number -w Display source with stripped comments and whitespace. -z <file> Load Zend extension <file>. -T <count> Measure execution time of script repeated <count> times.php-fpm又是什么?PHP-fpm这个就是FastCgi进程管理器,它的概念并不模糊!它启动服务监听端口,通过nginx反向代理给它,并且它自己内置php解释器。但是,但是windows上面不能使用PHP-fpm。 ...

June 22, 2019 · 1 min · jiezi

修改Flume源码使taildir-source支持递归可配置

Flume的source选哪个?taildir source首选!1.断点还原 positionFile可以记录偏移量2.可配置文件组,里面使用正则表达式配置多个要监控的文件就凭第一点其他的source都被比下去了!这么好的taildir source有一点不完美,不能支持递归监控文件夹。所以就只能修改源代码了……好玩,我喜欢~ 改源码,先读源码Flume的taildir source启动会调用start()方法作初始化,里面创建一个ReliableTaildirEventReader,这里用到了建造者模式 @Overridepublic synchronized void start() { logger.info("{} TaildirSource source starting with directory: {}", getName(), filePaths); try { reader = new ReliableTaildirEventReader.Builder() .filePaths(filePaths) .headerTable(headerTable) .positionFilePath(positionFilePath) .skipToEnd(skipToEnd) .addByteOffset(byteOffsetHeader) .cachePatternMatching(cachePatternMatching) .recursive(isRecursive) .annotateFileName(fileHeader) .fileNameHeader(fileHeaderKey) .build(); } catch (IOException e) { throw new FlumeException("Error instantiating ReliableTaildirEventReader", e); } idleFileChecker = Executors.newSingleThreadScheduledExecutor( new ThreadFactoryBuilder().setNameFormat("idleFileChecker").build()); idleFileChecker.scheduleWithFixedDelay(new idleFileCheckerRunnable(), idleTimeout, checkIdleInterval, TimeUnit.MILLISECONDS); positionWriter = Executors.newSingleThreadScheduledExecutor( new ThreadFactoryBuilder().setNameFormat("positionWriter").build()); positionWriter.scheduleWithFixedDelay(new PositionWriterRunnable(), writePosInitDelay, writePosInterval, TimeUnit.MILLISECONDS); super.start(); logger.debug("TaildirSource started"); sourceCounter.start();}taildir source属于PollableSource, ...

June 22, 2019 · 3 min · jiezi

Apache-Flink-结合-Kafka-构建端到端的-ExactlyOnce-处理

文章目录:Apache Flink 应用程序中的 Exactly-Once 语义Flink 应用程序端到端的 Exactly-Once 语义示例 Flink 应用程序启动预提交阶段在 Flink 中实现两阶段提交 Operator总结Apache Flink 自2017年12月发布的1.4.0版本开始,为流计算引入了一个重要的里程碑特性:TwoPhaseCommitSinkFunction(相关的Jira)。它提取了两阶段提交协议的通用逻辑,使得通过Flink来构建端到端的Exactly-Once程序成为可能。同时支持一些数据源(source)和输出端(sink),包括Apache Kafka 0.11及更高版本。它提供了一个抽象层,用户只需要实现少数方法就能实现端到端的Exactly-Once语义。 有关TwoPhaseCommitSinkFunction的使用详见文档: TwoPhaseCommitSinkFunction。或者可以直接阅读Kafka 0.11 sink的文档: kafka。 接下来会详细分析这个新功能以及Flink的实现逻辑,分为如下几点。 描述Flink checkpoint机制是如何保证Flink程序结果的Exactly-Once的显示Flink如何通过两阶段提交协议与数据源和数据输出端交互,以提供端到端的Exactly-Once保证通过一个简单的示例,了解如何使用TwoPhaseCommitSinkFunction实现Exactly-Once的文件输出一、Apache Flink应用程序中的Exactly-Once语义当我们说『Exactly-Once』时,指的是每个输入的事件只影响最终结果一次。即使机器或软件出现故障,既没有重复数据,也不会丢数据。 Flink很久之前就提供了Exactly-Once语义。在过去几年中,我们对Flink的checkpoint机制有过深入的描述,这是Flink有能力提供Exactly-Once语义的核心。Flink文档还提供了该功能的全面概述。 在继续之前,先看下对checkpoint机制的简要介绍,这对理解后面的主题至关重要。 次checkpoint是以下内容的一致性快照:应用程序的当前状态输入流的位置Flink可以配置一个固定的时间点,定期产生checkpoint,将checkpoint的数据写入持久存储系统,例如S3或HDFS。将checkpoint数据写入持久存储是异步发生的,这意味着Flink应用程序在checkpoint过程中可以继续处理数据。 如果发生机器或软件故障,重新启动后,Flink应用程序将从最新的checkpoint点恢复处理; Flink会恢复应用程序状态,将输入流回滚到上次checkpoint保存的位置,然后重新开始运行。这意味着Flink可以像从未发生过故障一样计算结果。 在Flink 1.4.0之前,Exactly-Once语义仅限于Flink应用程序内部,并没有扩展到Flink数据处理完后发送的大多数外部系统。Flink应用程序与各种数据输出端进行交互,开发人员需要有能力自己维护组件的上下文来保证Exactly-Once语义。 为了提供端到端的Exactly-Once语义 – 也就是说,除了Flink应用程序内部,Flink写入的外部系统也需要能满足Exactly-Once语义 – 这些外部系统必须提供提交或回滚的方法,然后通过Flink的checkpoint机制来协调。 分布式系统中,协调提交和回滚的常用方法是两阶段提交协议。在下一节中,我们将讨论Flink的TwoPhaseCommitSinkFunction是如何利用两阶段提交协议来提供端到端的Exactly-Once语义。 二、Flink应用程序端到端的Exactly-Once语义我们将介绍两阶段提交协议,以及它如何在一个读写Kafka的Flink程序中实现端到端的Exactly-Once语义。Kafka是一个流行的消息中间件,经常与Flink一起使用。Kafka在最近的0.11版本中添加了对事务的支持。这意味着现在通过Flink读写Kafaka,并提供端到端的Exactly-Once语义有了必要的支持。 Flink对端到端的Exactly-Once语义的支持不仅局限于Kafka,您可以将它与任何一个提供了必要的协调机制的源/输出端一起使用。例如Pravega,来自DELL/EMC的开源流媒体存储系统,通过Flink的TwoPhaseCommitSinkFunction也能支持端到端的Exactly-Once语义。 在今天讨论的这个示例程序中,我们有: 从Kafka读取的数据源(Flink内置的KafkaConsumer)窗口聚合将数据写回Kafka的数据输出端(Flink内置的KafkaProducer)要使数据输出端提供Exactly-Once保证,它必须将所有数据通过一个事务提交给Kafka。提交捆绑了两个checkpoint之间的所有要写入的数据。这可确保在发生故障时能回滚写入的数据。但是在分布式系统中,通常会有多个并发运行的写入任务的,简单的提交或回滚是不够的,因为所有组件必须在提交或回滚时“一致”才能确保一致的结果。Flink使用两阶段提交协议及预提交阶段来解决这个问题。 在checkpoint开始的时候,即两阶段提交协议的“预提交”阶段。当checkpoint开始时,Flink的JobManager会将checkpoint barrier(将数据流中的记录分为进入当前checkpoint与进入下一个checkpoint)注入数据流。 brarrier在operator之间传递。对于每一个operator,它触发operator的状态快照写入到state backend。 数据源保存了消费Kafka的偏移量(offset),之后将checkpoint barrier传递给下一个operator。 这种方式仅适用于operator具有『内部』状态。所谓内部状态,是指Flink state backend保存和管理的 -例如,第二个operator中window聚合算出来的sum值。当一个进程有它的内部状态的时候,除了在checkpoint之前需要将数据变更写入到state backend,不需要在预提交阶段执行任何其他操作。Flink负责在checkpoint成功的情况下正确提交这些写入,或者在出现故障时中止这些写入。 三、示例Flink应用程序启动预提交阶段但是,当进程具有『外部』状态时,需要作些额外的处理。外部状态通常以写入外部系统(如Kafka)的形式出现。在这种情况下,为了提供Exactly-Once保证,外部系统必须支持事务,这样才能和两阶段提交协议集成。 在本文示例中的数据需要写入Kafka,因此数据输出端(Data Sink)有外部状态。在这种情况下,在预提交阶段,除了将其状态写入state backend之外,数据输出端还必须预先提交其外部事务。 当checkpoint barrier在所有operator都传递了一遍,并且触发的checkpoint回调成功完成时,预提交阶段就结束了。所有触发的状态快照都被视为该checkpoint的一部分。checkpoint是整个应用程序状态的快照,包括预先提交的外部状态。如果发生故障,我们可以回滚到上次成功完成快照的时间点。 下一步是通知所有operator,checkpoint已经成功了。这是两阶段提交协议的提交阶段,JobManager为应用程序中的每个operator发出checkpoint已完成的回调。 数据源和 widnow operator没有外部状态,因此在提交阶段,这些operator不必执行任何操作。但是,数据输出端(Data Sink)拥有外部状态,此时应该提交外部事务。 ...

June 21, 2019 · 1 min · jiezi

从-Spark-Streaming-到-Apache-Flink-实时数据流在爱奇艺的演进

本文将为大家介绍Apache Flink在爱奇艺的生产与实践过程。你可以借此了解到爱奇艺引入Apache Flink的背景与挑战,以及平台构建化流程。主要内容如下: 爱奇艺在实时计算方面的的演化和遇到的一些挑战爱奇艺使用Flink的User Case爱奇艺Flink平台化构建流程爱奇艺在Flink上的改进未来工作爱奇艺简介 爱奇艺在2010年正式上线,于2018年3月份在纳斯达克上市。我们拥有规模庞大且高度活跃的用户基础,月活跃用户数5.65亿人,在在线视频领域名列第一。在移动端,爱奇艺月度总有效时长59.08亿小时,稳居中国APP榜第三名。 一、爱奇艺在实时计算方面的演化和遇到的一些挑战1. 实时计算在爱奇艺的演化过程 实时计算是基于一些实时到达、速率不可控、到达次序独立不保证顺序、一经处理无法重放除非特意保存的无序时间序列的数据的在线计算。 因此,在实时计算中,会遇到数据乱序、数据延时、事件时间与处理时间不一致等问题。爱奇艺的峰值事件数达到1100万/秒,在正确性、容错、性能、延迟、吞吐量、扩展性等方面均遇到不小的挑战。 爱奇艺从2013年开始小规模使用storm,部署了3个独立集群。在2015年,开始引入Spark Streaming,部署在YARN上。在2016年,将Spark Streaming平台化,构建流计算平台,降低用户使用成本,之后流计算开始在爱奇艺大规模使用。在2017年,因为Spark Streaming的先天缺陷,引入Flink,部署在独立集群和YARN上。在2018年,构建Streaming SQL与实时分析平台,进一步降低用户使用门槛。 2. 从Spark Streaming到Apache Flink 爱奇艺主要使用的是Spark Streaming和Flink来进行流式计算。Spark Streaming的实现非常简单,通过微批次将实时数据拆成一个个批处理任务,通过批处理的方式完成各个子Batch。Spark Streaming的API也非常简单灵活,既可以用DStream的java/scala API,也可以使用SQL定义处理逻辑。但Spark Streaming受限于微批次处理模型,业务方需要完成一个真正意义上的实时计算会非常困难,比如基于数据事件时间、数据晚到后的处理,都得用户进行大量编程实现。爱奇艺这边大量使用Spark Streaming的场景往往都在于实时数据的采集落盘。 Apache Flink框架的实时计算模型是基于Dataflow Model实现的,完全支持Dataflow Model的四个问题:What,支持定义DAG图;Where:定义各类窗口(固定窗口、滑动窗口和Session窗口);When:支持灵活定义计算触发时间;How:支持丰富的Function定义数据更新模式。和Spark Streaming一样,Flink支持分层API,支持DataStream API,Process Function,SQL。Flink最大特点在于其实时计算的正确性保证:Exactly once,原生支持事件时间,支持延时数据处理。由于Flink本身基于原生数据流计算,可以达到毫秒级低延时。 在爱奇艺实测下来,相比Spark Streaming,Apache Flink在相近的吞吐量上,有更低的延时,更好的实时计算表述能力,原生实时事件时间、延时数据处理等。 二、在爱奇艺使用Flink的一些案例下面通过三个Use Case来介绍一下,爱奇艺具体是怎么使用Flink的,包括海量数据实时ETL,实时风控,分布式调用链分析。 1. 海量数据实时ETL 在爱奇艺这边所有用户在端上的任何行为都会发一条日志到nginx服务器上,总量超过千万QPS。对于具体某个业务来说,他们后续做实时分析,只希望访问到业务自身的数据,于是这中间就涉及一个数据拆分的工作。 在引入Flink之前,最早的数据拆分逻辑是这样子的,在Ngnix机器上通过“tail -f /xxx/ngnix.log | grep "xxx"”的方式,配置了无数条这样的规则,将这些不同的数据按照不同的规则,打到不同的业务kafka中。但这样的规则随着业务线的规模的扩大,这个tail进程越来越多,逐渐遇到了服务器性能瓶颈。 于是,我们就有了这样一个设想,希望通过实时流计算将数据拆分到各个业务kafka。具体来说,就是Nginx上的全量数据,全量采集到一级Kafka,通过实时ETL程序,按需将数据采集到各个业务Kafka中。当时,爱奇艺主的实时流计算基本均是基于Spark Streaming的,但考虑到Spark Streaming延迟相对来说比较高,爱奇艺从这个case展开开始推进Apache Flink的应用。 海量数据实时ETL的具体实现,主要有以下几个步骤: 解码:各个端的投递日志格式不统一,需要首先将各个端的日志按照各种解码方式解析成规范化的格式,这边选用的是JSON风控:实时拆分这边的数据都会过一下风控的规则,过滤掉很大一部分刷量日志。由于量级太高,如果将每条日志都过一下风控规则,延时会非常大。这边做了几个优化,首先,将用户数据通过DeviceID拆分,不同的DeviceID拆分到不同的task manager上,每个task manager用本地内存做一级缓存,将redis和flink部署在一起,用本地redis做二级缓存。最终的效果是,每秒redis访问降到了平均4k,实时拆分的P99延时小于500ms。拆分:按照各个业务进行拆分采样、再过滤:根据每个业务的拆分过程中根据用户的需求不同,有采样、再过滤等过程 2. 实时风控 防机器撞库盗号攻击是安全风控的一个常见需求,主要需求集中于事中和事后。在事中,进行超高频异常检测分析,过滤用户异常行为;在事后,生成IP和设备ID的黑名单,供各业务实时分析时进行防刷使用。 ...

June 21, 2019 · 1 min · jiezi

技术专家为什么我们最终选择Apache-Pulsar替代Kafka

导读:在传统消息系统中,存在一些问题。一方面,消息的存储和服务一般是紧耦合的,节点的扩容和运维不便,特别是在需要多备份来保证高可用性的场景。另一方面,消息的消费模式被固定,在企业内部需要维护多套系统来保证不同的消息消费场景。另外消息系统中,多租户,多机房互备等企业级的特性和功能也不太丰富。 Apache Pulsar采用了分层的架构,解决了存储计算的耦合,同时提供了很好的扩展性和可维护性。Pulsar也通过订阅层的抽象,提供了统一的消息消费模型。特别是在Pulsar的设计之初,就注重对多租户,多机房互备等方面的需求,提供了众多完备的企业级的特性。 Apache Pulsar从2015年初在Yahoo全球近十个机房内部大规模部署,稳定服务了Yahoo内部邮箱,金融,Flickr,广告,NoSQL等众多的应用场景,一共创建了80多个租户,230多万个topic。 智联招聘在18年用Pulsar替换了线上原有的RabbitMQ,作为内部的消息总线,服务内部的20多个应用,每天会产生6亿多条消息和3TB的数据。在减轻硬件,运维和部署成本的同时,为系统提供了更好的服务质量和扩展性。 Apache Pulsar,是一个使用Apache Bookkeeper提供持久化的pub/sub消息平台,它可以提供如下特性: 持久化:采用 BookKeeper 作为存储层,灵活性强。 Ordering:每个消息有全局唯一的 ID,消息重发简单。 Delivery Guarantees:At least once, at most once 和 effectively once。 高吞吐:单个分区高达 1.8 M 消息/秒。 低延迟:99% 的生产延迟小于 5 ms。 统一消息模型:同时支持两种消费模型,流和队列。 多租户:单个群集可支持多租户和用例。 跨地域复制:原生可用。 高可用、高扩展性、易运维 架构概述 Pulsar使用分层结构,将存储机制与broker隔离开来。此体系结构为Pulsar提供以下好处: 1、独立扩展broker,负责处理Producer发来的消息并分发给消费者。通过一个全局的ZK集群来处理多种协作式任务,例如说基于地理位置的复制。并将消息存储到BookKeeper中,同时单个集群内也需要有一套ZK集群,来存储一些元数据。 2、独立扩展存储(Bookies) 3、更容易容器化Zookeeper, Broker and Bookies 4、ZooKeeper提供集群的配置和状态存储 亮点如下: 1、负载均衡器:Pulsar内置负载均衡器,可在内部将负载分配给所有broker 2、服务发现:Pulsar具有内置的服务发现功能,可以识别在何处以及如何连接到broker。 3、全局复制器:可以在为同一个命名空间配置的N个borker之间复制数据。 4、全局ZK:全局ZK用于实现跨地域复制 跨地域复制 跨地域复制是Pulsar提供的解决方案。全局集群可以在名称空间级别进行配置,以便在任意数量的集群(n-wayMesh解决方案)中进行复制。从下面的示例中,数据中心C没有消费者,但数据中心A或B中仍会根据订阅模型消费消息。 多租户 多租户特性通过对数据存储的隔离,帮助为企业建立Pulsar集群。这一内置功能将大大降低组织的基础设施建设和运营成本。 零Rebalancing时间 Pulsar的分层架构和代理的无状态性质有助于实现零Rebalancing时间。如果一个新的broker被添加到集群中,它将立即可用;无需在集群中rebalancing数据。 从Bookies的角度来看:当一个新的Bookie添加到集群中时,由于其底层的分布式日志架构(读/写隔离),该节点立刻可以写入数据。基于段复制配置的数据rebalance在后台进行,不会对集群产生任何影响。 统一的队列和流模型 Pulsar使用同一个模型支持流和队列语义。这个特性可以通过订阅模型实现。消费者使用订阅模型中的任何一个订阅主题: 1、Exclusive - 支持流语义 ...

June 16, 2019 · 1 min · jiezi

springbootquartzjsoupkafka

最近在学习springboot,光看官方文档比较枯燥,于是想用一个项目把各种框架和技术串联起来,思来想去觉得爬虫是一个不错的idea。 大概思路是这样:固定频率去爬取新浪财经的头条新闻,爬到的标题和链接以json方式推到kafka的topic中,再通过ELK消费,在kibana中查看。 首先通过Spring Initializr下载一个demo工程,选择我们需要的依赖包,jsoup的包需要额外添加。 引入到idea中,修改pom文件,加入jsoup依赖,由于习惯了使用jetty作为web容器,所以把tomcat踢掉,引入jetty的依赖,为了方便处理json,引入fastjson依赖。 quartz的使用可以参考官网文档,这里我们通过mysql来持久化定时任务相关信息,涉及到mysql,顺便把mybatis和druid依赖也一起引入。 quartz相关表的sql在官网的demo里可以找到,这里就略过,假设表已建好。springboot提供了很好的quartz支持,自动配置了一个Scheduler,直接Autowired就可以使用,我们新建一个Service,在系统启动的时候启动爬取新闻的定时任务,代码如下: 假设每30分钟爬取一次,我们还需要一个Job实现类,来完成具体的爬取任务,也可以通过不同的job来分别爬取,这里就不展开了。Job实现类如下: 在爬网页之前先看一下每个页面的结构,以新浪财经为例,地址:https://finance.sina.com.cn/,查看页面结构可以发现,我们需要的头条新闻都在“m-hdline”这个class的a标签下,jsoup的使用比较简单,根据需要查找对应的文档就可以了,直接上代码: 接下来需要将获取到的数据发到kafka的topic中,我的win10是家庭版,天生不带docker,我又懒得折腾toolbox,于是搞了个自带的ubuntu虚拟机,直接下载kafka安装,然后创建一个topic:financenews。这时候可以将kafka的信息配置在我们的工程中,如下: springboot也贴心的为我们准备了KafkaTemplate,Autowired即可。这里我们还没有搭建好elk,可以使用直接监听定时任务发送到的topic中的消息是否正常。 最后在job中添加发送消息到kafka的处理: 代码到这里基本差不多了,下面我们启动应用看看效果: 成功。

June 14, 2019 · 1 min · jiezi

从遇见到信任-Apache-Dubbo-的毕业之旅

所谓信任,就是多一次机会。 2018年2月16日,Apache Dubbo 加入 Apache 基金会孵化器。 ... 2019年5月16日,Apache 软件基金会董事会决议通过了 Apache Dubbo 的毕业申请,这意味着 Apache Dubbo 正式成为 Apache 的顶级项目。5月21日,Apache 官方发布了这一消息。这也是 阿里巴巴微服务 继 Apache RocketMQ 后的又一个 Apache 顶级项目。 What is Dubbo ?Apache Dubbo 起初的定位是一款轻量级、高性能的服务框架,自 2012 年开源以来,深受国内开发者的喜爱,并被国内许多企业选型作为服务化改造的方案首选和微服务架构的基石之一。其主要功能是: 提供基于RPC的高性能接口,对用户透明。智能负载均衡:支持多种开箱即用的负载均衡策略,可以感知下游服务状态,从而减少总体延迟并提高系统吞吐量。自动服务注册和发现:支持多个服务注册表,可以立即在线/离线检测服务。高可扩展性:微内核和插件设计确保可以通过协议,传输和序列化等核心功能轻松扩展第三方实施。运行时流量路由:可以在运行时配置,以便根据不同的规则路由流量,这样可以轻松支持蓝绿部署,数据中心感知路由等功能。可视化服务治理:为服务治理和维护提供丰富的工具,例如查询服务元数据,运行状况和统计信息。Dubbo meets Apache2018 年 2 月,阿里巴巴将 Apache Dubbo 捐献给 Apache 软件基金会,得到了社区广泛的好评。 在这1年多的孵化过程中,Dubbo 社区: 持续迭代,共计发布11个版本;多元化治理,新增了6位 PPMC Member (孵化项目管理管理会成员),他们来自阿里巴巴、京东、美团点评、去哪儿、网易、微店、有赞等企业;并发展了15位项目提交者(对 Dubbo 项目具有提交权限),他们来自阿里巴巴、曹操科技、滴滴出行、国美金融、韩都衣舍、华为、京东、Keep、科大讯飞、美团点评、去哪儿、融贯电商、网联清算、网易、微店、亚信安全等10多家公司;构建多元化社区,Dubbo 主项目的贡献者从70+提升到目前的200位;用户多元化,阿里巴巴、当当、滴滴、海尔、去哪儿、网联清算、网易考拉、微店、中国电信、中国工商银行、中国人寿、中国银联等140多家公司在 GitHub 上报告了已将 Apache Dubbo 运用于生产环境中 ;GitHub 上的 star 数从入住孵化器前的17520增加到26400+,fork 数更是达到了17500+,fork 数排在所有Java 项目中的第三位;孵化过程中,Dubbo 社区的多样性得到了极大的发展,并不断演进核心和丰富生态,旨在为开发者们构建微服务和云原生支撑的基石。 ...

June 14, 2019 · 2 min · jiezi

PySpark-SQL-相关知识介绍

本文作者:foochane 本文链接:https://foochane.cn/article/2019060601.html1 大数据简介大数据是这个时代最热门的话题之一。但是什么是大数据呢?它描述了一个庞大的数据集,并且正在以惊人的速度增长。大数据除了体积(Volume)和速度(velocity)外,数据的多样性(variety)和准确性(veracity)也是大数据的一大特点。让我们详细讨论体积、速度、多样性和准确性。这些也被称为大数据的4V特征。 1.1 Volume数据体积(Volume)指定要处理的数据量。对于大量数据,我们需要大型机器或分布式系统。计算时间随数据量的增加而增加。所以如果我们能并行化计算,最好使用分布式系统。数据可以是结构化数据、非结构化数据或介于两者之间的数据。如果我们有非结构化数据,那么情况就会变得更加复杂和计算密集型。你可能会想,大数据到底有多大?这是一个有争议的问题。但一般来说,我们可以说,我们无法使用传统系统处理的数据量被定义为大数据。现在让我们讨论一下数据的速度。 1.2 Velocity越来越多的组织机构开始重视数据。每时每刻都在收集大量的数据。这意味着数据的速度在增加。一个系统如何处理这个速度?当必须实时分析大量流入的数据时,问题就变得复杂了。许多系统正在开发,以处理这种巨大的数据流入。将传统数据与大数据区别开来的另一个因素是数据的多样性。 1.3 Variety数据的多样性使得它非常复杂,传统的数据分析系统无法正确地分析它。我们说的是哪一种?数据不就是数据吗?图像数据不同于表格数据,因为它的组织和保存方式不同。可以使用无限数量的文件系统。每个文件系统都需要一种不同的方法来处理它。读取和写入JSON文件与处理CSV文件的方式不同。现在,数据科学家必须处理数据类型的组合。您将要处理的数据可能是图片、视频、文本等的组合。大数据的多样性使得分析变得更加复杂。 1.4 Veracity你能想象一个逻辑错误的计算机程序产生正确的输出吗?同样,不准确的数据将提供误导的结果。准确性,或数据正确性,是一个重要的问题。对于大数据,我们必须考虑数据的异常。 2 Hadoop 介绍Hadoop是一个解决大数据问题的分布式、可伸缩的框架。Hadoop是由Doug Cutting和Mark Cafarella开发的。Hadoop是用Java编写的。它可以安装在一组商用硬件上,并且可以在分布式系统上水平扩展。 在商品硬件上工作使它非常高效。如果我们的工作是在商品硬件,故障是一个不可避免的问题。但是Hadoop为数据存储和计算提供了一个容错系统。这种容错能力使得Hadoop非常流行。 Hadoop有两个组件:第一个组件是HDFS(Hadoop Distributed File System),它是一个分布式文件系统。第二个组件是MapReduce。HDFS用于分布式数据存储,MapReduce用于对存储在HDFS中的数据执行计算。 2.1 HDFS介绍HDFS用于以分布式和容错的方式存储大量数据。HDFS是用Java编写的,在普通硬件上运行。它的灵感来自于谷歌文件系统(GFS)的谷歌研究论文。它是一个写一次读多次的系统,对大量的数据是有效的。HDFS有两个组件NameNode和DataNode。 这两个组件是Java守护进程。NameNode负责维护分布在集群上的文件的元数据,它是许多datanode的主节点。HDFS将大文件分成小块,并将这些块保存在不同的datanode上。实际的文件数据块驻留在datanode上。HDFS提供了一组类unix-shell的命令。但是,我们可以使用HDFS提供的Java filesystem API在更细的级别上处理大型文件。容错是通过复制数据块来实现的。 我们可以使用并行的单线程进程访问HDFS文件。HDFS提供了一个非常有用的实用程序,称为distcp,它通常用于以并行方式将数据从一个HDFS系统传输到另一个HDFS系统。它使用并行映射任务复制数据。 2.2 MapReduce介绍计算的MapReduce模型最早出现在谷歌的一篇研究论文中。Hadoop的MapReduce是Hadoop框架的计算引擎,它在HDFS中对分布式数据进行计算。MapReduce已被发现可以在商品硬件的分布式系统上进行水平伸缩。它也适用于大问题。在MapReduce中,问题的解决分为Map阶段和Reduce阶段。在Map阶段,处理数据块,在Reduce阶段,对Map阶段的结果运行聚合或缩减操作。Hadoop的MapReduce框架也是用Java编写的。 MapReduce是一个主从模型。在Hadoop 1中,这个MapReduce计算由两个守护进程Jobtracker和Tasktracker管理。Jobtracker是处理许多任务跟踪器的主进程。Tasktracker是Jobtracker的从节点。但在Hadoop 2中,Jobtracker和Tasktracker被YARN取代。 我们可以使用框架提供的API和Java编写MapReduce代码。Hadoop streaming体模块使具有Python和Ruby知识的程序员能够编写MapReduce程序。 MapReduce算法有很多用途。如许多机器学习算法都被Apache Mahout实现,它可以在Hadoop上通过Pig和Hive运行。 但是MapReduce并不适合迭代算法。在每个Hadoop作业结束时,MapReduce将数据保存到HDFS并为下一个作业再次读取数据。我们知道,将数据读入和写入文件是代价高昂的活动。Apache Spark通过提供内存中的数据持久性和计算,减轻了MapReduce的缺点。 更多关于Mapreduce 和 Mahout 可以查看如下网页: https://www.usenix.org/legacy/publications/library/proceedings/osdi04/tech/full_papers/dean/dean_html/index.htmlhttps://mahout.apache.org/users/basics/quickstart.html3 Apache Hive 介绍计算机科学是一个抽象的世界。每个人都知道数据是以位的形式出现的信息。像C这样的编程语言提供了对机器和汇编语言的抽象。其他高级语言提供了更多的抽象。结构化查询语言(Structured Query Language, SQL)就是这些抽象之一。世界各地的许多数据建模专家都在使用SQL。Hadoop非常适合大数据分析。那么,了解SQL的广大用户如何利用Hadoop在大数据上的计算能力呢?为了编写Hadoop的MapReduce程序,用户必须知道可以用来编写Hadoop的MapReduce程序的编程语言。 现实世界中的日常问题遵循一定的模式。一些问题在日常生活中很常见,比如数据操作、处理缺失值、数据转换和数据汇总。为这些日常问题编写MapReduce代码对于非程序员来说是一项令人头晕目眩的工作。编写代码来解决问题不是一件很聪明的事情。但是编写具有性能可伸缩性和可扩展性的高效代码是有价值的。考虑到这个问题,Apache Hive就在Facebook开发出来,它可以解决日常问题,而不需要为一般问题编写MapReduce代码。 根据Hive wiki的语言,Hive是一个基于Apache Hadoop的数据仓库基础设施。Hive有自己的SQL方言,称为Hive查询语言。它被称为HiveQL,有时也称为HQL。使用HiveQL, Hive查询HDFS中的数据。Hive不仅运行在HDFS上,还运行在Spark和其他大数据框架上,比如Apache Tez。 Hive为HDFS中的结构化数据向用户提供了类似关系数据库管理系统的抽象。您可以创建表并在其上运行类似sql的查询。Hive将表模式保存在一些RDBMS中。Apache Derby是Apache Hive发行版附带的默认RDBMS。Apache Derby完全是用Java编写的,是Apache License Version 2.0附带的开源RDBMS。 HiveQL命令被转换成Hadoop的MapReduce代码,然后在Hadoop集群上运行。 了解SQL的人可以轻松学习Apache Hive和HiveQL,并且可以在日常的大数据数据分析工作中使用Hadoop的存储和计算能力。PySpark SQL也支持HiveQL。您可以在PySpark SQL中运行HiveQL命令。除了执行HiveQL查询,您还可以直接从Hive读取数据到PySpark SQL并将结果写入Hive ...

June 13, 2019 · 1 min · jiezi

Spark的安装及配置

本文作者:foochane 本文链接:https://foochane.cn/article/2019051904.html1 安装说明在安装spark之前,需要安装hadoop集群环境,如果没有可以查看:Hadoop分布式集群的搭建 1.1 用到的软件软件版本下载地址linuxUbuntu Server 18.04.2 LTShttps://www.ubuntu.com/downlo...hadoophadoop-2.7.1http://archive.apache.org/dis...javajdk-8u211-linux-x64https://www.oracle.com/techne...sparkspark-2.4.3-bin-hadoop2.7https://www.apache.org/dyn/cl...scalascala-2.12.5http://www.scala-lang.org/dow...AnacondaAnaconda3-2019.03-Linux-x86_64.shhttps://www.anaconda.com/dist...1.2 节点安排名称iphostname主节点192.168.233.200Master子节点1192.168.233.201Slave01子节点2192.168.233.202Slave022 安装Spark2.1 解压到安装目录$ tar zxvf spark-2.4.3-bin-hadoop2.7.tgz -C /usr/local/bigdata/$ cd /usr/local/bigdata/$ mv spark-2.4.3-bin-hadoop2.7 spark-2.4.32.2 修改配置文件配置文件位于/usr/local/bigdata/spark-2.4.3/conf目录下。 (1) spark-env.sh将spark-env.sh.template重命名为spark-env.sh。添加如下内容: export SCALA_HOME=/usr/local/bigdata/scalaexport JAVA_HOME=/usr/local/bigdata/java/jdk1.8.0_211export HADOOP_HOME=/usr/local/bigdata/hadoop-2.7.1export HADOOP_CONF_DIR=$HADOOP_HOME/etc/hadoopSPARK_MASTER_IP=MasterSPARK_LOCAL_DIRS=/usr/local/bigdata/spark-2.4.3SPARK_DRIVER_MEMORY=512M(2)slaves将slaves.template重命名为slaves修改为如下内容: Slave01Slave022.3 配置环境变量在~/.bashrc文件中添加如下内容,并执行$ source ~/.bashrc命令使其生效 export SPARK_HOME=/usr/local/bigdata/spark-2.4.3export PATH=$PATH:/usr/local/bigdata/spark-2.4.3/bin:/usr/local/bigdata/spark-2.4.3/sbin3 运行Spark先启动hadoop$ cd $HADOOP_HOME/sbin/$ ./start-dfs.sh$ ./start-yarn.sh$ ./start-history-server.sh然后启动启动sapark$ cd $SPARK_HOME/sbin/$ ./start-all.sh$ ./start-history-server.sh要注意的是:其实我们已经配置的环境变量,所以执行start-dfs.sh和start-yarn.sh可以不切换到当前目录下,但是start-all.sh、stop-all.sh和/start-history-server.sh这几个命令hadoop目录下和spark目录下都同时存在,所以为了避免错误,最好切换到绝对路径下。 spark启动成功后,可以在浏览器中查看相关资源情况:http://192.168.233.200:8080/,这里192.168.233.200是Master节点的IP 4 配置Scala环境spark既可以使用Scala作为开发语言,也可以使用python作为开发语言。 4.1 安装Scalaspark中已经默认带有scala,如果没有或者要安装其他版本可以下载安装包安装,过程如下:先下载安装包,然后解压 $ tar zxvf scala-2.12.5.tgz -C /usr/local/bigdata/然后在~/.bashrc文件中添加如下内容,并执行$ source ~/.bashrc命令使其生效 export SCALA_HOME=/usr/local/bigdata/scala-2.12.5export PATH=/usr/local/bigdata/scala-2.12.5/bin:$PATH测试是否安装成功,可以执行如下命令: scala -versionScala code runner version 2.12.5 -- Copyright 2002-2018, LAMP/EPFL and Lightbe4.2 启动Spark shell界面执行 spark-shell --master spark://master:7077命令,启动spark shell。 ...

June 13, 2019 · 2 min · jiezi

Hive的安装及配置

title: Hive的安装及配置summary: 关键词:Hive ubuntu 安装和配置 Derby MySQL PostgreSQL 数据库连接date: 2019-5-19 13:25urlname: 2019051903author: foochaneimg: /medias/featureimages/19.jpgcategories: 大数据tags: hive大数据本文作者:foochane 本文链接:https://foochane.cn/article/2019051903.html1 安装说明在安装hive之前,需要安装hadoop集群环境,如果没有可以查看:Hadoop分布式集群的搭建 1.1 用到的软件软件版本下载地址linuxUbuntu Server 18.04.2 LTShttps://www.ubuntu.com/downlo...hadoophadoop-2.7.1http://archive.apache.org/dis...javajdk-8u211-linux-x64https://www.oracle.com/techne...hivehive-2.3.5http://mirror.bit.edu.cn/apac...mysql-connector-javamysql-connector-java-5.1.45.jar命令行安装postgresql-jdbc4postgresql-jdbc4.jar命令行安装1.2 节点安排名称iphostname主节点192.168.233.200Master子节点1192.168.233.201Slave01子节点2192.168.233.202Slave021.3 说明注意:本文的hive 、MySQL、PostgreSQL均只安装在Master节点上,实际生产环境中,需根据实际情况调整 Hive默认元数据保存在内嵌的 Derby 数据库中,这是最简单的一种存储方式,使用derby存储方式时,运行hive会在当前目录生成一个derby文件和一个metastore_db目录。Derby 数据库中,只能允许一个会话连接,只适合简单的测试,实际生产环境中不适用。 为了支持多用户会话,则需要一个独立的元数据库,使用 MySQL 或者PostgreSQL作为元数据库,Hive 内部对 MySQL和PostgreSQL提供了很好的支持。 本文将逐一介绍hive连接Derby、PostgreSQL、MySQL这三种数据库数据库的安装和配置。 2 hive连接Derby2.1 解压$ tar -zxvf apache-hive-2.3.5-bin.tar.gz -C /usr/local/bigdata & cd /usr/local/bigdata$ mv apache-hive-2.3.5-bin hive-2.3.5$ sudo chown -R hadoop:hadoop hive #之前bigdata目录已经修改过权限了2.2 修改配置文件要修改的文件在/usr/local/hive-2.3.5/conf目录下,需要修改hive-site.xml、hive-env.sh、hive-log4j2.properties这3个文件。 先把.template文件复制一份出来,然后进行修改。 $ cd /usr/local/hive-2.3.5/conf$ cp hive-default.xml.template hive-site.xml$ cp hive-env.sh.template hive-env.sh$ cp hive-log4j.properties.template hive-log4j.properties2.2.1 hive-site.xml(Derby)配置Derby只需要修改javax.jdo.option.ConnectionURL指定metastore_db的存储位置即可具体修改如下: ...

June 13, 2019 · 6 min · jiezi

Hadoop分布式集群的搭建

title: Hadoop分布式集群的搭建summary: 关键词: Hadoop ubuntu 分布式集群 环境搭建 ssh 网络配置 java环境 date: 2019-5-19 11:09author: foochaneurlname: 2019051901categories: 大数据tags: hadoop大数据本文作者:foochane 本文链接:https://foochane.cn/article/2019051901.html1 安装说明1.1 用到的软件软件版本下载地址linuxUbuntu Server 18.04.2 LTShttps://www.ubuntu.com/downlo...hadoophadoop-2.7.1http://archive.apache.org/dis...javajdk-8u211-linux-x64https://www.oracle.com/techne...1.2 节点安排名称iphostname主节点192.168.233.200Master子节点1192.168.233.201Slave01子节点2192.168.233.202Slave022 创建hadoop用户所有的节点均创建一个名为hadoop的用户,并添加管理员权限。注意:这里这是单纯为了方便管理,创建的用户名,也可以使用其他用户名,或者使用系统之前的用户,主要有管理员权限即可 $ sudo useradd -m hadoop -s /bin/bash #创建用户$ sudo passwd hadoop #修改密码$ sudo adduser hadoop sudo #添加管理员权限3 配置网络环境3.1 修改主机名修改 /etc/hostname文件,每个节点都要修改。 主节点修改为:Master从节点分别修改为:Slave01,Slave02,...注意:如果是ubuntu18.04桌面版直接修改/etc/hostname文件即可,ubuntu18.04服务器版还需要修改/etc/cloud/cloud.cfg文件,修改如下: # This will cause the set+update hostname module to not operate (if true)preserve_hostname: true #这里是将false改成true3.2 添加IP与主机名的映射关系在/etc/hosts文件里添加如下内容(每个节点都要修改,根据实际情况修改ip) 192.168.233.200 Master192.168.233.201 Slave01192.168.233.202 Slave02检查各个节点是否能相互ping通。 3.3 设置SSH无密码登录节点让Master能够通过SSH无密码登录各个Slave节点 ...

June 13, 2019 · 2 min · jiezi

从开源小白到-Apache-Member我的成长之路

我们走过的每一步路,都会留下印记,越坚实,越清晰。 近日,Apache 软件基金会(ASF)官方 Blog 宣布全球新增 40 位 Apache Member,张乎兴有幸成为其中一位。 目前,全球共有771位 ASF Member,中国仅13位。本文将分享作者从0基础的开源小白,一路走来的感触,希望把期间的经历分享出来,让更多的人看到,世界开源舞台的中国力量。只要有持续的付出,总会有所收获。 初次参与开源2014年,我加入阿里巴巴中间件团队,开始接手集团应用容器的维护工作。当时集团的应用容器绝大部分都是基于 JBoss,老旧且无人维护,另外有一小部分跑在 Jetty 和 Tomcat 之上,当时中间件团队维护了 Tomcat 的一个私有分支,最大的目标就是要统一所有集团的应用容器为 Tomcat。而在那之前,我从未接触过 Tomcat 的开发和运维,对我来说,挑战很大。然而,更大的挑战来自于团队大 leader 提出的,在当时看来几乎是无法实现的目标:成为 Apache Tomcat 的 committer。 要知道,作为 Apache 的核心项目之一,Tomcat 自1999年发布第一版以来,一直是开源届和 Apache 基金会的明星项目,至今仍然在应用容器领域市场占有率保持第一,历经20年发展,依旧热度不减。Tomcat 历经这么多年的发展,却从未出现过一位来自中国的 committer。而我们小团队只有4个人,根本没有任何开源的经验,也完全不知道从何做起。团队 leader 问我们,谁愿意挑战一下的时候,我也没有多想,就承担了下来。 就这样,我开始了自己的 Apache 开源之旅。 说实话,一开始,自己并没有太多的思路,于是开始反复浏览 Tomcat 官网,希望能够查询到一些有用的信息。所有的 Apache 项目几乎都会有新用户指南,介绍如何参与到此开源项目当中,Tomcat也不例外。很快,我从修复 bug 开始,第一个 patch 是修复一个Websocket 测试用例失败的问题,修复该问题涉及到了对代码的一些重构。 还记得当时提交之前我非常谨慎,和 leader 一起反复讨论了很多次,终于形成了一个比较满意的方案。提交给 Tomcat 社区之后,很快,社区便有了响应,并合并了我提交的补丁。第一次提交便获得了认可,心里很开心,紧张的情绪也缓解了。看到 Tomcat 的 release note 里面出现了自己的名字,真的非常开心。 Apache Roadshow China2015年10月,我有幸在北京参加了 Apache Roadshow China 的活动,算是第一次和Apache 基金会有了亲密接触。在大会上,亲眼目睹了时任 Apache 基金会主席的 Brett Porter、Apache 基金会副总裁 Niclas Hedhman 等大牛们的演讲,以及在 Panel Disussion 里面,和他们,以及几位来自中国的 Apache 成员,一起探讨社区领导的开发流程等。 ...

June 3, 2019 · 2 min · jiezi

Apache运维基础6Apache的日志管理与分析

简述Apache 访问日志在实际工作中非常有用,比较典型的例子是进行网站流量统计,查看用户访问时间、地理位置分布、页面点击率等。Apache 的访问日志具有如下4个方面的作用: 记录访问服务器的远程主机IP 地址,从而可以得知浏览者来自何处;记录浏览者访问的Web资源,可以了解网站中的哪些部分最受欢迎;记录浏览者使用的浏览器,可以根据大多数浏览者使用的浏览器对站点进行优化;记录浏览者的访问时间;配置定制日志文件的格式涉及到两个指令,即LogFormat指令和CustomLog指令,默认httpd.conf文件提供了关于这两个指令的几个示例。LogFormat指令定义格式并为格式指定一个名字,以后我们就可以直接引用这个名字。CustomLog指令设置日志文件,并指明日志文件所用的格式(通常通过格式的名字)。LogFormat指令的功能是定义日志格式并为它指定一个名字。例如,在默认的httpd.conf文件中,我们可以找到下面这行代码: LogFormat "%h %l %u %t "%r" %>s %b" common该指令创建了一种名为“common”的日志格式,日志的格式在双引号包围的内容中指定。格式字符串中的每一个变量代表着一项特定的信息,这些信息按照格式串规定的次序写入到日志文件。Apache文档已经给出了所有可用于格式串的变量及其含义,下面是其译文: %% 百分号(Apache2.0.44或更高的版本)%a 远端IP地址%A 本机IP地址%B 除HTTP头以外传送的字节数%b 以CLF格式显示的除HTTP头以外传送的字节数,也就是当没有字节传送时显示’-‘而不是0。%{Foobar}C 在请求中传送给服务端的cookieFoobar的内容。%D 服务器处理本请求所用时间,以微为单位。%{FOOBAR}e 环境变量FOOBAR的值%f 文件名%h 远端主机%H 请求使用的协议%{Foobar}i 发送到服务器的请求头Foobar:的内容。%l 远端登录名(由identd而来,如果支持的话),除非IdentityCheck设为”On“,否则将得到一个”-”。%m 请求的方法%{Foobar}n 来自另一个模块的注解Foobar的内容。%{Foobar}o 应答头Foobar:的内容。%p 服务器服务于该请求的标准端口。%P 为本请求提供服务的子进程的PID。%{format}P 服务于该请求的PID或TID(线程ID),format的取值范围为:pid和tid(2.0.46及以后版本)以及hextid(需要APR1.2.0及以上版本)%q 查询字符串(若存在则由一个”?“引导,否则返回空串)%r 请求的第一行%s 状态。对于内部重定向的请求,这个状态指的是原始请求的状态,—%>s则指的是最后请求的状态。%t 时间,用普通日志时间格式(标准英语格式)%{format}t 时间,用strftime(3)指定的格式表示的时间。(默认情况下按本地化格式)%T 处理完请求所花时间,以秒为单位。%u 远程用户名(根据验证信息而来;如果返回status(%s)为401,可能是假的)%U 请求的URL路径,不包含查询字符串。%v 对该请求提供服务的标准ServerName。%V 根据UseCanonicalName指令设定的服务器名称。%X 请求完成时的连接状态:X= 连接在应答完成前中断。+= 应答传送完后继续保持连接。-= 应答传送完后关闭连接。(在1.3以后的版本中,这个指令是%c,但这样就和过去的SSL语法:%{var}c冲突了)%I 接收的字节数,包括请求头的数据,并且不能为零。要使用这个指令你必须启用mod_logio模块。%O 发送的字节数,包括请求头的数据,并且不能为零。要使用这个指令你必须启用mod_logio模块。常见的日志格式举例通用日志格式(CLF) “%h %l %u %t \”%r\” %>s %b”带虚拟主机的通用日志格式 “%v %h %l %u %t \”%r\” %>s %b”NCSA扩展/组合日志格式 “%h %l %u %t \”%r\” %>s %b \”%{Referer}i\” \”%{User-agent}i\”"Referer日志格式 ...

May 31, 2019 · 2 min · jiezi

Apache运维基础5Apache的Rewrite攻略2htaccess文件

简述.htaccess文件(或者"分布式配置文件")提供了针对目录改变配置的方法, 即,在一个特定的文档目录中放置一个包含一个或多个指令的文件, 以作用于此目录及其所有子目录。作为用户,所能使用的命令受到限制。管理员可以通过Apache的AllowOverride指令来设置。Unix、Linux系统或者是任何版本的Apache Web服务器都是支持.htaccess的,但是有的主机服务商可能不允许你自定义自己的.htaccess文件。启用.htaccess,需要修改httpd.conf,启用AllowOverride,并可以用AllowOverride限制特定命令的使用。如果需要使用.htaccess以外的其他文件名,可以用AccessFileName指令来改变。例如,需要使用.config ,则可以在服务器配置文件中按以下方法配置:AccessFileName .config 。笼统地说,.htaccess可以帮我们实现包括:文件夹密码保护、用户自动重定向、自定义错误页面、改变你的文件扩展名、封禁特定IP地址的用户、只允许特定IP地址的用户、禁止目录列表,以及使用其他文件作为index文件等一些功能。 写法规则DirectoryIndex zxg.html #改变默认文件RewriteEngine On #打开或关闭运行时刻的重写引擎,设置位置:服务器配置, 虚拟主机, 目录.htaccess '-d' (是一个目录[directory])将TestString视为一个路径名并测试它是否存在而且是一个目录'-f' (是一个常规的文件[file])将TestString视为一个路径名并测试它是否存在而且是一个常规的文件'-l' (是一个符号连接[link])将TestString视为一个路径名并测试它是否存在而且是一个符号连接redirect|R [=HttpCode] (强制重定向 redirect)(使新的URL成为一个URI) 为前缀的Substitution可以强制性执行一个外部重定向。 如果code没有指定,则产生一个HTTP响应代码302(临时性移动)。注意: 在使用这个标记时,必须确保该替换字段是一个有效的URLlast|L (最后一个Url规则的重写last)立即停止重写操作,并不再应用其他重写规则。这个标记可以阻止当前已被重写的URL为其后继的规则所重写'forbidden|F' (强制URL为被禁止的 forbidden)强制当前URL为被禁止的,即,立即反馈一个HTTP响应代码403(被禁止的)'nocase|NC' (忽略大小写 no case)它使Pattern忽略大小写,即, 在Pattern与当前URL匹配时,'A-Z' 和'a-z'没有区别。综合示例#注意,#只能放在句首,下面句尾的#实际应用要删除掉#改变默认文件DirectoryIndex zxg.html#伪静态RewriteEngine On #打开或关闭运行时刻的重写引擎,设置位置:服务器配置, 虚拟主机, 目录.htaccess ReWriteRule ^(\d+)_(\d+)\.html news.php?cid=$1&aid=$2 [NC,R=301,L] #301定向,不区分大小写#访问的不是一个文件或目录的时候就跳转到一个404.htmlRewriteCond %{REQUEST_FILENAME} !-fRewriteCond %{REQUEST_FILENAME} !-dReWriteRule .* 404.html [L]#去掉index.phpRewriteCond $1 !^(index\.php|images|robots\.txt) #任何非 index.php、images 和 robots.txt 的 HTTP 请求都被指向 index.php。RewriteRule ^(.*)$ /index.php/$1 [L]#防盗链RewriteCond %{HTTP_REFERER} !^$ #如果来源地址不为空RewriteCond %{HTTP_REFERER} !^http://web1.com #如果不是以http://web1.com开头RewriteCond %{REQUEST_FILENAME} .*\.(jpg|jpeg|gif|png) [NC] #如果访问的是图片ReWriteRule .* no.png [L] #就定向到no.png上面去1.注意它的顺序是从上到下,符合某一条件就不走下面条件;所以在写伪静态的时候要考虑这个先后顺序;2.#注释号只能放在句首,不能放在句尾;3.不需要重启Apache,立即生效; ...

May 30, 2019 · 1 min · jiezi

Apache运维基础4Apache的Rewrite攻略1

简述Rewirte主要的功能就是实现URL的跳转,它的正则表达式是基于Perl语言。可基于服务器级的(httpd.conf)和目录级的 (.htaccess)两种方式。如果要想用到rewrite模块,必须先安装或加载rewrite模块。 基于服务器级的(httpd.conf)有两种方法,一种是在httpd.conf的全局下直接利用RewriteEngine on来打开rewrite功能;另一种是在局部里利用RewriteEngine on来打开rewrite功能,下面将会举例说明,需要注意的是,必须在每个virtualhost里用RewriteEngine on来打开rewrite功能。否则virtualhost里没有RewriteEngine on它里面的规则也不会生效。 基于目录级的(.htaccess),要注意一点那就是必须打开此目录的FollowSymLinks属性且在.htaccess里要声明RewriteEngine on。 配置方法1.修改Apache主配置文件 删除LoadModule rewrite_module modules/mod_rewrite.so前#2.想通过.htaccess也能设置Rewrite规则 将网站目录配置段的"AllowOverride"改成"All",不同的虚拟机要单独配置3.配置项解析 RewriteEngine On|Off是否开启Rewire功能Rewrite功能不会继承,多个虚拟机要单独设置ReWriteRule规则设置Rewrite重写规则,一般写在.htaccess里面,放在根目录;.htaccess不用重启Apache;原子组的引用&dollar;1,&dollar;2...[L]为休止符,每个L为一个段落[NC]不区分大小写 <VirtualHost 192.168.1.22:80> ServerAdmin Example.com DocumentRoot /var/www/html ServerName 192.168.1.22 ErrorLog logs/error_log CustomLog logs/access_log common <IfModule mod_rewrite.c> RewriteEngine On RewriteRule (.*)\.py$ http://192.168.1.22/$1.php #rewrite规则 </IfModule></VirtualHost>RewriteCondRewrite重写条件,如果条件不满足,放弃RewriteRule规则匹配,除非设置RewriteCond条件时加[OR]标记用%{} 来输出Apache变量 RewriteCond %{REQUEST_FILENAME} .*\.(jpg|jpeg|gif|png) [NC] #如果请求的是图片;Apache Rewrite 服务器变量介绍第一部分: HTTP headers 部分参数参数名称: HTTP_USER_AGENT 样例参考值: Mozilla/5.0 (Windows; U; Windows NT 5.1; zh-CN; rv:1.9.0.8)Gecko/2009032609 Firefox/3.0.8 说明: 相当于PHP中的服务器参数: $_SERVER["HTTP_USER_AGENT"]参数名称: HTTP_REFERER 样例参考值: http://www.test.cn/test.php 说明: 相当于PHP中的服务器参数: $_SERVER["HTTP_REFERER"]参数名称: HTTP_COOKIE ...

May 29, 2019 · 2 min · jiezi

Apache运维基础3虚拟主机配置说明

建议在主配置文件中增加一句 Include conf/vhosts/*.conf然后就在vhosts目录下添加虚拟主机配置文件 在配置前打开NameVirtualHost *:80注释,注意此处要与Apache主配置监听端口一致 按域名配置<VirtualHost *:80> ServerAdmin webmaster@dummy-host.example.com #站点邮箱 DocumentRoot /www/docs/dummy-host.example.com #访问目录 ServerName dummy-host.example.com #域名 ErrorLog logs/dummy-host.example.com-error_log #错误日志目录 CustomLog logs/dummy-host.example.com-access_log common #访问日志目录 <Directory /var/www/html/web1> 此处可以覆盖主配置文件中的Directory部分,配置规则完全按照Directory来 </Directory></VirtualHost>按IP端口配置Listen 127.0.0.1:81<VirtualHost 127.0.0.1:81>DocumentRoot "/www/docs/dummy-host.example.com"ServerName 127.0.0.1:81</VirtualHost>其他虚拟主机的目录名最好用网站域名作为目录名,这是一个好习惯在LNMPA架构中,虚拟主机的配置是在Apache中,而不是在Nginx里面

May 28, 2019 · 1 min · jiezi

Apache运维基础2主配置文件说明

ServerTokens OS 系统信息,在访问出错时出现;把OS改为Minor,就不显示系统信息ServerSignature On 把On改为Off就连普通的系统都给隐藏起来;改为Email就会显示管理员的邮箱(邮箱需要另外配置 ServerAdmin ServerAdmin root@localhost 管理员邮箱ServerName localhost 服务器的主机名,一般是用虚拟机来设置,通常这个值是自动指定的,推荐显式的指定它以防止启动时出错UseCanonicalName Off 设置为"On",Apache会使用ServerName指令的值设置为 "Off"时,Apache会使用用户端提供的主机名和端口号。 如果有虚拟主机,必须设置为OffServerRoot "/etc/httpd" 配置项的根目录,类似html里面的base;默认到这个路径里面找;PidFile run/httpd.pid 进程PID,位置在 /etc/httpd/run/httpd.pid,主进程决定着子进程 Timeout 60 若60秒后没有收到或送出任何数据就切断该连接KeepAlive Off 是否开启持久化链接,访问网站时要对网站的很多资源,如css,js,image等等创建不同的链接;事实上我们可以建立一个持久化链接来应对多个请求;MaxKeepAliveRequests 100 一个持久化链接最多能应对多少个请求KeepAliveTimeout 15 15秒不链接就断开Listen 80 监听端口,默认是80,一般不同改变;如果要改变,注意以下几点:1. 如果修改为192.168.1.22:8080,表示只能通过192.168.1.22:8080访问2. 如果这里要更改为其他端口比如88的话,下面的ServerName localhost:88也得更改(如果是注释掉的,要取消注释)3. 如果要监听多个端口,就多写几个ListenInclude conf.d/*.conf 扩展配置文件 /etc/httpd/conf.d/我们一般在配置文件尾部再加上一句Include conf/vhosts/*.conf,把其他虚拟主机的配置分离开User apache Apache子进程所有者Group apache Apache子进程所属组DirectoryIndex index.html index.html.var 默认主文件,DocumentRoot "/var/www/html" 网站数据根目录。 ErrorDocument 404 /404.html 创建404文件 echo ":) File Not Found!" >/var/www/html/404.html404可以通过PHP程序来处理(在框架中),可以通过rewrite来处理,但是最理想的模式是让Apache来处理 Directory <Directory />Options Indexes FollowSymLinks AllowOverride None</Directory>Directory /定位目录 /(也就是Apache网站根目录)Indexes如果访问的文件不存在,显示目录文件列表;要禁止的话前面加上一个 - (-indexes)FollowSymLinks 在目录下创建a.html软链接,ln -s /ab/index.html /var/www/html/a.htmlOptions Indexes FollowSymLinks时软链接可用,可以直接在根目录下访问这个软连接Options Indexes –FollowSymLinks软链接不可用AllowOverride 是否允许目录配置文件.htaccess有效ALL有效,None无效Order allow,denyAllow from alldeny from 192.168.1.106↑↑ 先匹配allow允许,后匹配deny禁止,虽然192.168.1.106满足Allow,但deny是在allow后匹配的,所以192.168.1.106不允许访问Order deny,allowdeny from allallow from 192.168.1.106↑↑ 只允许192.168.1.106访问IfModule ...

May 27, 2019 · 1 min · jiezi

Apache-CVE20177659-漏洞重现及利用分析

一、实验原理介绍apache在其网站发布的安全公告,针对CVE-2017-7659漏洞的介绍是这样的: A maliciously constructed HTTP/2 request could cause mod_http2 to dereference a NULL pointer and crashthe server process.可以看到这是apache WEB服务器(httpd)中的一个HTTP 2.0协议处理的漏洞。 有漏洞的服务器源码下载链接:https://archive.apache.org/di...通过补丁的修改进行漏洞成因的逆向分析。首先查看漏洞函数h2_stream_set_request_rec,发现是调用h2_request_rcreat创建http 2.0请求的数据结构req,h2_request_rcreat执行失败时req为空,此时在日志函数ap_log_rerror中直接解引用req导致进程崩溃: 继续查看函数h2_request_rcreate,看到首先会把req置为0,然后判断4个变量r->method,scheme,r->hostname,path,任何一个为空则返回失败,而此时req还是0,就会导致进程崩溃: 那么这4个变量是哪一个为空导致的漏洞呢?scheme是先判断了是否为空再赋值的,首先排除;path是从r->parsed_uri中解析出来,解析函数apr_uri_unparse在其它地方有多次使用,直觉path也不会为空;r->method保存请求的方法字段,在HTTP请求中必须存在,因此也不应该为空;因此只有r->hostname,保存请求的主机名,也就是域名,可能为空。 我们知道,HTTP请求中,有2个地方可以表示主机名:1) 请求的路径以完整URL方式表示,URL中包含主机名,例如GET http://www.example.com/ HTTP/1.1,这里主机名就是 www.example.com。服务器中是在ap_parse_uri函数中解析这种主机名的2) 在Host请求头中包含主机名,例如:GET / HTTP/1.1Host: www.example.com 服务器中是在fix_hostname函数中解析这种主机名的分别审计ap_parse_uri和fix_hostname函数,发现如果请求中没有Host头,那么r->hostname确实是空。但是服务器也考虑到了这种情况,在ap_read_request函数中做了判断: 这里的判断逻辑,如果满足下面2个条件之一 1) r->hostname为空,且请求的HTTP版本大于等于1.12) 没有Host头,且请求的HTTP版本等于1.1就会立刻回复400状态码的错误页面,并不会触发后面的漏洞。在注释里也说明了,HTTP/1.1的RFC2616的14.23节中明确指明,HTTP/1.1请求必须包含Host头。但是,HTTP还有1.0版本,且HTTP/1.0和HTTP/1.1的处理流程一样,虽然HTTP/1.0确实没有规定请求必须包含Host头。因此HTTP/1.0请求是可以没有Host头的,程序会一直按照流程执行,最终执行到h2_stream_set_request_rec函数,此时r->hostname为空,从而触发漏洞。 综合上面的分析,该漏洞利用成功需要如下条件: 1) 服务器支持HTTP/22) 请求是HTTP/1.0版本3) 请求中没有Host头二、环境配置介绍1)、实验的环境CentOS 7,2.4.25版本的Apache Httpd服务器2)、Apache的安装前的准备工作安装Sqllite# wget http://www.sqlite.org/2014/sqlite-autoconf-3080704.tar.gz# tar zxf sqlite-autoconf-3080704.tar.gz# cd sqlite-autoconf-3080704# ./configure --prefix=/usr/local/sqlite-3.8.7.4# make && make install安装apr# wget http://archive.apache.org/dist/apr/apr-1.5.2.tar.gz# tar zxf apr-1.5.2.tar.gz# cd apr-1.5.2# ./configure --prefix=/usr/local/apr-1.5.2# make && make install安装apr-util# wget http://archive.apache.org/dist/apr/apr-util-1.5.4.tar.gz# tar zxf apr-util-1.5.4.tar.gz# cd apr-util-1.5.4# ./configure --prefix=/usr/local/apr-util-1.5.4 --with-apr=/usr/local/apr-1.5.2# make && make install安装nghttp2# wget https://fossies.org/linux/www/nghttp2-1.38.0.tar.gz# tar zxf nghttp2-1.38.0.tar.gz# cd nghttp2-1.38.0# ./configure --prefix=/usr/local/nghttp2-1.38.0# make && make install# 最后安装2.4.25版本的Apache服务器# cd /usr/local/src# wget http://archive.apache.org/dist/httpd/httpd-2.4.25.tar.gz# cd httpd-2.4.25# ./configure --prefix=/usr/local/apache-2.4.25 --with-apr=/usr/local/apr-1.5.2 --with-apr=/usr/local/apr-1.5.2 --with-nghttp2=/usr/local/nghttp2-1.38.0 --enable-http2 --enable-dav --enable-so --enable-maintainer-mod --enable-rewrite --with-sqlite=/usr/local/sqlite-3.8.7.4# make && make install# cp /usr/local/apache-2.4.25/conf/httpd.conf /usr/local/apache-2.4.25/conf/httpd.conf.default# ln -s /usr/local/apache-2.4.25/ /usr/local/apache3)、修改配置文件httpd.conf,并测试Apache是否能运行1、设置服务器监听的端口 ...

May 26, 2019 · 2 min · jiezi

Apache运维基础1Apache的安装与使用

安装yum -y install httpd httpd-devel # 在Ubuntu里面叫做Apache2,输入localhost能打开就算成功了Apache使用开启 /usr/sbin/apachectl start/etc/init.d/httpd startservice httpd start # centos 7以下关闭 /usr/sbin/apachectl stop/etc/init.d/httpd stopservice httpd stop重启 /usr/sbin/apachectl restart/etc/init.d/httpd restartservice httpd restartApache文件说明主配置文件 /etc/httpd/conf/httpd.conf扩展配置文件 1./etc/httpd/conf.d/*.conf2.当Apache启动时,会加载/etc/httpd/conf.d/目录中的所有以.conf结尾的文件,做为配置文件来使用,所以管理员可以将配置推荐写在.conf中,如果将配置项写入主配置文件,系统升级时,配置项还要重新修改一遍,如果写在扩展配置项,则不存在此问题,同时也可以从繁杂的主配置文件中脱离出来。扩展模块目录 /usr/lib/httpd/modules/ apache是模块化的,访问php的时候Apache就调用php模块来执行,访问SVN的时候Apache就调用svn模块来执行默认数据目录 /var/www/html日志目录 /var/log/httpd/

May 26, 2019 · 1 min · jiezi

Apache-httpclient的execute方法调试

因为工作需要,想研究一下execute执行的逻辑。 在这一行调用execute: response = getHttpClient().execute(get);getHttpClient的实现: private HttpClient getHttpClient() { if (this.m_httpClient == null) { this.m_httpClient = HttpClientBuilder.create().build(); } return this.m_httpClient; }我在代码里声明的HttpClient只是一个接口, 实现类是InternalHttpClient。 首先根据传入的请求决定出目标-target host 投递到RedirectExec执行。 后者又投递到RetryExec执行。 收到307重定向: redirectsEnabled标志位为true: 再看当前的请求确实被redirect了吗? original url: 我的后台服务器返回的307,落到了分支HttpStatus.SC_TEMPORARY_REDIRECT处: 看来Apache的库认为只有HEAD和GET才能被redirect: 重定向最大次数:50 准备重试了: 要获取更多Jerry的原创文章,请关注公众号"汪子熙":

May 25, 2019 · 1 min · jiezi

关闭-Apache-2418-TLSSSLProtocolApachesslconfTLS

本教学使用环境介绍伺服器端:Ubuntu 18.04 LTS资料库:Mariadb 10.1.34Apache:2.4.18语言版本:php 7.3本机端:MacOS High Sierra 前往 ssl.conf $ nano /etc/apache2/mods-available/ssl.conf这是 Apache 预设的设定 SSLProtocol all -SSLv3加入 -TLSv1 如以下代表關閉 TLS 1.0還有 -TLSv1.1, -TLSv1.2, -TLSv1.3 SSLProtocol all -SSLv3 -TLSv1重启 Apache $ service apache2 restart参考:https://blog.ijun.org/2017/10... 欢迎加QQ交流,在我个人档案

May 23, 2019 · 1 min · jiezi

CENTOS-7安装步骤apachetomcat8534windowsx86

1,全文可能比较详细(就是比较琐碎)(对新手比较友好)全部命令在行末!2,首先克隆一个VM虚拟机。以下这个操作出错率较高,防止不必要损失。建议在虚拟机上动手操作! 选择完整克隆: 克隆OK 3,如果忘记root密码。我在其他博客有写解决方法!确保你的CONNECT是连接状态!(不用PUTTY就无碍啦) 开始操作: 4,从WINDOWS桌面,直接拖拽apache-tomcat-8.5.34-windows-x86.zip到VM虚拟机。 如图: 我们先找到他的位置: find / -name 'apache-tomcat-8.5.34-windows-x86*' 进入此目录,pwd记录下路径:[root@localhost Desktop]# pwd/home/yuanlai/Desktop5,将其拷贝到/usr/local/下。(记得将被拷贝的那个删除掉。节省磁盘空间。)已经删除:6,解压缩:unzip apache-tomcat-8.5.34-windows-x86.zip 同样记得删除: 最好重命名一下:改为tomcat。这样比较好找。 7,cd bin 不是 cd /bin 这两个完全不同的! 一个.bat用于WINDOWS。 另外一个.sh用于Linux。 查看权限:没有执行权限。 加上就好啦: chmod 777 startup.sh 但是,又出现: Catalina方便记忆: 改完之后就OK啦! 8,连接测试:默认是8080.要想在WINDOWS访问。要开放一下这个8080端口。![在这里插入图片描述](https://img-blog.csdn.net/20181004142057221?watermark/2/text/aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80Mjg1OTI4MA==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70) firewall-cmd --zone=public --add-port=8080/tcp --permanent在防火墙中新增8080端口 firewall-cmd --reload重新加载防火墙,这样开启的8080端口才生效 ![在这里插入图片描述](https://img-blog.csdn.net/20181004142110401?watermark/2/text/aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80Mjg1OTI4MA==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70) 9,启用:![在这里插入图片描述](https://img-blog.csdn.net/20181004142117355?watermark/2/text/aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80Mjg1OTI4MA==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70) 然而开启不了。还要再写个文件。/etc/init.d/tomcat。/etc/init.d:存放着很多的服务程序(当然都是可执行的)init最初的意思。![在这里插入图片描述](https://img-blog.csdn.net/20181004142128763?watermark/2/text/aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80Mjg1OTI4MA==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70) 复制到具有很多服务的/etc/init.d里面。Vim编辑即可。如图,写入:# chkconfig: 112 63 37description: tomcat server init scriptSource Function Library. /etc/init.d/functions JAVA_HOME=/usr/local/jdk/CATALINA_HOME=/usr/local/tomcat 编辑完成后,再次编辑打开查看一下确认。赋予权限。 10, OK! 11,history 命令仅供参考。我也不知道哪个是必不可少的。 History可以查看最近500条命令! [root@localhost bin]# history 1 find / -name 'apache-tomcat-8.5.34-windows-x86*' 18 cd /home/yuanlai/Desktop/ 19 pwd 22 cd /usr/local/ 23 ls 27 cp /home/yuanlai/Desktop/apache-tomcat-8.5.34-windows-x86.zip ./ 28 ls 29 cd /home/yuanlai/Desktop/ 30 rm apache-tomcat-8.5.34-windows-x86.zip apache-tomcat-8.5.34-windows-x86.zip 31 ls 32 cd /usr/local/ 33 ls 34 unzip apache-tomcat-8.5.34-windows-x86.zip 35 ls 36 rm apache-tomcat-8.5.34-windows-x86.zip 37 ls 38 mv apache-tomcat-8.5.34 tomcat 39 ls 43 cd tomcat/ 44 ls 5 7 cd bin 61 ls 62 ./startup.sh 63 ls -al 64 chmod 777 startup.sh 65 ls -al 67 ./startup.sh 69 chmod 777 catalina.sh 70 ./startup.sh 72 firewall-cmd --zone=public --add-port=8080/tcp --permanent 73 firewall-cmd --reload 76 service tomcat start 77 cp -p /usr/local/tomcat/bin/catalina.sh /etc/init.d/tomcat 78 vim /etc/init.d/tomcat 79 chmod 755 /etc/init.d/tomcat 80 chkconfig --add tomcat 81 chkconfig tomcat on 82 service tomcat start 83 service tomcat restart 84 service tomcat stop 85 service tomcat start ...

May 22, 2019 · 1 min · jiezi

OPPO数据中台之基石基于Flink-SQL构建实数据仓库

作者 | 张俊本文整理自 2019 年 4 月 13 日在深圳举行的 Flink Meetup 会议,分享嘉宾张俊,目前担任 OPPO 大数据平台研发负责人,也是 Apache Flink contributor。本文主要内容如下: OPPO 实时数仓的演进思路;基于 Flink SQL 的扩展工作;构建实时数仓的应用案例;未来工作的思考和展望。一.OPPO 实时数仓的演进思路1.1.OPPO 业务与数据规模 大家都知道 OPPO 是做智能手机的,但并不知道 OPPO 与互联网以及大数据有什么关系,下图概要介绍了 OPPO 的业务与数据情况: OPPO 作为手机厂商,基于 Android 定制了自己的 ColorOS 系统,当前日活跃用户超过 2 亿。围绕 ColorOS,OPPO 构建了很多互联网应用,比如应用商店、浏览器、信息流等。在运营这些互联网应用的过程中,OPPO 积累了大量的数据,上图右边是整体数据规模的演进:从 2012 年开始每年都是 2~3 倍的增长速度,截至目前总数据量已经超过 100PB,日增数据量超过 200TB。要支撑这么大的一个数据量,OPPO 研发出一整套的数据系统与服务,并逐渐形成了自己的数据中台体系。 1.2.OPPO 数据中台 今年大家都在谈数据中台,OPPO 是如何理解数据中台的呢?我们把它分成了 4 个层次: 最下层是统一工具体系,涵盖了"接入 - 治理 - 开发 - 消费"全数据链路;基于工具体系之上构建了数据仓库,划分成"原始层 - 明细层 - 汇总层 - 应用层",这也是经典的数仓架构;再往上是全域的数据体系,什么是全域呢?就是把公司所有的业务数据都打通,形成统一的数据资产,比如 ID-Mapping、用户标签等;最终,数据要能被业务用起来,需要场景驱动的数据产品与服务。以上就是 OPPO 数据中台的整个体系,而数据仓库在其中处于非常基础与核心的位置。 ...

May 15, 2019 · 4 min · jiezi

OPPO数据中台之基石基于Flink-SQL构建实数据仓库

本文整理自 2019 年 4 月 13 日在深圳举行的 Flink Meetup 会议,分享嘉宾张俊,目前担任 OPPO 大数据平台研发负责人,也是 Apache Flink contributor。本文主要内容如下: OPPO 实时数仓的演进思路;基于 Flink SQL 的扩展工作;构建实时数仓的应用案例;未来工作的思考和展望。一.OPPO 实时数仓的演进思路 1.1.OPPO 业务与数据规模 大家都知道 OPPO 是做智能手机的,但并不知道 OPPO 与互联网以及大数据有什么关系,下图概要介绍了 OPPO 的业务与数据情况: OPPO 作为手机厂商,基于 Android 定制了自己的 ColorOS 系统,当前日活跃用户超过 2 亿。围绕 ColorOS,OPPO 构建了很多互联网应用,比如应用商店、浏览器、信息流等。在运营这些互联网应用的过程中,OPPO 积累了大量的数据,上图右边是整体数据规模的演进:从 2012 年开始每年都是 2~3 倍的增长速度,截至目前总数据量已经超过 100PB,日增数据量超过 200TB。要支撑这么大的一个数据量,OPPO 研发出一整套的数据系统与服务,并逐渐形成了自己的数据中台体系。 1.2.OPPO 数据中台 今年大家都在谈数据中台,OPPO 是如何理解数据中台的呢?我们把它分成了 4 个层次: 最下层是统一工具体系,涵盖了"接入 - 治理 - 开发 - 消费"全数据链路;基于工具体系之上构建了数据仓库,划分成"原始层 - 明细层 - 汇总层 - 应用层",这也是经典的数仓架构;再往上是全域的数据体系,什么是全域呢?就是把公司所有的业务数据都打通,形成统一的数据资产,比如 ID-Mapping、用户标签等;最终,数据要能被业务用起来,需要场景驱动的数据产品与服务。以上就是 OPPO 数据中台的整个体系,而数据仓库在其中处于非常基础与核心的位置。 ...

May 14, 2019 · 4 min · jiezi

Apache-Cassandra-数据存储模型

我们在《Apache Cassandra 简介》文章中介绍了 Cassandra 的数据模型类似于 Google 的 Bigtable,对应的开源实现为 Apache HBase,而且我们在 《HBase基本知识介绍及典型案例分析》 文章中简单介绍了 Apache HBase 的数据模型。按照这个思路,Apache Cassandra 的数据模型应该和 Apache HBase 的数据模型很类似,那么这两者的数据存储模型是不是一样的呢?本文将为大家解答这些问题。我们从 KeySpace -> Table -> Partition -> Row -> Cell 顺序介绍。本文基于 Apache Cassandra 3.11.4 源码进行介绍的,不同版本可能有些不一样。 Table & KeySpaceCassandra 中的 KeySpace 概念和 RDBMS 里面的 DataBase 概念很类似,一个 KeySpace 包含多张表,一般将有关联的数据表放到同一个 KeySpace 下面。KeySpace 创建的时候可以指定副本策略,副本因子以及是否启用 CommitLog 机制(类似 HBase 中的 WAL)。 Cassandra 中表的概念和 RDBMS 很类似。不同的是在 Cassandra 中属于同一张表的数据在物理上是分布在不同节点上存储的,同一张表由多个 Partition 组成。 PartitionsCassandra 一般是由多台节点组成的,每台节点负责一定范围的,如果使用 Murmur3hash 的时候,每个节点负责的 Token 类似于下面那样: ...

May 10, 2019 · 3 min · jiezi

5分钟从零构建第一个-Apache-Flink-应用

摘要:在本文中,我们将从零开始,教您如何构建第一个Apache Flink (以下简称Flink)应用程序。开发环境准备Flink 可以运行在 Linux, Max OS X, 或者是 Windows 上。为了开发 Flink 应用程序,在本地机器上需要有 Java 8.x 和 maven 环境。 如果有 Java 8 环境,运行下面的命令会输出如下版本信息: $ java -versionjava version "1.8.0_65"Java(TM) SE Runtime Environment (build 1.8.0_65-b17)Java HotSpot(TM) 64-Bit Server VM (build 25.65-b01, mixed mode)如果有 maven 环境,运行下面的命令会输出如下版本信息: $ mvn -versionApache Maven 3.5.4 (1edded0938998edf8bf061f1ceb3cfdeccf443fe; 2018-06-18T02:33:14+08:00)Maven home: /Users/wuchong/dev/mavenJava version: 1.8.0_65, vendor: Oracle Corporation, runtime: /Library/Java/JavaVirtualMachines/jdk1.8.0_65.jdk/Contents/Home/jreDefault locale: zh_CN, platform encoding: UTF-8OS name: "mac os x", version: "10.13.6", arch: "x86_64", family: "mac"另外我们推荐使用 ItelliJ IDEA (社区免费版已够用)作为 Flink 应用程序的开发 IDE。Eclipse 虽然也可以,但是 Eclipse 在 Scala 和 Java 混合型项目下会有些已知问题,所以不太推荐 Eclipse。下一章节,我们会介绍如何创建一个 Flink 工程并将其导入 ItelliJ IDEA。 ...

May 9, 2019 · 2 min · jiezi

聊聊-Apache-Dubbo

本文来自于我的个人主页:Apache Dubbo,转载请保留链接 ;)在2011年10月27日,阿里巴巴开源了自己的SOA服务化治理方案的核心框架Dubbo,服务治理和SOA的设计理念开始逐渐在国内软件行业中落地,并被广泛应用。 Dubbo作为阿里巴巴内部的SOA服务化治理方案的核心框架,在2012年时已经每天为2000+个服务提供3,000,000,000+次访问量支持,并被广泛应用于阿里巴巴集团的各成员站点。Dubbo自2011年开源后,已被许多非阿里系公司使用,其中既有当当网、网易考拉等互联网公司,也有中国人寿、青岛海尔等传统企业。本文是作者根据官方文档以及自己平时的使用情况,对 Dubbo 所做的一个总结。 Dubbo 官网:https://dubbo.apache.org/zh-cn/index.html <!-- MarkdownTOC --> 一 重要的概念 1.1 什么是 Dubbo?1.2 什么是 RPC?RPC原理是什么?1.3 为什么要用 Dubbo?1.4 什么是分布式?1.5 为什么要分布式?二 Dubbo 的架构 2.1 Dubbo 的架构图解2.2 Dubbo 工作原理三 Dubbo 的负载均衡策略 3.1 先来解释一下什么是负载均衡3.2 再来看看 Dubbo 提供的负载均衡策略 3.2.1 Random LoadBalance(默认,基于权重的随机负载均衡机制)3.2.2 RoundRobin LoadBalance(不推荐,基于权重的轮询负载均衡机制)3.2.3 LeastActive LoadBalance3.2.4 ConsistentHash LoadBalance3.3 配置方式四 zookeeper宕机与dubbo直连的情况<!-- /MarkdownTOC --> 一 重要的概念1.1 什么是 Dubbo?Apache Dubbo (incubating) |db| 是一款高性能、轻量级的开源Java RPC 框架,它提供了三大核心能力:面向接口的远程方法调用,智能容错和负载均衡,以及服务自动注册和发现。简单来说 Dubbo 是一个分布式服务框架,致力于提供高性能和透明化的RPC远程服务调用方案,以及SOA服务治理方案。 Dubbo 目前已经有接近 25k 的 Star ,Dubbo的Github 地址:https://github.com/apache/incubator-dubbo 。 另外,在开源中国举行的2018年度最受欢迎中国开源软件这个活动的评选中,Dubbo 更是凭借其超高人气仅次于 vue.js 和 ECharts 获得第三名的好成绩。 ...

April 27, 2019 · 2 min · jiezi

Flink状态管理和容错机制介绍

作者: 施晓罡 本文来自2018年8月11日在北京举行的 Flink Meetup会议,分享来自于施晓罡,目前在阿里大数据团队部从事Blink方面的研发,现在主要负责Blink状态管理和容错相关技术的研发 本文主要内容如下: 有状态的流数据处理;Flink中的状态接口;状态管理和容错机制实现;阿里相关工作介绍;一.有状态的流数据处理1.1什么是有状态的计算计算任务的结果不仅仅依赖于输入,还依赖于它的当前状态,其实大多数的计算都是有状态的计算。 比如wordcount,给一些word,其计算它的count,这是一个很常见的业务场景。count做为输出,在计算的过程中要不断的把输入累加到count上去,那么count就是一个state。 1.2.传统的流计算系统缺少对于程序状态的有效支持状态数据的存储和访问;状态数据的备份和恢复;状态数据的划分和动态扩容;在传统的批处理中,数据是划分为块分片去完成的,然后每一个Task去处理一个分片。当分片执行完成后,把输出聚合起来就是最终的结果。在这个过程当中,对于state的需求还是比较小的。 对于流计算而言,对State有非常高的要求,因为在流系统中输入是一个无限制的流,会运行很长一段时间,甚至运行几天或者几个月都不会停机。在这个过程当中,就需要将状态数据很好的管理起来。很不幸的是,在传统的流计算系统中,对状态管理支持并不是很完善。比如storm,没有任何程序状态的支持,一种可选的方案是storm+hbase这样的方式去实现,把这状态数据存放在Hbase中,计算的时候再次从Hbase读取状态数据,做更新在写入进去。这样就会有如下几个问题 流计算系统的任务和Hbase的数据存储有可能不在同一台机器上,导致性能会很差。这样经常会做远端的访问,走网络和存储;备份和恢复是比较困难,因为Hbase是没有回滚的,要做到Exactly onces很困难。在分布式环境下,如果程序出现故障,只能重启Storm,那么Hbase的数据也就无法回滚到之前的状态。比如广告计费的这种场景,Storm+Hbase是是行不通的,出现的问题是钱可能就会多算,解决以上的办法是Storm+mysql,通过mysql的回滚解决一致性的问题。但是架构会变得非常复杂。性能也会很差,要commit确保数据的一致性。对于storm而言状态数据的划分和动态扩容也是非常难做,一个很严重的问题是所有用户都会在strom上重复的做这些工作,比如搜索,广告都要在做一遍,由此限制了部门的业务发展。1.3.Flink丰富的状态访问和高效的容错机制Flink在最早设计的时候就意识到了这个问题,并提供了丰富的状态访问和容错机制。如下图所示: 二.Flink中的状态管理2.1.按照数据的划分和扩张方式,Flink中大致分为2类:Keyed StatesOperator States 2.1.1.Keyed StatesKeyed States的使用 Flink也提供了Keyed States多种数据结构类型 Keyed States的动态扩容 2.1.2.Operator StateOperator States的使用 Operator States的数据结构不像Keyed States丰富,现在只支持List Operator States多种扩展方式 Operator States的动态扩展是非常灵活的,现提供了3种扩展,下面分别介绍: ListState:并发度在改变的时候,会将并发上的每个List都取出,然后把这些List合并到一个新的List,然后根据元素的个数在均匀分配给新的Task;UnionListState:相比于ListState更加灵活,把划分的方式交给用户去做,当改变并发的时候,会将原来的List拼接起来。然后不做划分,直接交给用户;BroadcastState:如大表和小表做Join时,小表可以直接广播给大表的分区,在每个并发上的数据都是完全一致的。做的更新也相同,当改变并发的时候,把这些数据COPY到新的Task即可以上是Flink Operator States提供的3种扩展方式,用户可以根据自己的需求做选择。 使用Checkpoint提高程序的可靠性 用户可以根据的程序里面的配置将checkpoint打开,给定一个时间间隔后,框架会按照时间间隔给程序的状态进行备份。当发生故障时,Flink会将所有Task的状态一起恢复到Checkpoint的状态。从哪个位置开始重新执行。 Flink也提供了多种正确性的保障,包括: AT LEAST ONCE;Exactly once; 备份为保存在State中的程序状态数据 Flink也提供了一套机制,允许把这些状态放到内存当中。做Checkpoint的时候,由Flink去完成恢复。 从已停止作业的运行状态中恢复 当组件升级的时候,需要停止当前作业。这个时候需要从之前停止的作业当中恢复,Flink提供了2种机制恢复作业: Savepoint:是一种特殊的checkpoint,只不过不像checkpoint定期的从系统中去触发的,它是用户通过命令触发,存储格式和checkpoint也是不相同的,会将数据按照一个标准的格式存储,不管配置什么样,Flink都会从这个checkpoint恢复,是用来做版本升级一个非常好的工具;External Checkpoint:对已有checkpoint的一种扩展,就是说做完一次内部的一次Checkpoint后,还会在用户给定的一个目录中,多存储一份checkpoint的数据; 三.状态管理和容错机制实现下面介绍一下状态管理和容错机制实现方式,Flink提供了3种不同的StateBackend MemoryStateBackendFsStateBackendRockDBStateBackend 用户可以根据自己的需求选择,如果数据量较小,可以存放到MemoryStateBackend和FsStateBackend中,如果数据量较大,可以放到RockDB中。 下面介绍HeapKeyedStateBackend和RockDBKeyedStateBackend 第一,HeapKeyedStateBackend 第二,RockDBKeyedStateBackend Checkpoint的执行流程Checkpoint的执行流程是按照Chandy-Lamport算法实现的。 Checkpoint Barrier的对齐 全量Checkpoint全量Checkpoint会在每个节点做备份数据时,只需要将数据都便利一遍,然后写到外部存储中,这种情况会影响备份性能。在此基础上做了优化。 ...

April 25, 2019 · 1 min · jiezi

Jstorm到Flink-在今日头条的迁移实践

作者:张光辉 本文将为大家展示字节跳动公司怎么把Storm从Jstorm迁移到Flink的整个过程以及后续的计划。你可以借此了解字节跳动公司引入Flink的背景以及Flink集群的构建过程。字节跳动公司是如何兼容以前的Jstorm作业以及基于Flink做一个任务管理平台的呢?本文将一一为你揭开这些神秘的面纱。 本文内容如下: 引入Flink的背景Flink集群的构建过程构建流式管理平台引入Flink的背景下面这幅图展示的是字节跳动公司的业务场景 首先,应用层有广告,也有AB测,也有推送和数据仓库的一些业务。然后在使用J storm的过程中,增加了一层模板主要应用于storm的计算模型,使用的语言是python。所以说中间相对抽象了一个schema,跑在最下面一层J storm计算引擎的上面。 字节跳动公司有很多J-storm集群,在当时17年7月份的时候,也就是在计划迁移到Flink之前,J storm集群的规模大概是下图所示的规模级别,当时已经有5000台机器左右了。 接下来,介绍下迁移Flink的整个过程。先详细地介绍一下当时J-Storm是怎么用的。 上面是一个word count的例子:左边是一个目录结构,这个目录结构在resources下面,里面的Spout/Bolt的逻辑都是一些python脚本写的。然后在最外层还有一个topology_online.yaml配置文件。这个配置文件是用来干什么的?就是把所有的Spout和Bolt串联起来构成一个有向无关图,也就是DAG图。这就是使用J storm时的整个目录结构,大部分用户都是这样用的。右边是Spout和Bolt的逻辑,其实是抽象出来了一个函数,就在这里面写业务方面的函数,然后将tuple_batch也就是上游流下来的数据去做一些计算逻辑。 下面详细介绍一下配置文件的信息,其实我们有整个拓扑结构拓扑的信息,比如说作业名叫什么,作业需要多少资源,需要多少work数。这里面会有单个的spout和Bolt的配置信息,比如是消费的topic还是一些并发度? 除了这些信息还有整个这个数据流的流转,比如说spout的输出,输出messsage的消息等等。最后还有整个的Spout到Bolt之间的shuffle逻辑。这就是我们之前Jstorm的整个使用方式。最后会把整个目录结构里面的内容去解析出来,根据配置文件把整个storm的拓扑结构构建出来,然后提交到集群上面去跑。 使用Jstorm集群遇到了什么问题呢?第一个问题,因为我们当时是用使用python写的代码,整个集群是没有内存隔离的,job和work之间是没有内存限制的。比如说在实际过程中会经常遇到一个用户,他可能代码写的有问题导致一个work可能占了70G内存,把机器的内存占了1/3。第二个问题就是说业务团队之间没有扩大管理,预算和审核是无头绪的。我们当时都是都是跑在一个大集群上面,然后个别业务是单独跑在一些小集群,但是我们每次都是资源不足,也没办法梳理这个预算。 第三个问题就是集群过多,运维平台化做得不太好,都是靠人来运维的。这个时候集群多了基本上是管不过来的。 第四个问题就是说我们用python写的代码,有些性能比较差。但是我们在Storm的基础上面去推广这个Java也比较难,因为我们部分同事实际上是不认可Java的,因为他觉得java开发速度太慢了。 我们当时想解决上面的问题,一个思路是把Jstorm放在yarn上面,直接把Jstorm在yarn上面兼容做这一套。后来因为知道阿里在用Flink所以去调研Flink,发现了Flink的一些优势,所以想尝试用Flink解决存在的问题。 使用Flink首先第一个问题可以成功解决,因为Flink作业是跑在yarn上面的,这就解决了内存隔离的问题。然后Yarn也是支持队列的,我们可以根据业务去划分队列,这样我们的扩大预算审核的问题得到解决了。我们也不需要自己运维一个集群了,因为有yarn去管理我们的资源,这样也节省了运维成员。在此基础上还可以做一些物理隔离队列,其实物理隔离队列现在也遇到了问题。因为物理隔离队列只是说这个机器隔离了,但是相当于是机柜也没有隔离网络带宽也没有隔离,所以说即使是物理隔离队列,现在也遇到比如说和离线作业共用机柜的时候,这个机柜的出口带宽被打满的问题。针对这些问题,我们后续可能想在这个离线离线集群上面做QOS这种流量级别的方式来解决这个问题。 Flink实际上是可以兼容Storm的,比如说之前的历史作业是可以迁移过来的,不需要维护两套计算引擎。Flink支持一些高优先级的API比如说支持SQL以及窗口等特性包括说checkpoint。我们头条的业务对exactly-once的需求不是特别的强烈。 以上就是Flink的优势,于是我们就决定从J storm往Flink去迁移。 Flink集群的构建过程在迁移的过程中,第一件事情是先把Flink集群建立起来。一开始肯定都是追求稳定性,比如说把离线的yarn集群隔离开,然后不依赖于HDFS也可以把Hdfs线上的name node, name space隔离出来。然后我们梳理了原来storm上面的作业,哪些作业属于不同的业务,然后映射到不同的队列里面去,最后把一些特殊的队列也隔离开来。这是我们准备这个Fink集群的时候考虑的几个点。 下面就考虑Flink怎么兼容J storm,然后把它迁移过来。 我们当时Flink用的是1.32版本,因为Flink有Flink-storm这个工程,它能把Storm作业转化成Flink作业,我们就借鉴这些技术上实现了一个Flink –jstorm。相当于把一个J storm的拓扑结构转化成了一个Flink job。只做完这件事情是不够的,因为我们有一系列的外围工具需要去对齐。比如说之前提交作业的时候是通过一个脚本提交的让用户去屏蔽一些其他的参数。使用 flink的话我们同样也是需要构建这么一个脚本,然后去提交Flink Job,最后停止flink Job。第三点是构建flink job外围工具,自动注册报警,比如说消费延迟报警,自动注册这个Dashboard以及一些log service,所有的这些为外围工具都要和原来的服务去对齐。 对齐完之后,我们需要构建一个迁移脚本,迁移的过程中最困难的是资源配置这一块。因为原来Storm用了多少资源,Storm怎么配,这对于迁移的用户来说,如果是第一次做肯定是不了解这些东西。因此我们写这么一个脚本,帮用户生成它Flink集群里面对应的资源使用情况。这些工作做完了之后,我们就开始去迁移。到现在为止,整体迁移完了,还剩下十个左右的作业没有迁移完。现在集群规模达到了大概是6000多台。 在迁移的过程中我们有一些其他优化,比如说J storm是能够支持task和work维度的重启的,Flink这一块做得不是特别好。我们在这方面做了一些优化实现了一个single task和single tm粒度的重启,这样就解决部分作业因为task重启导致整个作业全部重启。 构建流式管理平台 迁移完之后,我们又构建了一个流式管理平台。这个平台是为了解决实际过程中遇到了一些问题,比如说整个机群挂了无法确定哪些作业在上面跑着,也通知不到具体的用户,有些用户作业都不知道自己提交了哪些作业。我们构建流式作业的时候目标实际上就是和其他的管理平台是一样的,比如说我们提供一些界面操作,然后提供一个版本管理,就是为了方便方便用户升级和回滚的操作,我们还提供了一站式的查问题的工具:把一些用户需要的信息都聚合在一个页面上面,防止用户不断跳来跳去以及避免不同系统之间的切换。有一些历史记录之前不管是跑在yarn上面还是跑到storm上面,我一个作业被别人kill到了,其实我都是不知道的。针对这个问题我们提供了一些历史操作记录的一些目标。 设计这个管理平台的时候,我们考虑到提供这么一个前端管理平台可能只是针对公司内部的一部分产品,其他的产品也做了自己的一套前端。他们可以用一个模板,根据自己的逻辑去生成一个storm任务。基于此,我们把整个管理平台抽象了两层:最上一层实际上相当于一个面向用户或者说是类似于前端的一个产品。中间这一层实际上是一个类似于提交作业调度任务,这一层只负责提任务,然后停任务,管理生命周期以及因为故障导致作业失败了,将作业重新拉起来。这是中间层TSS层做的事情。 这样,我们就可以对接到所有的前端平台。通过一个RPC进行TSS通信,就把所有的底层的服务和Filnk和Yarn还有HDFS这些交互的底层的逻辑完全屏蔽开来了。 接下来,用户写一个作业就比较简单了,流程如下: 第一步用户先要生成自己的一个作业模板,我们这边通过maven提供的脚本架去生成一些作业的schema,这个作业执行完之后,它会把帮你把一些porm文件,还有一些类似于kafkasource这种常规的组件都帮你准备好,然后你直接在这个模板里面填自己的主要逻辑就可以了。因为我们写Java程序遇到最多的一个问题就是包冲突问题。所以porm文件帮助用户把一些可能冲突的一些jar包都给以exclude掉,这样包冲突的概率会越来越小。 我们测试作业基本上是用IDEA或者local模式去测试,也提供了一个脚本去提交作业,通过这个脚本提交到stage环境上面。在提交注册在平台上面去注册这个作业,然后添加一些配置信息。 下面是一个代码版本管理的界面: 把整个作业提交之后如下图所示: ...

April 25, 2019 · 1 min · jiezi

从用户成为“股东” —— 在 Apache 基金会的 2600 天

3月27日,腾讯云大数据及人工智能产品研发的专家研究员堵俊平受邀成为 Apache 软件基金会Member(Apache Softeware Foundation Member,以下简称 ASF Member),一封名为 “邀请成为 ASF Member” 的电子邮件正式为堵俊平敲开了开源世界的新大门。从用户成为“股东” —— 在 Apache 基金会的 2600 天从 2012年开始为 Hadoop 的初始版本打补丁,堵俊平已经在 Apache Hadoop 社区深耕了近8年,13年10月成为中国第一个 Hadoop 的 Committer, 15年7月 PMC Member,19年3月荣升ASF Member。“我很荣幸,但从此,我也有了更多的责任。” 现在全世界有 883 位 ASF Member ,中国区仅有13人,其中较为出名的包括 Kyligence 联合创始人兼 CEO 韩卿 (Luke Han) ,以及中国开源社的理事长刘天栋 (Ted Liu) 。与在一个项目单元下垂直贡献不同,ASF Member 会收到 Apache 基金会下超过 350 个开源项目的季度报告,横向地对更多的项目起到管理义务。ASF Member 关注的是 Apache 基金会本身,这通常通过项目相关和跨项目活动来证明。从法律上讲,Member 是基金会的“股东”,也是业主之一。他们有权选举董事会,成为董事会选举的候选人。他们也有权作为导师 (Mentor) 提出一个新的孵化项目。有一点需要特别指出,Apache 基金会中从 Committer 开始的每个角色都只能通过他人提名并投票决定,这代表社区伙伴的认可,每上一个新台阶的背后都有着日日夜夜事无巨细的付出:不断贡献高质量代码、提交 patch,组织 release,回答用户问题,参与投票,培养和提名committer,发表合理合适意见,还有一些影响更加深远的贡献,推动腾讯内部持续贡献 Apache 基金会,组织黑客松和 meetup ,身体力行地推广Hadoop,传递开源理念。堵俊平今年的想法是主动去挖掘 1-2 个合适的项目,推荐进入孵化流程,“Mentor 有点像投资人,只不过我们是拿出自己的时间来投资”,堵俊平做了这样的比喻,时间比资金更有限、更私人,所以选择开源项目时会坚持从技术驱动,在自己有兴趣的领域帮助有潜力的项目快速成熟。代码、人,社区都在成长 —— Apache 基金会的运作模式Apache 基金会的官网上有几十份、累计数十万字的文档内容在介绍 Apache 基金会的运作模式,在真正接触到基金会的“内部人士”前,外界似乎很难相信一个跨时区、跨文化、跨公司的组织能够严格按照这样的模式运作了20年。它详细到超乎想象,哪怕是针对一些意外情况,也多能在这些文档找到解决方案。“ASF Member 想要退休怎么办?”,“决策投票的有效期在跨时区的情况下如何保证?”,“投出+0.9票的成员是怎么想的”……诸如此类。Apache 基金会中的每个人、每个项目、每个社区,都并非固定一成不变的,它是一个极其动态的过程,每个人、项目和社区时刻都在成长,而这一切是透明的,作为一个普通用户,几乎不要花多少功夫,你就能找到这个庞大的社区每天发生的一切变化:代码量的增减、提交者的变化、最新的Release清单。Apache 基金会像是一个精密的齿轮,日夜不停地转动,开源这个概念自身的魅力正是其磨合剂。作为社区中的人,只要你参与在 Apache 基金会的项目中,你就肯定能找到一个对应角色:•用户(User):开始使用一个或多个 Apache 基金会的开源项目。•贡献者(Contributor):提交代码或文档的patches,在官方渠道(邮件列表,IRC等)支持其它用户。•提交者(Committer):持续贡献,坚持贡献,被提名、投票通过后,拥有直接访问并提交代码的权限。•项目管理成员(PMC Member):做了更多不局限于代码的贡献,进入单个项目个管理委员会,通过投票影响这个项目的发展方向。•Apache 基金会成员(ASF Member):对 Apache 基金会直接负责,在多个项目中做出贡献,拥有董事会的投票权。如果你已经在维护一个开源项目,想让它进入Apache基金会,那你则需要充分了解项目在社区不断演进的过程,“提名→进入孵化器→成为顶级项目”,每一步都有迹可循。 (图为一个开源项目进入孵化器的过程)从 Apache Way 到 Tencent Way—— 以 TOSA 加速力行开源实践Apache 之道影响了包括腾讯在内的众多中国公司,近几年,中国的开源爱好者们在大会演讲中终于不是只会讲系统是如何设计的、代码是如何实现的,“开源社区”成为业内一个有点抽象的流行词。“社区”到底是什么?其实就是多人+互动关系,开源社区就是指大家的互动关系围绕着开源项目而产生。不过这种关系并不会凭空产生,原始开发者需要站在一个完全陌生的开发者角度去思考“我为什么要加入你?”这里有很多方法已经在 Apache 之道中得到总结:首先这应该是一个创新的项目,简单易懂的上手指南、详细全面的项目文档、统一规范的代码格式都能够降低其他开发者的门槛,吸纳贡献者之前要先想清楚项目需要哪方面的帮助,贡献者加入之前也要明确如何协调工作。对于自由开发者来说,践行以上方法,可能只需要多一点点决心而已,但对于公司体制下的开源开发者,得到公司和所在团队的支持也许更加实际。18年中旬,腾讯正式成立了开源管理办公室,腾讯BG相对独立、自下而上的管理模式其实和 Apache 软件基金会颇有类似之处,因此这个办公室的组织架构也设计成类似于 Apache 软件基金会的模式。开源合规组应对开源的法律风险,TPMC聚集了每个项目的内外部开发者,而这个略带江湖气息的腾讯开源联盟TOSA则是整个组织的大脑,负责思考腾讯开源要向哪个方向前行。堵俊平现任腾讯开源联盟的主席,除了负责 Apache 基金会 的各项事宜外,他还主动承担起管理和治理腾讯开源工作的职责。“我非常高兴能看到腾讯开源选择 Apache 的模式,这奠定了一个项目不断壮大的基础,对于发展中遇到的问题,我会坚持开放透明的方式去解决”,堵俊平提出了三点目标:
改进腾讯开源的审核流程。发布统一的审核平台,能让大家看到自己及其它正在审核中的项目的进程,尽量从内部开始,就把流程透明化。此外,目前开源前的审核大多是法律方面的流程,很少有针对项目本身代码质量、文档建设的考量,开源后会不会被骂谁也没有把握,我希望腾讯也能有个的导师制度,导师深度参与到一个新的开源项目中,给予帮助。我们甚至可以建立一个tencent-incubator的仓库,放置一些不那么成熟的项目,这样外部开发者使用的时候也更容易选择:选择成熟的,成本低;选择孵化中的,有机会一起改变。帮助项目构建外部的生态。对于构建开源项目的外部生态,堵俊平表示这对腾讯来说并不是一个轻松的过程,除了他个人可以作为Mentor推荐腾讯的开源项目在Apache 基金会中孵化成顶级项目以外,腾讯云也在持续为开源Hadoop等项目贡献patch和feature,包括验证release用于生产环境。他表示腾讯云愿意为开源项目提供支持,可能有很多方式,帮助开源项目打包成商业级服务在腾讯云上便捷的提供给用户,或者组织技术大会给开源提供更多的曝光窗口等。建立腾讯对开源的评估体系。“国内有一些有关各大公司开源水平的评价新闻我认为并不够确切,纯粹去比拼数量和Star其实是个简单粗暴的行为”,堵俊平谈到:“就像 Apache 基金会对孵化的项目提出的要求——至少有来自三家公司以上的贡献者才能毕业,这个行为其实是在保护用户,我希望腾讯对于自己的开源项目也能有一些更加细致、更加专业的评估体系,这样无论在任何场合,面对任何报道,我们都让外界对腾讯的开源、腾讯的技术充满信心。”关于腾讯开源腾讯开源始于2010年。在开放战略背景下,腾讯在内部开始推行“开放、共享、合力开发”的研发模式。如今,腾讯已有超过8000个内部开源的开发项目(组件)在公司跨团队、跨部门、跨业务地运用。从2016年起,腾讯开始将内部优质项目对外发布,以Github为主要阵地进行开源项目经营,腾讯对外开源开始进入了快节奏时代。目前,腾讯已将三个广受社区的认可的开源项目TARS、TSeer和Angel分别捐赠Linux基金会和Linux深度学习基金会长期运作。同时,腾讯已成为Linux 基金会、Apache基金会、Openstack基金会、MariaDB基金会及LF深度学习基金会的白金会员,还加入GPL合作承诺,坚持以专业、合规的方式推进开源工作。 ...

April 18, 2019 · 1 min · jiezi

个推基于 Apache Pulsar 的优先级队列方案

作者:个推平台研发工程师 祥子一、业务背景在个推的推送场景中,消息队列在整个系统中占有非常重要的位置。当 APP 有推送需求的时候, 会向个推发送一条推送命令,接到推送需求后,我们会把APP要求推送消息的用户放入下发队列中,进行消息下发;当同时有多个APP进行消息下发时,难免会出现资源竞争的情况, 因此就产生了优先级队列的需求,在下发资源固定的情况下, 高优先级的用户需要有更多的下发资源。二、基于 Kafka 的优先级队列方案针对以上场景,个推基于 Kafka 设计了第一版的优先级队列方案。Kafka 是 LinkedIn 开发的一个高性能、分布式消息系统;Kafka 在个推有非常广泛的应用,如日志收集、在线和离线消息分发等。架构在该方案中,个推将优先级统一设定为高、中、低三个级别。具体操作方案如下:对某个优先级根据 task (单次推送任务)维度,存入不同的 Topic,一个 task 只写入一个 Topic,一个 Topic 可存多个 task;消费模块根据优先级配额(如 6:3:1),获取不同优先级的消息数,同一优先级轮询获取消息;这样既保证了高优先级用户可以更快地发送消息,又避免了低优先级用户出现没有下发的情况。Kafka 方案遇到的问题随着个推业务的不断发展,接入的 APP 数量逐渐增多,第一版的优先级方案也逐渐暴露出一些问题:当相同优先级的 APP 在同一时刻推送任务越来越多时,后面进入的 task 消息会因为前面 task 消息还存在队列情况而出现延迟。如下图所示, 当 task1 消息量过大时,在task1 消费结束前,taskN 将一直处于等待状态。Kafka 在 Topic 数量由 64 增长到 256 时,吞吐量下降严重,Kafka 的每个 Topic、每个分区都会对应一个物理文件。当 Topic 数量增加时,消息分散的落盘策略会导致磁盘 IO 竞争激烈,因此我们不能仅通过增加 Topic 数量来缓解第一点中的问题。基于上述问题,个推进行了新一轮的技术选型, 我们需要可以创建大量的 Topic, 同时吞吐性能不能比 Kafka 逊色。经过一段时间的调研,Apache Pulsar 引起了我们的关注。三、为什么是 PulsarApache Pulsar 是一个企业级的分布式消息系统,最初由 Yahoo 开发,在 2016 年开源,并于2018年9月毕业成为 Apache 基金会的顶级项目。Pulsar 已经在 Yahoo 的生产环境使用了三年多,主要服务于Mail、Finance、Sports、 Flickr、 the Gemini Ads platform、 Sherpa (Yahoo 的 KV 存储)。架构Topic 数量Pulsar 可以支持百万级别 Topic 数量的扩展,同时还能一直保持良好的性能。Topic 的伸缩性取决于它的内部组织和存储方式。Pulsar 的数据保存在 bookie (BookKeeper 服务器)上,处于写状态的不同 Topic 的消息,在内存中排序,最终聚合保存到大文件中,在 Bookie 中需要更少的文件句柄。另一方面 Bookie 的 IO 更少依赖于文件系统的 Pagecache,Pulsar 也因此能够支持大量的主题。消费模型Pulsar 支持三种消费模型:Exclusive、Shared 和Failover。Exclusive (独享):一个 Topic 只能被一个消费者消费。Pulsar 默认使用这种模式。Shared(共享):共享模式,多个消费者可以连接到同一个 Topic,消息依次分发给消费者。当一个消费者宕机或者主动断开连接时,那么分发给这个消费者的未确认(ack)的消息会得到重新调度,分发给其他消费者。Failover (灾备):一个订阅同时只有一个消费者,可以有多个备份消费者。一旦主消费者故障,则备份消费者接管。不会出现同时有两个活跃的消费者。Exclusive和Failover订阅,仅允许一个消费者来使用和消费每个订阅的Topic。这两种模式都按 Topic 分区顺序使用消息。它们最适用于需要严格消息顺序的流(Stream)用例。Shared 允许每个主题分区有多个消费者。同一个订阅中的每个消费者仅接收Topic分区的一部分消息。Shared最适用于不需要保证消息顺序队列(Queue)的使用模式,并且可以按照需要任意扩展消费者的数量。存储Pulsar 引入了 Apache BookKeeper 作为存储层,BookKeeper 是一个专门为实时系统优化过的分布式存储系统,具有可扩展、高可用、低延迟等特性。具体介绍,请参考 BookKeeper官网。SegmentBookKeeper以 Segment (在 BookKeeper 内部被称作 ledger) 作为存储的基本单元。从 Segment 到消息粒度,都会均匀分散到 BookKeeper 的集群中。这种机制保证了数据和服务均匀分散在 BookKeeper 集群中。Pulsar 和 Kafka 都是基于 partition 的逻辑概念来做 Topic 存储的。最根本的不同是,Kafka 的物理存储是以 partition 为单位的,每个 partition 必须作为一个整体(一个目录)存储在某个 broker 上。 而 Pulsar 的 partition 是以 segment 作为物理存储的单位,每个 partition 会再被打散并均匀分散到多个 bookie 节点中。这样的直接影响是,Kafka 的 partition 的大小,受制于单台 broker 的存储;而 Pulsar 的 partition 则可以利用整个集群的存储容量。扩容当 partition 的容量达到上限后,需要扩容的时候,如果现有的单台机器不能满足,Kafka 可能需要添加新的存储节点,并将 partition 的数据在节点之间搬移达到 rebalance 的状态。而 Pulsar 只需添加新的 Bookie 存储节点即可。新加入的节点由于剩余空间大,会被优先使用,接收更多的新数据;整个扩容过程不涉及任何已有数据的拷贝和搬移。Broker 故障Pulsar 在单个节点失败时也会体现同样的优势。如果 Pulsar 的某个服务节点 broker 失效,由于 broker 是无状态的,其他的 broker 可以很快接管 Topic,不会涉及 Topic 数据的拷贝;如果存储节点 Bookie 失效,在集群后台中,其他的 Bookie 会从多个 Bookie 节点中并发读取数据,并对失效节点的数据自动进行恢复,对前端服务不会造成影响。Bookie 故障Apache BookKeeper 中的副本修复是 Segment (甚至是 Entry)级别的多对多快速修复。这种方式只会复制必须的数据,这比重新复制整个主题分区要精细。如下图所示,当错误发生时, Apache BookKeeper 可以从 bookie 3 和 bookie 4 中读取 Segment 4 中的消息,并在 bookie 1 处修复 Segment 4。所有的副本修复都在后台进行,对 Broker 和应用透明。当某个 Bookie 节点出错时,BookKeeper会自动添加可用的新 Bookie 来替换失败的 Bookie,出错的 Bookie 中的数据在后台恢复,所有 Broker 的写入不会被打断,而且不会牺牲主题分区的可用性。四、基于 Pulsar 的优先级队列方案在设计思路上,Pulsar 方案和 Kafka 方案并没有多大区别。但在新方案中,个推技术团队借助 Pulsar 的特性,解决了 Kafka 方案中存在的问题。根据 task 动态生成 Topic,保证了后进入的 task 不会因为其他 task 消息堆积而造成等待情况。中高优先级 task 都独享一个 Topic,低优先级 task 共享 n 个 Topic。相同优先级内,各个 task 轮询读取消息,配额满后流转至下一个优先级。相同优先级内, 各个 task 可动态调整 quota, 在相同机会内,可读取更多消息。利用 Shared 模式, 可以动态添加删除 consumer,且不会触发 Rebalance 情况。利用 BookKeeper 特性,可以更灵活的添加存储资源。五、Pulsar 其他实践不同 subscription 之间相对独立,如果想要重复消费某个 Topic 的消息,需要使用不同的 subscriptionName 订阅;但是一直增加新的 subscriptionName,backlog 会不断累积。如果 Topic 无人订阅,发给它的消息默认会被删除。因此如果 producer 先发送,consumer 后接收,一定要确保 producer 发送之前,Topic 有 subscription 存在(哪怕 subscribe 之后 close 掉),否则这段时间发送的消息会导致无人处理。如果既没有人发送消息,又没有人订阅消息,一段时间后 Topic 会自动删除。Pulsar 的 TTL 等设置,是针对整个 namespace 起效的,无法针对单个 Topic。Pulsar 的键都建立在 zookeeper 的根目录上,在初始化时建议增加总节点名。目前 Pulsar 的 java api 设计,消息默认需要显式确认,这一点跟 Kafka 不一样。Pulsar dashboard 上的 storage size 和 prometheus 上的 storage size (包含副本大小)概念不一样。把dbStorage_rocksDB_blockCacheSize 设置的足够大;当消息体量大,出现backlog 大量堆积时, 使用默认大小(256M)会出现读耗时过大情况,导致消费变慢。使用多 partition,提高吞吐。在系统出现异常时,主动抓取 stats 和 stats-internal,里面有很多有用数据。如果业务中会出现单 Topic 体量过大的情况,建议把 backlogQuotaDefaultLimitGB 设置的足够大(默认10G), 避免因为默认使用producer_request_hold 模式出现 block producer 的情况;当然可以根据实际业务选择合适的 backlogQuotaDefaultRetentionPolicy。根据实际业务场景主动选择 backlog quota。prometheus 内如果发现读耗时为空情况,可能是因为直接读取了缓存数据;Pulsar 在读取消息时会先读取 write cache, 然后读取 read cache;如果都没有命中, 则会在 RocksDB 中读取条目位子后,再从日志文件中读取该条目。写入消息时, Pulsar 会同步写入 journal 和 write cache;write cache 再异步写入日志文件和 RocksDB; 所以有资源的话,建议 journal 盘使用SSD。六、总结现在, 个推针对优先级中间件的改造方案已经在部分现网业务中试运行,对于 Pulsar 的稳定性,我们还在持续关注中。作为一个2016 年才开源的项目,Pulsar 拥有非常多吸引人的特性,也弥补了其他竞品的短板,例如跨地域复制、多租户、扩展性、读写隔离等。尽管在业内使用尚不广泛, 但从现有的特性来说, Pulsar 表现出了取代 Kafka 的趋势。在使用 Pulsar 过程中,我们也遇到了一些问题, 在此特别感谢翟佳和郭斯杰(两位均为 Stream Native 的核心工程师、开源项目 Apache Pulsar 的 PMC 成员)给我们提供的支持和帮助。参考文献:[1] 比拼 Kafka, 大数据分析新秀Pulsar 到底好在哪(https://www.infoq.cn/article/...[2] 开源实时数据处理系统Pulsar:一套搞定Kafka+Flink+DB(https://juejin.im/post/5af414… ...

April 15, 2019 · 2 min · jiezi

Apache 透过 htaccess 隐藏 php 副档名(mod_rewrite)

本教学使用环境介绍伺服器端:Ubuntu 18.04 LTS资料库:Mariadb 10.1.34(Mysql)语言版本:php 7.3本机端:MacOS High Sierra首先安装好 apache 后,启用 rewrite 功能$ a2enmod rewrite然后再到 /etc/apache2/apache2.conf 添加内容$ nano /etc/apache2/apache2.conf内容为<Directory /var/www/> Options Indexes FollowSymLinks AllowOverride All Require all granted</Directory>记得将路径设为你的网站根目录路径呦!接着将 apache reloadservice apache2 reload然后去你的网站根目录中添加档案为 .htaccess,并加入以下内容Options -IndexesOptions +FollowSymlinksRewriteEngine on在同一个 .htaccess 档案中添加 RewriteRule,就像这样Options -IndexesOptions +FollowSymlinksRewriteEngine onRewriteRule ^admin/index$ admin/index.php这样只要访问路径 /admin/index 就等于是访问了 /admin/index.php,apache已经帮你隐藏副档名了Line ID:ianmacQQ:1258554508

April 13, 2019 · 1 min · jiezi

php 设定启用 php缩写(php.ini、short_open_tag)

本教学使用环境介绍伺服器端:Ubuntu 18.04 LTS资料库:Mariadb 10.1.34(Mysql)语言版本:php 7.3本机端:MacOS High Sierra启用 php 缩写能节省一些写法,虽然没差多少,只是要是脚本多了,看起来就比较好辨识例如php 脚本一开头需要加上 php<?php // do..?>开了简写后就不用了<? // do..?>以及要 echo 资料时<?php echo $data; ?>开了简写后<?=$data;?>是不是干净多了呢!可能还有其他的简写方式,但是我没有发现~只是注意如果有使用 crontab 跑 php 脚本时,该脚本的开头还是要有 <?php 不然会无法运行喔! (原因不明)知道的人跟我说一下呦!那就开始设定简写功能吧前往你目前正在使用的 php 版本,里面会有 apache2 资料夹直接 nano 进去 php.ini$ nano /etc/php/7.X/apache2/php.ini然后找到 short_open_tag 将它改为 On 就行了short_open_tag = On别忘了 reload$ service apache2 reloadLine ID:ianmacQQ:1258554508

April 13, 2019 · 1 min · jiezi

You don't have permission to access / on this server.

网上的答案千篇一律,没有一个能用的,真心怀疑这些作者有没有自己试过他们的答案。直接上答案:打开 Apache/conf/extra/httpd-vhosts.conf修改<VirtualHost default:80>ServerName example.comDocumentRoot “把这里改成你的document root” <Directory “把这里改成你的document root”>AllowOverride AllOrder allow,denyAllow from all</Directory></VirtualHost>也有这样的总之吧DocumentRoot改过来就对了然后重启一下Apache,就OK了

April 11, 2019 · 1 min · jiezi

关于写作那些事之终于还是无法忍受纯人工统计数据

背景作为正在探索如何写作并发表到各大博客平台的新人,目前虽然已基本弄清写作和发表的基本流程,但是离打造个人知名度还差很大很大一段距离.尤其处于新手阶段,需要的更是自信与外界的积极反馈,看着各平台日益增长的阅读量和粉丝量,心中自然不甚欣喜.但是,持续的技术输出能否坚持下去很大程度上靠的是外界的积极反馈,如果写的文章基本没人看,或者反映并不理想,估计也很难再坚持创作了.所以笔者每天晚上都会统计一下各个平台的数据,看一下有哪些收获,只有看得见的数据才能给我安全感和自信心.下面简单展示一下每日数据统计效果:每日数据统计这里列出的平台默认是没有提供数据分析功能,而有些平台已经提供数据分析,说不定还要丰富图表分析功能,自然不用像下面这般复杂操作.所以,针对没有提供数据分析的平台,只好采用人工方式进行每日数据统计,一开始文章比较少,用肉眼加计算器就能很轻松得到阅读量和粉丝数等数据.但是,随着文章的每日更新,不断累加的文章越来越多,人工方式简直让我崩溃,比如昨晚在统计慕课网手记相关数据时就意外被一旁的小侄子打断三次!简直不可忍受,穷则思变,懒则想法偷懒,所以是时候探索新的方式解决纯手动的弊端了!全网汇总数据慕课手记简书博客园腾讯云社区图表渲染效果来自 gitbook 的 chart 插件,详情请参考 官网文档懒则想法偷懒回顾操作流程要想解放重复劳动量,必须先知道问题瓶颈,现在先回顾一下手动操作流程.登录各大博客平台后台,找到文章列表.打开计算器按照阅读量等指标累加每篇文章的相关数据.更新统计页面数据,利用 chart 插件渲染图标.修改 chart 渲染数据语法,截图渲染效果.确认渲染效果并推送到 github 网站本来不必利用截图表示图表的,只是无奈 github 不支持 chart 插件语法,只好用截图代替了.思考问题瓶颈分析上述流程后不难发现,最复杂也是最费时费力的便是第二步的数据统计,由于要肉眼统计文章并用计算器累加,简直是手脑并用,只有高度专注才能保证统计数据的准确性和可靠性.这也就解释了被打断三次后的崩溃了,找到问题的根源了,想办法如何解决吧!最容易想到的解决办法是手动复制文章列表数据,然后程序分析提取关键数据,最后再统计数据.又是三步操作,再分解一下步骤,看看目前能够解决哪部分.手动复制文章列表数据程序分析提取关键数据统计指标数据在这三步中,只有第二步最为关键,也是目前我能做到的事情,因为第一步可能需要爬虫技术或模拟接口调用,总体来说,总体来说还是比较麻烦的,以后再继续优化吧.梳理操作流程因此,现在先着手如何将复制后的文章列表转化成程序能够处理的文件格式,进而调用程序统计.下面以慕课网手记文章为例,简单介绍下处理流程.手动复制文章现在文章已复制到文件,应该保存成什么格式呢?这又是一个思考点.由于文件内容最终需要被程序处理,而程序处理要求数据需要具备一定的格式,因此自然不能是 txt 或 word 这类文档,平常接触比较多的文档数据处理一般就是 excel 或者 json 类型的文档.这里需要 excel 这种格式文档,但是 excel 比较笨重,还需要相关软件才能打开 excel 文件,好像并不是很适合,怎么办呢?但是我真的需要这种一行一行的数据格式啊,有没有折中的处理方案?当然有!轻量级的 csv 格式不是巧合适合简单文档处理吗?csv 和 excel 具有类似的特征,大体上都是一行一行一列一列地存储数据,最适合统计数据了.看着乱七八糟的文章列表,csv 也无法处理这种复杂数据啊,接下来还是要手动格式化数据,整理一下数据.程序分析提取至此,我们已经完成数据分析的第一步了,接下来是如何读取 csv 文件,由于本人是 java 程序员,所以我要看一下 java 如何处理 csv 文件.需求很简单,编写一个 csv 工具类并实现基本的写入和读取操作即可.说到工具类当然首选现成的开源工具了,毕竟小小的需求不值得造轮子.寻求解决方案说到开源工具,脑海中第一个闪现的是 Apache Commons 工具类,所以先去 maven 上搜一下有没有 csv 相关的工具类.在线搜索 commons-csv天不负我!果然有 csv 相关工具类,下面就开始研究如何调用吧!集成 commons-csv 工具类<!– https://mvnrepository.com/artifact/org.apache.commons/commons-csv –><dependency> <groupId>org.apache.commons</groupId> <artifactId>commons-csv</artifactId> <version>1.6</version></dependency>编写工具类/** * 写入csv文件 * * @param data 数据内容 * @param filePath 文件路径 * @throws IOException /public static void writeCsv(List<String[]> data, String filePath) throws IOException { FileWriter fw = new FileWriter(new File(filePath)); final CSVPrinter printer = CSVFormat.EXCEL.print(fw); printer.printRecords(data); printer.flush(); printer.close();}/ * 读取csv文件 * * @param filePath 文件路径 * @return CSVRecord 迭代对象 * @throws IOException /public static Iterable<CSVRecord> readCSV(String filePath) throws IOException { InputStream inputStream = new FileInputStream(filePath); InputStreamReader isr = new InputStreamReader(inputStream); Iterable<CSVRecord> records = CSVFormat.EXCEL.parse(isr); return records;}/ * 测试写入并读取csv 文件 /private static void testWriteAndRead() throws IOException { //写入数据 List<String[]> data = new ArrayList<String[]>(); data.add(new String[]{“张三”, “18”, “3000”}); data.add(new String[]{“李四”, “20”, “4000”}); data.add(new String[]{“王二”, “25”, “5000”}); //写入文件路径 String path = “/Users/sunpo/Downloads/testWriteAndRead.csv”; //写入 csv 文件 writeCsv(data, path); //读取文件 Iterable<CSVRecord> records = readCSV(path); for (CSVRecord record : records) { for (String string : record) { System.out.print(string); System.out.print(" “); } System.out.println(); }}测试写入并读取功能测试结果真实可用,工具类基本功能编写完成.制定解决方案已经有了 csv 工具类,那么现在就要想办法解决实际问题,再看一下当前慕课网手记的内容格式吧!148浏览 2推荐 0评论204浏览 2推荐 0评论181浏览 2推荐 0评论分析上述内容格式有以下特点:内容数据一行一条数据,可能需要换行符问题每一行数据以空格分割,可分割成数组或列表再处理已分割后的列表项包括了有效数据和文字说明,可能需要过滤出有效数据按照上述分析结果,开始 coding 逐个解决,下面展示下关键代码.按照空格将每一行数据分割成列表List<String> row = StringTools.splitToListString(string, " “);StringTools.splitToListString 方式是笔者封装的分割字符串方法,目的将字符串按照指定分隔符分割成字符串列表处理分割后字符串列表并过来出有效数据String readCountWithDescString = row.get(0);String readCountString = StringUtils.substringBefore(readCountWithDescString, “浏览”);String recommendCountWithDescString = row.get(1);String recommendCountString = StringUtils.substringBefore(recommendCountWithDescString, “推荐”);String commentCountWithDescString = row.get(2);String commentCountString = StringUtils.substringBefore(commentCountWithDescString, “评论”);StringUtils.substringBefore 方法也是Apache Commons 工具类,具体来源于 org.apache.commons.lang3 ,下述涉及到的 StringUtils 静态方法 也是,不再单独说明.最后一步即统计分析//浏览数int readCount = 0;//推荐数int recommendCount = 0;//评论数int commentCount = 0;readCount += Integer.parseInt(readCountString);recommendCount += Integer.parseInt(recommendCountString);commentCount += Integer.parseInt(commentCountString);实施解决方案如此一来,三步均已解决,现在运行以下统计方法,看一下真实效果如何./* * 统计慕课手记 * * @throws IOException */private static void countImooc() throws IOException { //昨日统计数据 String yesterday = DateFormatUtils.format(DateUtils.addDays(new Date(), -1), “yyyyMMdd”); String path = String.format("/Users/sunpo/Documents/workspace/count/imooc-%s.csv”, yesterday); //总行数 int allRows = 0; //有效行数 int allValidRows = 0; //当前行是否有效 boolean isValidRow = true; //浏览数 int readCount = 0; //推荐数 int recommendCount = 0; //评论数 int commentCount = 0; Iterable<CSVRecord> records = readCSV(path); for (CSVRecord record : records) { allRows++; for (String string : record) { System.out.println(string); if (StringUtils.isBlank(string)) { isValidRow = false; break; } List<String> row = StringTools.splitToListString(string, " “); String readCountWithDescString = row.get(0); String readCountString = StringUtils.substringBefore(readCountWithDescString, “浏览”); String recommendCountWithDescString = row.get(1); String recommendCountString = StringUtils.substringBefore(recommendCountWithDescString, “推荐”); String commentCountWithDescString = row.get(2); String commentCountString = StringUtils.substringBefore(commentCountWithDescString, “评论”); readCount += Integer.parseInt(readCountString); recommendCount += Integer.parseInt(recommendCountString); commentCount += Integer.parseInt(commentCountString); } if (isValidRow) { allValidRows++; } isValidRow = true; } System.out.println(); System.out.println(String.format("[慕课手记] 一共读取%d行,有效行: allValidRows = %d ,其中浏览数: readCount = %d ,推荐数: recommendCount = %d ,评论数: commentCount = %d”, allRows, allValidRows, readCount, recommendCount, commentCount)); System.out.println();}很完美,终于不必再肉眼统计数据了,虽然很长程度上仍然依赖人工整理好 csv 文件,但是目前已经解决了纯手动的弊端.因此,上述解决方案是半手动的方式,仍然还有很多可以优化的地方,等下次忍受不了这种方案时再解决!小结本文主要介绍了纯手工统计报表遇到的诸多问题,寻求一种相对简单的解决方案.基本流程大致可以分为下述流程:手动复制文章列表(包括阅读量,评论量和点赞数),并整理成标准的 csv 格式文件.编写各个平台的 csv 工具处理类,解析并统计 csv 文件内容.运行工具类得到最终统计数据,大功告成!本文主要介绍的是解决问题的思路,对于其中涉及到的相关技术点并未深入展开,关键源码已经贴上,如果还想要更详细的完整源码,可以留言回复. ...

April 11, 2019 · 2 min · jiezi

centos7下利用yum搭建LAMP环境

由于在阿里云上重置了系统,所以得重新搭建环境,搭建过程中遇到不少坑,在网上搜索之后才得以解决,在这里做个记录,方便日后直接看自己博文。一:安装Apache1、安装Apacheyum -y install httpd2、Apache配置httpd.conf通过命令find / -name httpd.conf 找到Apache配置文件httpd.conf(默认在/etc/httpd/conf/httpd.conf)编辑httpd.conf文件vi /etc/httpd/conf/httpd.conf修改DocumentRoot “/xx/xx/xxx”,项目在哪个目录下,就将"/xx/xx/xxx"改为哪个目录,例如DocumentRoot “/var/www/html” ,同样将<Directory “/xx/xx/xxx”>修改为<Directory “/var/www/html”>。查看是否安装成功(启动Apache,并查看Apache状态) service httpd start service httpd status显示OK说明安装成功配置Apache开机启动项 chkconfig –add httpd //(在服务清单中添加httpd服务) chkconfig httpd on二:安装PHP1、更换RPM源#Centos 5.X:rpm -Uvh http://mirror.webtatic.com/yum/el5/latest.rpm#CentOs 6.x:rpm -Uvh http://mirror.webtatic.com/yum/el6/latest.rpm#CentOs 7.X:rpm -Uvh https://mirror.webtatic.com/yum/el7/epel-release.rpmrpm -Uvh https://mirror.webtatic.com/yum/el7/webtatic-release.rpm2、安装新版本 PHPphp 7.0/7.1/7.2 分别表示为 70w/71w/72wyum install php71w php71w-cli php71w-common php71w-devel php71w-embedded php71w-fpm php71w-gd php71w-mbstring php71w-mysqlnd php71w-opcache php71w-pdo php71w-xml php71w-ldap php71w-mcrypt3、 重新启动相关服务service php-fpm restartservice httpd restart4、检查版本php -v三:安装mysql一般网上给出的资料都是yum install mysqlyum install mysql-serveryum install mysql-devel安装mysql和mysql-devel都成功,但是安装mysql-server失败,查资料发现是CentOS 7 版本将MySQL数据库软件从默认的程序列表中移除,用mariadb代替了。有两种解决方法,一种是安装mariadb,另一种是直接从官网下载mysql-server,看个人喜欢了,本人采取的是第二种。方法一:安装mariadbyum install mariadb-server mariadb mariadb数据库的相关命令是:systemctl start mariadb #启动MariaDBsystemctl stop mariadb #停止MariaDBsystemctl restart mariadb #重启MariaDBsystemctl enable mariadb #设置开机启动所以先启动数据库systemctl start mariadb方法二:官网下载安装mysql-serverwget http://dev.mysql.com/get/mysql-community-release-el7-5.noarch.rpmrpm -ivh mysql-community-release-el7-5.noarch.rpmyum install mysql-community-server安装成功后重启mysql服务。service mysqld restart初次安装mysql,root账户没有密码。进入mysql,执行命令:set password for ‘root’@’localhost’ =password(‘password’); //括号内写上新密码配置mysql,执行/etc/my.cnf按 i 进入编辑,追加default-character-set =utf8esc退出编辑, :wq 回车保存退出。进入数据库,远程连接设置#把在所有数据库的所有表的所有权限赋值给位于所有IP地址的root用户。mysql>grant all privileges on . to root@’%‘identified by ‘password’;ysql#如果是新用户而不是root,则要先新建用户mysql>create user ‘username’@’%’ identified by ‘password’; 此时就可以进行远程连接了。ok,大功告成。参考链接:centos7 mysql数据库安装和配置 Centos 6/7 升级 PHP 5.6 到 7.1/7.2 ...

April 7, 2019 · 1 min · jiezi