KafKa入门

Posted on 周三 19 四月 2017 in [技术架构] • Tagged with [TechnologyArchitecture]Leave a comment

kafka背景

Kafka最初是由LinkedIn开发,并于2011年成为Apache的一个开源项目,随后在2012变为Apache的一个顶级项目。kafka是由Scala和Java语言编写的的。Kafka是一个基于发布-订阅,具有容错的消息系统。具有高性能,可扩展,分布式等特性。

kafka介绍

在大数据领域中,我们会使用了大量的数据。 关于大数据,我们有两个主要挑战。第一个挑战是如何收集大量的数据,第二个挑战是分析收集到的数据。为了克服这些挑战,你需要一个消息系统。Kafka的设计目标就是称为一个分布式,高吞吐量的消息系统。Kafka也可以作为一个传统的消息中间件的替代品。 与其他消息系统相比,Kafka具有更好的吞吐量,内置分区,复制和固有的容错能力,这使得它非常适合大规模消息处理应用程序。

什么是消息系统?

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

点对点消息系统

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

01

发布-订阅消息系统

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

kafka是什么?

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

优点

以下是Kafka的几个优点:

可靠性 - Kafka 是一个分布式,消息分区的,拥有消息复制和容错的系统。 扩展性 - Kafka消息系统可以实现在线扩展 可用性 - Kafka 使用 “分布式的commit log”,这也意味着消息会尽可能快的持久化到磁盘。 高性能 - Kafka 针对消息发送和消费都有很高的吞吐量。 即使保存了TB级别的数据性能也不会下降。

Kafka 非常快并保证零宕机和零消息丢失。

用例

kafka通常用于下面的使用场景:

  • 监控 Kafka通常用于监控数据的操作。 这涉及聚合来自分布式应用程序的统计信息,以产生集中化的操作数据。
  • 日志聚合方案 kafka可以用来收集跨组织的多个服务的日志,并将这些日志转为统一的格式供消费者使用。
  • 流式处理 流行的实时计算框架,如Storm和Spark流式读取topic中的数据进行处理,然后将处理的结果写入新的,用户或应用需要使用的topic中。Kafka强大的持久性功能在流式处理上下文中也是非常有用的。

need for Kafka

Kafka是一个统一的平台,用于处理所有实时数据Feed。 Kafka支持低延迟消息传递,并在出现机器故障时提供对容错的保证。它具有处理大量不同消费者的能力。 Kafka非常快,执行2百万w/s。 Kafka将所有数据保存到磁盘,这实质上意味着所有写入都会进入操作系统(RAM)的页面缓存。 这使得将数据从页面缓存传输到网络套接字非常有效。

Kafka基础概念

在深入了解Kafka之前,你应该先了解一些基本的术语。像topics,brokers,producers,consumers。下图说明了主要的术语并且表格对这些术语进行了详细的解释。 03
在上图中一个topic被配置为拥有3个分区,分区1包含两个偏移因子0和1。分区2包含4个偏移因子0, 1, 2 和 3。分区3包含1个偏移因子0。 分区副本的id和该副本所在的broker的id一致。

假设,如果一个topic配置的副本因子为3,则kafka会针对该topic的每个分区创建3个独立的副本并将这些副本尽量均匀分散到集群的每个节点上 …

Continue reading