Kafka是由Apache软件基金会开发的一个开源流处理平台,由Scala和Java编写。kafka 是一个高性能的消息队列,也是一个分布式流处理平台。
kafka中文网
kafka官网
1.kafka基础概念
Producer:Producer即生产者,消息的产生者,是消息的入口。
kafka cluster:
Broker:Broker是kafka实例,每个服务器上有一个或多个kafka的实例,姑且认为每个broker对应一台服务器。一个集群由多个broker组成,集群内的broker都有一个不重复的编号,如图中的broker-0、broker-1等……
Topic:消息的主题,可以理解为消息的分类,kafka的数据就保存在topic。在每个broker上都可以创建多个topic。
Partition:Topic的分区,每个topic可以有多个分区,分区的作用是做负载,提高kafka的吞吐量。同一个topic在不同的分区的数据是不重复的
,partition的表现形式就是一个一个的文件夹!
Replication:每一个分区都有多个副本
,副本的作用是做备胎。当主分区(Leader)故障的时候会选择一个备胎(Follower)上位,成为Leader。在kafka中默认副本的最大数量是10个,且副本的数量不能大于Broker的数量,follower和leader绝对是在不同的机器,同一机器对同一个分区也只可能存放一个副本(包括自己)。
Message:每一条发送的消息主体。
Consumer:消费者,即消息的消费方,是消息的出口。
Consumer Group:将多个消费组成一个消费者组。在kafka的设计中同一个分区的数据只能被同一消费者组中的某一个消费者消费
。Partition 的分配问题,即确定哪个 Partition 由哪个 Consumer 来消费。Kafka 有两种分配策略,一个是 RoundRobin,一个是 Range,默认为Range。
一个消费者组内也可以订阅多个topic
多个消费组可以订阅同一个topic
。
2个 Consumer Group A, B订阅了topicA。topicA,有4个partition(p0,p1,p2,p3)。Consumer Group A有2个Consumer:c0、c1,Consumer Group B有4个Consumer:c3,c4,c5,c6。经过分区分配后,consumer与partition的订阅关系如下:
(1)TopicA 的4个partition在Consumer Group A中的分配情况如下:
C1 订阅p0,p3
C2 订阅p1,p2
(2)TopicA 的4个partition在Consumer Group B中的分配情况如下:
C3 订阅p0
C4 订阅p3
C5 订阅p1
C6 订阅p2
Zookeeper:kafka集群依赖zookeeper来保存集群的的元信息,来保证系统的可用性。
2.安装Kafka
使用brew进行安装,非常方便。
brew install kafka
kafka的安装目录:/usr/local/Cellar/kafka
kafka的配置文件目录:/usr/local/etc/kafka
如果需要修改配置,可以进入对应目录,修改配置文件就好
3.小试牛刀
(3.1)启动zookeeper
ZooKeeper是一个分布式的,开放源码的分布式应用程序协调服务
,是Google的Chubby一个开源的实现,是Hadoop和Hbase的重要组件。它是一个为分布式应用提供一致性服务的软件,提供的功能包括:配置维护、域名服务、分布式同步、组服务等。
kafka是基于zookeeper的,启动kafka之前,需要先启动zookeeper
/usr/local/Cellar/kafka/2.1.0/bin/zookeeper-server-start /usr/local/etc/kafka/zookeeper.properties
查看启动是否成功
ps aux | grep zookeeper
启动kafka
/usr/local/Cellar/kafka/2.1.0/bin/kafka-server-start /usr/local/etc/kafka/server.properties
查看启动是否成功
ps aux | grep kafka
(3.2)创建一个topic
kafka-topics --create --zookeeper localhost:2181 --replication-factor 1 --partitions 1 --topic sunday
查看topic列表
kafka-topics --list --zookeeper localhost:2181
(3.3)创建一个生产者
新起一个终端,作为生产者,用于发送消息,每一行算一条消息,将消息发送到kafka服务器
kafka-console-producer --broker-list localhost:9092 --topic sunday
(3.4)创建一个消费者
新起一个终端作为消费者,接收消息
kafka-console-consumer --bootstrap-server localhost:9092 --topic sunday --from-beginning
(3.5)服务的关闭
服务关闭的顺序是先kafka,然后zookeeper
# 关闭kafka
/usr/local/Cellar/kafka/2.1.0/bin/kafka-server-stop
#关闭zookeeper
/usr/local/Cellar/kafka/2.1.0/bin/zookeeper-server-stop