HENNG

kafka 简介

作为 kafka 系列文章的第一篇,在这里我们根据 5H法 来介绍 kafka;这篇文章其实更像是官方文档的译文,毕竟官方文档的阐述才是最好的,但会加一些自己的补充说明;其次因为是开篇介绍,暂时不会太深入,只做简单说明。

WHAT - 什么是 kafka

kafka 是一个高吞吐的分布式消息系统。kafka最初是由 Linkedin 公司开发,后划入 Apache 名下并开源。据说当时负责开发的 leader 正在读 Franz Kafka 的书,所以给取了名字叫 kafka

基于 kafka,阐述几个关于消息系统的重要术语:

  • topic: 消息的载体
  • producer: 消息发送者
  • consumer: 消息订阅者
  • broker: 即 server,存放 topics
  • cluster: 一个或多个 broker 组成的集群

于是 kafka 的一个高度抽象的架构就出来了:

kafka

WHY - 为什么是 kafka

在 kafka 之前,已经有不少优秀的消息系统,例如 Rabbit MQ、 Active MQ,国内阿里的 MetaQ 等。那为什么 kafka 一下就火了呢?个人觉得 kafka 的火热离不开开源社区,尤其是 kafka 和其他开源项目(Storm、Spark、Hadoop、Flume等)的强强联合,构造了一个丰富强大的生态圈;当然 kafka 本身的优点也是原因之一,高吞吐、规模性、持久性、高可用等特性使其脱颖而出,这些在以后的文章中慢慢说明。

HOW - 如何使用 kafka

kafka 运行需要 zookeeper,所以需要先启动 zk:

(1)启动 zk

1
> bin/zookeeper-server-start.sh config/zookeeper.properties
>

(2)启动 kafka broker

1
> bin/kafka-server-start.sh config/server.properties
>

(3)创建一个 topic

1
> bin/kafka-topics.sh --create --zookeeper localhost:2181
 --replication-factor 1 --partitions 1 --topic test
>

(4)producer 发送消息

1
> bin/kafka-console-producer.sh --broker-list localhost:9092 --topic test 
> This is a message
> This is another message
>

(5)consumer 消费消息

1
> bin/kafka-console-consumer.sh --zookeeper localhost:2181 --topic test --from-beginning
> This is a message
> This is another message
>

以上为最简单的使用例子,其中涉及的参数以后会详细说明。

WHERE - 什么样的环境

磁盘

kafka 是高吞吐的消息系统,因此通常来说,磁盘是其一个瓶颈,对磁盘的转速要求还是比较高的,一般 7200 rpm 及以上。其次,是否做 RAID 取决于你的需求,做 RAID 的优点是会更稳定,这样更匹配 kafka 的数据备份容灾机制;缺点就是损失了不少磁盘容量空间。

系统

按照 kafka 官方的说法,kafka 在 Unix 系统上运行是最稳定的,在 Linux/Solaris 上也经过测试,运行良好(我在生产环境使用 kafka 的系统是 centos,目前还没有发现过因操作系统引起的问题)。而在 Windows 机器上,运行有一些问题。

WHEN - 常见应用场景

消息队列

这是 kafka 主要的应用场景,可以替代传统的消息队列。kafka 的高吞吐,对于大规模的消息处理系统来说也十分适合。

日志聚合

通常用于搜集大量的日志集中处理,我司日志系统就是使用的我们维护的 kafka。高吞吐量可以解决大量的日志数据的性能问题,良好的实时性提供了查看实时日志的特性等。

流式处理

通常用于 “转移/传输” 数据。例如,从一个 RSS 源爬取了原始数据,然后推送到 kafka 某个 topic,接着经过去重、分类等再推送到了另一个 topic,最后才传到用户手中。可以和 Storm 等配合使用。

  • [1] 欢迎交流探讨,指出不足;我也会不断完善这个系列的文章。
  • [2] 参考链接:Apache Kafka