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 内部消息是有序的 |