首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Kafka之安装部署

【导读:数据是二十一世纪的石油,蕴含巨大价值,这是·情报通·大数据技术系列第[60]篇文章,欢迎阅读和收藏】

1 Kafka 基本概念

在大数据中,使用了大量的数据。关于数据,我们有两个主要挑战。第一个挑战是如何收集大量的数据,第二个挑战是分析收集的数据。为了克服这些挑战,您必须需要一个消息系统。

Kafka 专为分布式高吞吐量系统而设计。Kafka 往往工作得很好,作为一个更传统的消息代理的替代品。与其他消息传递系统相比, Kafka 具有更好的吞吐量,内置分区,复制和固有的容错能力,这使得它非常适合大规模消息处理应用程序。

1.1 什么是消息系统

消息系统负责将数据从一个应用程序传输到另一个应用程序,因此应用程序可以专注于数据,但不担心如何共享它。分布式消息传递基于可靠消息队列的概念。消息在客户端应用程序和消息传递系统之间异步排队。有两种类型的消息模式可用 - 一种是点对点,另一种是发布 - 订阅 (pub-sub) 消息系统。大多数消息模式遵循 pub-sub 。

1、 点对点消息系统

在点对点系统中,消息被保留在队列中。一个或多个消费者可以消耗队列中的消息,但是特定消息只能由最多一个消费者消费。一旦消费者读取队列中的消息,它就从该队列中消失。该系统的典型示例是订单处理系统,其中每个订单将由一个订单处理器处理,但多个订单处理器也可以同时工作。下图描述了结构。

2、 发布 - 订阅消息系统

在发布 - 订阅系统中,消息被保留在主题中。与点对点系统不同,消费者可以订阅一个或多个主题并使用该主题中的所有消息。在发布 - 订阅系统中,消息生产者称为发布者,消息使用者称为订阅者。一个现实生活的例子是 Dish 电视,它发布不同的渠道,如运动,电影,音乐等,任何人都可以订阅自己的频道集,并获得他们订阅的频道时可用。

1.2 什么是 Kafka

Apache Kafka 是一个分布式发布 - 订阅消息系统和一个强大的队列,可以处理大量的数据,并使您能够将消息从一个端点传递到另一个端点。Kafka 适合离线和在线消息消费。Kafka 消息保留在磁盘上,并在群集内复制以防止数据丢失。Kafka 构建在 ZooKeeper 同步服务之上。它与 Apache Storm 和 Spark 非常好地集成,用于实时流式数据分析。

1.3 Kafka 优点

Kafka 有以下几个优点:

Ø可靠性- Kafka 是分布式,分区,复制和容错的 。

Ø可扩展性- Kafka 消息传递系统轻松缩放,无需停机 。

Ø耐用性- Kafka 使用分布式提交日志,这意味着消息会尽可能快地保留在磁盘上,因此它是持久的 。

Ø性能- Kafka 对于发布和订阅消息都具有高吞吐量。即使存储了 许多 TB 的消息,它也保持稳定的性能 。

1.4 Kafka 集群架构

如下图显示 Kafka 的集群架构,相关概览说明参考下一章节 1.5 Kafka 专用术语。

1.5 Kafka 专用术语

在深入了解 Kafka 之前,您必须了解主题,经纪人,生产者和消费者等主要术语。下图说明了主要术语,表格详细描述了图表组件。

在上图中,主题配置为三个分区。分区 1 具有两个偏移因子 0 和 1. 分区 2 具有四个偏移因子 0,1,2 和 3. 分区 3 具有一个偏移因子 0. 副本的 id 与承载它的服务器的 id 相同。

假设,如果主题的复制因子设置为 3 ,那么 Kafka 将创建每个分区的 3 个相同的副本,并将它们放在集群中以使其可用于其所有操作。为了平衡集群中的负载,每个代理都存储一个或多个这些分区。多个生产者和消费者可以同时发布和检索消息。

组件和说明

1Topics (主题)

属于特定类别的消息流称为主题。数据存储在主题中。

主题被拆分成分区。对于每个主题, Kafka 保存一个分区的数据。每个这样的分区包含不可变有序序列的消息。分区被实现为具有相等大小的一组分段文件。

2Partition (分区)

主题可能有许多分区,因此它可以处理任意数量的数据。

3Partition offset (分区偏移)

每个分区消息具有称为 offset 的唯一序列标识。

4Replicas of partition (分区备份)

副本只是一个分区的备份。副本从不读取或写入数据。它们用于防止数据丢失。

5Brokers (经纪人)

代理是负责维护发布数据的简单系统。每个代理中的每个主题可以具有零个或多个分区。假设,如果在一个主题和 N 个代理中有 N 个分区,每个代理将有一个分区。

假设在一个主题中有 N 个分区并且多于 N 个代理 (n + m) ,则第一个 N 代理将具有一个分区,并且下一个 M 代理将不具有用于该特定主题的任何分区。

假设在一个主题中有 N 个分区并且小于 N 个代理 (n-m) ,每个代理将在它们之间具有一个或多个分区共享。由于代理之间的负载分布不相等,不推荐使用此方案。

6Kafka Cluster ( Kafka 集群)

Kafka 有多个代理被称为 Kafka 集群。可以扩展 Kafka 集群,无需停机。这些集群用于管理消息数据的持久性和复制。

7Producers (生产者)

生产者是发送给一个或多个 Kafka 主题的消息的发布者。生产者向 Kafka 经纪人发送数据。每当生产者将消息发布给代理时,代理只需将消息附加到最后一个段文件。实际上,该消息将被附加到分区。生产者还可以向他们选择的分区发送消息。

8Consumers (消费者)Consumers 从经纪人处读取数据。消费者订阅一个或多个主题,并通过从代理中提取数据来使用已发布的消息。

9Leader (领导者)

Leader 是负责给定分区的所有读取和写入的节点。每个分区都有一个服务器充当 Leader。

10Follower (追随者)

跟随领导者指令的节点被称为 Follower 。如果领导失败,一个追随者将自动成为新的领导者。跟随者作为正常消费者,拉取消息并更新其自己的数据存储。

2 Kafka 安装部署

Kafka 部署方式有三种:单机模式、单机多 broker 集群模式、多服务器集群模式

Ø 单机模式:Kafka 只运行在一台服务器上,适合测试环境;

Ø 单机多 broker 集群:即 在单机上运行多个 broker 实例来实现集群;

Ø 多服务器集群模式:Kafka 运行于一个多计算机集群上,适合生产环境 。

2.1 安装准备

1、 操作系统

Kafka 是基于 Java 开发的,因此可以运行在所有的操作系统上,只要有 Java 运行环境即可。

2、 硬件考虑因素

选择硬件是技术,但更是艺术。Kafka 本身不要求硬件,但是如果追求极致的性能,那么有几个因素需要考虑:磁盘吞吐及容量、内存、 CPU 、网络带宽等等。在实际情况中,我们需要考虑哪部分是瓶颈,然后根据预算重点优化。

磁盘吞吐

这个指标直接影响到生产者写入消息的性能。生产消息时,消息需要至少在一个 broker 上持久化,这样消费者才能读取。磁盘写入越快,写入延迟越小。

对于磁盘,一般会从传统磁盘与固态硬盘( solid-state disk )中选择。固态硬盘性能最好,而传统磁盘则更加便宜、容量更大。如果使用传统磁盘,我们可以对一个 broker 挂载多个磁盘,或者对于磁盘使用 RAID 来进行加速。

磁盘容量

磁盘容量需要根据保留的消息量得出。如果一个 broker 期望每天可写入 1TB 消息,而消息持久化策略为 7 天,那么 1 个 broker 需要至少 7TB 的磁盘容量。另外,最好考虑 10% 的额外容量来存储其他文件或者留点 buffer 。

当评估 Kafka 集群大小以及判断何时需要扩容时,磁盘容量是一个重要的参考因素。当评估 Kafka 集群容量或者考虑扩容时,磁盘容量是一个重要的参考因素。对于一个 Kafka 集群,我们可以设置一个主题多个分区,这样当一个 broker 磁盘不足时,我们可以通过增加 broker 并分配分区来解决问题。另外,磁盘容量也受集群的冗余( replication )策略影响。

内存

通常来说,消费者消费速度与生产者生产速度相当,也就是说消费者从分区末尾读取。在这种情况下,如果消费者可以从系统的页缓存( page cache )读取而不是磁盘,那么消费性能可以大大提升。因此,内存越大,能够用来做页缓存( page cache )的容量也就越多,消费者的性能越好。

Kafka 本身不需要配置太多的 JVM 内存,一般 5GB 的堆就足够了。另外,不建议 Kafka 与其他应用同时部署,因为其他应用会分享系统的页缓存而导致 Kafka 消费性能下降。

网络带宽

当评估集群容量时,网络带宽也是一个重要的参考因素,网络带宽评估会稍微复杂点。首先,网络带宽分为 inbound 带宽与 outbound 带宽,如果一个生产者以 1MB/s 速度写入,但可能有多个消费者,那么 outbound 带宽可能是 inbound 的数倍。另外,集群的复制和镜像也会导致 outbound 带宽上升。网络带宽需要慎重考虑,否则可能会导致集群的复制落后,从而导致集群状态不稳定。

CPU

相对于磁盘与内存来说, CPU 不是一个重要的考虑因素。在消息压缩的场景下, Kafka broker 需要对于批量消息进行解压缩,然后验证校验和( checksum )以及赋予消息位移( offset ),最后再压缩消息写入磁盘。这是 CPU 占用最多的地方。再提醒下,在选择硬件时, CPU 不是一个主要的考虑因素。

3、 Zookeeper

在安装 kafka 之前,还需要确保 zookeeper 服务已经正常运行 。

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20200215A04HRW00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券