Kafka 入门教程:基础概念、快速启动

Posted by 陈树义 on 2019-01-08

Kafka 是一个分布式流平台,简单地说它是一个消息队列。

你可以在 Kafka 官网了解更多关于 Kafka 的信息:Apache Kafka

基础概念

在我们启动一个简单的 Kafka 项目之前,了解一下 Kafka 的一些专业术语对你会很有帮助:

  • 什么是 Topic ?

Topic 是 Kafka 中的一个专业名词,它在英文中是主题的意思。Kafka 使用它来区分不同类型的消息,例如订单消息属于 Order 这个 Topic,而短信消息属于 Message 这个 Topic。

  • 什么是 Partition?

Partition 是 Kafka 中的一个专业名词,它在英文中是分区的意思。一般来说,一个 Topic 会有多个 Partition,也即是说一个主题会有多个分区。在其他类型的消息队列中(如RocketMQ),它们将 Partition 称之为 Queue(队列),但表达的是同一个意思。

所以在 Kafka 框架结构里,一个 Topic 可以有多个 Partition,但每个 Partition 存储的是同样类型的数据。

  • 什么是 Broker ?

其实 Broker 说的就是 Kafka Server 的意思,这两个名词表达的是同样的意思。

  • 什么是 Producer?

Producer 是生产者的意思,在消息队列系统中表示往消息队列中丢入消息的一方。

  • 什么是 Consumer?

Consumer 是消费者的意思,在消息队列系统中表示从消息队列中取出消息的一方。

  • 什么是 Zookeeper?

Zookeeper 是 Kafka 架构中用来进行集群管理的一个开源框架。

下面的架构图表示了上面说到几个概念间的关系。

image.png

image.png

快速启动

使用 Kafka 框架非常简单,只需要下面几步即可完成一个简单的 Kafka 项目的部署:

  • 下载 Kafka 项目包
  • 启动 Zookeeper 服务器
  • 启动 Kafka 服务器
  • 创建 Topic
  • 发送/接收消息

下载Kafka项目包

首先到 Kafka 官网下载最新的开源包,地址是:Downloads - Apache Kafka。下载完成后直接解压:

> tar -xzf kafka_2.11-1.0.0.tgz
> cd kafka_2.11-1.0.0

启动Zookeeper服务器

Kafka 项目包提供了一个简单的 Zookeeper 服务器,如果你没有可用的 Zookeeper 服务器,可以先使用这个自带的 Zookeeper 服务器。

> bin/zookeeper-server-start.sh config/zookeeper.properties
[2013-04-22 15:01:37,495] INFO Reading configuration from: config/zookeeper.properties (org.apache.zookeeper.server.quorum.QuorumPeerConfig)
...

启动Kafka服务器

执行下面的命令,启动Kafka服务器

> bin/kafka-server-start.sh config/server.properties
[2013-04-22 15:01:47,028] INFO Verifying properties (kafka.utils.VerifiableProperties)
[2013-04-22 15:01:47,051] INFO Property socket.send.buffer.bytes is overridden to 1048576 (kafka.utils.VerifiableProperties)...

创建Topic

接下来创建一个名为 test 的 Topic

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

下面使用下面的命令检查一下是否创建成功:

> bin/kafka-topics.sh --list --zookeeper localhost:2181
test

发送/接收消息

到这里所有需要启动的服务器都启动完毕,下面我们使用 Kafka 自带的生产者、消费者客户端测试一下。

首先启动生产者客户端,并发送两条指定消息:

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

接着启动消费者客户端:

> bin/kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic test --from-beginning
This is a message
This is another message

当我们启动消费者客户端后,控制台立刻就会接收到刚刚生产者发送的消息。此时,如果你继续在生产者客户端发送消息,消费者客户端便会立刻收到消息。

总结

使用 Kafka 框架其实比较简单,只需要启动 Zookeeper 服务器和 Kafka 服务器即可。当这两个对应的服务启动完毕后,我们就可以作为生产者往 Kafka 中写入消息,也可以使用消费者从 Kafka 中读取消息。

上面讲到的只是如何快速地把 Kafka 框架用起来,让初学者有个感性的认识。如果你想深入了解 Kafka 到底是如何运作的,一条消息是如何从生产者到 Kafka Server,又是如何从 Kafka Server 到消费者,可以阅读:Kafka 入门教程:Kafka 消息是如何流转的? - 陈树义的博客