加入收藏 | 设为首页 | 会员中心 | 我要投稿 湖南网 (https://www.hunanwang.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 教程 > 正文

行使Scala开拓Apache Kafka的TOP 20大最佳实践!

发布时间:2018-08-26 04:52:34 所属栏目:教程 来源:赵钰莹
导读:本文作者是一位软件工程师,他对20位开拓职员和数据科学家行使Apache Kafka的方法举办了最大限度得深入研究,最终将出产实践环节必要留意的题目总结为本文所列的20条提议。 Apache Kafka是一个广受接待的漫衍式流媒体平台,New Relic、Uber以及Square等数
副问题[/!--empirenews.page--]

本文作者是一位软件工程师,他对20位开拓职员和数据科学家行使Apache Kafka的方法举办了最大限度得深入研究,最终将出产实践环节必要留意的题目总结为本文所列的20条提议。

行使Scala开拓Apache Kafka的TOP 20大最佳实践!

Apache Kafka是一个广受接待的漫衍式流媒体平台,New Relic、Uber以及Square等数千家公司都在行使它构建可扩展、高吞吐量、靠得住的及时流媒系一切。譬喻,New Relic的Kafka集群每秒处理赏罚高出1500万条动静,总数据速度靠近1 Tbps。

Kafka在应用措施开拓职员和数据科学家中很是受接待,由于它极大简化了数据流的处理赏罚进程。可是,Kafka在Scala上实践会较量伟大。假如斲丧者无法跟上数据流,而且动静在他们看到之前就消散了,那么具有自动数据保存限定的高吞吐量宣布/订阅模式并没有多大用。同样,假如托管数据流的体系无法扩展以满意需求可能不行靠,也没有什么用。

为了低落这种伟大性,作者将也许的题目分为4大类共20条,以利便用户领略:

  • Partitions(分区)
  • Consumers(斲丧者)
  • Producers(出产者)
  • Brokers

Kafka是一种高效漫衍式动静转达体系,可提供内置数据冗余和弹性,同时保存高吞吐量和可扩展性。它包罗自动数据保存限定,使其很是得当将数据视为流的应用措施,而且还支持对键值对映射建模的“压缩”流。

相识最佳实践之前,你必要认识一些要害术语:

  • Message动静:Kafka中的记录或数据单位。每条动静都有一个键(key)和一个值(value),以及可选问题。
  • 出产者:出产者向Kafka的topic宣布动静。出产者抉摘要宣布哪个topic分区,可以随机(轮回)或行使基于动静密钥的分区算法。
  • Broker:Kafka在漫衍式体系或集群中运行,集群中的每个节点都称为broker。
  • Topic:Topic是宣布数据记录或动静的种别。斲丧者订阅topic以读取写入个中的数据。
  • Topic partition:topic分为多个分区,每个动静都有一个偏移量。每个分区凡是至少复制一或两次。每个分区都有一个leader和至少一个副本(数据副本),这些副本存在于follower身上,可以防备broker失败。集群中的全部broker都是leader和follower,可是署理最多只有一个topic partition副本,leader用于全部读写操纵。
  • 偏移:为分区内的每条动静分派一个偏移量,这是一个单调递增整数,用作分区内动静的独一标识符。
  • 斲丧者:斲丧者通过订阅 topic partition读取Kafka主题的动静,斲丧应用措施,并处理赏罚动静以完成所需事变。
  • Consumer group:斲丧者可以组织成斲丧者群组,分派topic partition以均衡组中全部行使者。在斲丧者群组中,全部斲丧者都在负载平衡模式下事变。换句话说,组中每个斲丧者都将看到每条动静。假如一个斲丧者分开,则将该分区分派给该组中的其他斲丧者,这个进程称为再均衡。假如组中的斲丧者多于分区,则一些斲丧者将闲置。假如组中的斲丧者少于分区,则某些斲丧者将行使来自多个分区的动静。
  • Lag:当斲丧者无法从分区中读打动静,斲丧者就会呈现Lag,暗示为分区顶部后的偏移数。从Lag状态规复所需的时刻取决于斲丧者每秒耗损动静的速率:
  1. time = messages / (consume rate per second - produce rate per second) 

第一部门:行使分区的最佳实践!

在分区部门,我们必要相识分区的数据速度,以确保拥有正确的保存空间。分区的数据速度是天生数据的速度。换句话说,它是均匀动静巨细乘以每秒动静数。数据速度抉择了给按时刻内所需的保存空间(以字节为单元)。假如不知道数据速度,则无法正确计较满意根基保存方针所需的空间巨细。数据速度指定了单个斲丧者必要支持的最低机能而担保不会呈现Lag。

除非有其他架构需求,不然在写入topic时行使随机分区。当举办大局限操纵时,分区之间的数据速度不均也许难以打点。必要留意以下三方面:

1、起首,“热门”(更高吞吐量)分区的斲丧者必需处理赏罚比斲丧者群组中其他斲丧者更多的动静,这也许导致处理赏罚和收集瓶颈。

2、其次,必需为具有最高数据速度的分区调解topic保存空间巨细,这也许会导致topic中其他分区的磁盘行使量增进。

3、最后,在分区率领方面实现最佳均衡比简朴地扩展到全部 brokers更伟大。“热门”分区的份量也许是统一topic中另一分区的10倍。

第二部门:行使斲丧者最佳实践!

假如斲丧者运行的Kafka版本低于0.10,请进级。在0.8.x版本中,斲丧者行使Apache ZooKeeper举办斲丧者群组和谐,而且很多已知错误也许导致恒久运行的均衡乃至是从头均衡算法的失败(我们称之为“从头均衡风暴”)。在从头均衡时代,将一个或多个分区分派给行使者群组中的每个行使者。在再均衡中,分区全部权在斲丧者中不绝变通,阻止任何斲丧者在斲丧方面取得现实盼望。

4、调解斲丧者套接字缓冲区以举办高速获取。在Kafka 0.10.x中,参数为isreceive.buffer.bytes,默以为64kB。在Kafka 0.8.x中,参数是socket.receive.buffer.bytes,默以为100kB。对付高吞吐量情形,这两个默认值都太小,出格是假如brocker和斲丧者之间的收集带宽耽误大于局域网(LAN)。对付耽误为1毫秒或更长的高带宽收集(10 Gbps或更高),请思量将套接字缓冲区配置为8或16 MB。假如内存不敷,请思量1 MB,也可以行使值-1,这样底层操纵体系可以按照收集前提调解缓冲区巨细。可是,对付必要启动“热门”斲丧者的体系而言,自动调解的速率也许或较量慢。

5、计划高吞吐量斲丧者,以便在有担保的环境下实验背压,最好只耗损可以有用处理赏罚的对象,而不是耗损太多,以至于进程遏制,退出斲丧者群组。 斲丧者应该行使牢靠巨细的缓冲区(拜见Disruptor模式),假如在Java假造机(JVM)中运行,最好是在堆外行使。牢靠巨细的缓冲区将阻止斲丧者将大量数据拖到堆上,JVM耗费全部时刻来执行垃圾网络而不是做你想让它处理赏罚的事变——处理赏罚动静。

(编辑:湖南网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读