Kafka安装、使用和概念解释

Kafka是一个高性能的分布式消息队列系统,它的诀窍在于充分利用了“顺序读写磁盘性能大于随机读写内存”的事实。The Pathologies of Big Data

一、安装

http://kafka.apache.org/downloads页面下载.tar.gz格式的安装包。并解压缩这个文件:

wget http://apache.fayea.com/kafka/0.10.2.0/kafka_2.10-0.10.2.0.tgz
tar zxvf kafka_2.10-0.10.2.0.tgz

二、使用

启动

首先保证有一个zookeeper已经启动。kafka自带一个(单节点)zookeeper,用下面的命令启动:

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

如果提示有端口冲突(缺省是2181),检查是否已经启动过zookeeper。

现在就可以用下面的命令启动kafka了:

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

操作Topics

创建一个topic试试:

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

查看已有的topic列表

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

发送消息

从控制台发送消息到指定topic:

bin/kafka-console-producer.sh --broker-list localhost:9092 --topic test

其中broker-list参数表示向哪些kafka服务器发送数据,可以是多个ip:port列表,kafka服务缺省端口是9092。

kafka将收到的消息以log文件的形式保存在磁盘上,缺省目录在/tmp/kafka-logs/<topic>,是一个二进制文件(00000000000000000000.log)以及两个索引文件(00000000000000000000.index和00000000000000000000.timeindex)。消息内容一般会保存若干天,天数可配置,即使被消费也不会删除。

每条消息包含一个key和一个value,从0.10.0.0版开始还包含一个timestamp。key的作用是对消息分区以便并行处理,若不提供key,kafka会使用缺省的方法分区尽量做到负载均衡;value就是消息体了。

接收消息

从控制台接收指定topic的消息:

bin/kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic test --from-beginning

启动后,在前面启动producer的控制台里输入一行文字并回车,该消息就会自动显示在consumer所在控制台。

三、主要概念

控制器(Controller)

Kafka集群中的其中一个Broker会被选举为Controller,主要负责Partition管理和副本状态管理,也会执行类似于重分配Partition之类的管理任务。如果当前的Controller失败,会从其他正常的Broker中重新选举Controller。

分区(Partition)

Partition的主要目的是提高吞吐率,一个topic被分区存储在不同broker上,写入/读取请求可以分散到不同物理机器上进行,无疑提高了写入/读取效率。

缺省情况下,kafka使用取余数的方式确定一条消息所在的partition,这样可以保证每个partition的消息数量均衡。有些情况下用户需要自己为每条消息指定所在partition,可以通过定制Partitioner接口实现。

副本(Replica)

Replica的作用是提高可用性。一个partition可以有多个replica,保存在不同的broker上,其中只有一个是leader而其他都是follower。当leader失效时,controller负责将leader角色转移到其他可用replica上,通常这个操作只需要几毫秒。

参考链接:

Kafka Quickstart

跟我学Kafka之Controller控制器详解

Kafka学习笔记(二):Partition分发策略

how-to-choose-the-number-of-topicspartitions-in-a-kafka-cluster

Benchmarking Apache Kafka: 2 Million Writes Per Second (On Three Cheap Machines)