Kafka介绍

来自姬鸿昌的知识库
跳到导航 跳到搜索

Kafka 是最初由领英(Linkedin)公司开发,是一个分布式、支持分区的(partition)、多副本的(replica),基于 ZooKeeper 协调的分布式消息系统,它的最大的特性就是可以实时的处理大量数据以满足各种需求场景:

比如基于 hadoop 的批处理系统、低延迟的实时系统、Storm/Spark流式处理引擎,web/nginx日志、访问日志,消息服务等等,用 scala 语言编写,LinkedIn 于2010年贡献给了 Apache 基金会并成为顶级开源项目。

Kafka 的使用场景

日志收集:一个公司可以用 Kafka 收集各种服务的 log,通过 Kafka 以统一接囗服务的方式开放给各种 consumer,例如 hadoop、Hbase、Solr等。

消息系统:解耦和生产者和消费者、缓存消息等。

用户活动跟踪:Kafka 经常被用来记录 Web 用户或者 app 用户的各种活动,如浏览网页、搜索、点击等活动,这些活动信息被各个服务器发布到 Kafka 的 topic 中,然后订阅者通过订阅这些 topic 来做实时的监控分析,或者装载到hadoop、数据仓库中做离线分析和挖掘。

运营指标:Kafka 也经常用来记录运营监控数据。包括收集各种分布式应用的数据,生产各种操作的集中反馈,比如报警和报告。

Kafka基本概念

Kafka 是一个分布式的,分区的消息(官方称之为commit log)服务。

它提供一个消息系统应该具备的功能,但是确有着独特的设计。

可以这样来说,Kafka 借鉴了 JMS 规范的思想,但是确并没有完全遵循 JMS 规范

首先,让我们来看一下基础的消息(Message)相关术语:

相关术语
名称 解释
Broker 消息中间件处理节点,一个 Kafka 节点就是一个 broker,一个或者多个Broker可以组成一个 Kafka 集群
Topic Kafka 根据 topic 对消息进行归类,发布到 Kafka 集群的每条消息都需要指定一个 topic
producer 消息生产者,向 Broker 发送消息的客户端
Consumer 消息消费者,从 Broker 读取消息的客户端
ConsumerGroup 每个 Consumer 属于一个特定的 ConsumerGroup,一条消息可以被多个不同的 ConsumerGroup 消费,但是一

TConsumerGroup 中只能有一个 Consumer 能够消费该消息

Partition 物理上的概念,一个 topic 可以分为多个 partition ,每个 partition 内部消息是有序的