消息的发布(publish)称作producer,消息的订阅(subscribe)称作consumer,中间的存储阵列称作broker。
多个broker协同合作,producer、consumer和broker三者之间通过zookeeper来协调请求和转发。
producer产生和推送(push)数据到broker,consumer从broker拉取(pull)数据并进行处理。
broker端不维护数据的消费状态,提升了性能。
直接使用磁盘进行存储,线性读写,速度快:避免了数据在JVM内存和系统内存之间的复制,减少耗性能的创建对象和垃圾回收。
Kafka使用scala编写,可以运行在JVM上。
Producer(生产者):消息产生者,产生消息,将其发送到Broker;
Consumer(消费者):
使用数据的客户端,从Broker得到消息;
Broker(中间人,消息中转站):
即kafka的Server;集群(cluster)由一堆Broker组成
Zookeeper
管理连接信息,包括各个节点的IP,端口等;Producer和Consumer需要到Zookeeper请求Broker的信息,从而进行消息的收发;
一个新的Broker的启动也需要到Zookeeper注册; zookeeper也可以配集群。目的是防止某一台挂了。
producer和consumer通过zookeeper去发现topic,并且通过zookeeper来协调生产和消费的过程。
Topic
Topic,是kafka对消息分类的依据;一条消息,必须有一个与之对应的Topic;
比如现在又两个Topic,分别是Love和Hate,Producer向Love发送一个消息苹果,然后向Hate发送一个消息土豆;那么,订阅Love的Consumer就会收到消息苹果,订阅Hate的Consumer就会收到消息土豆;
每个Consumer可以同时订阅多个Topic,也即是说,同时订阅Love和Hate的Consumer可以同时收到苹果和土豆。
Message
Message就是我们所说的消息,是KAfKA操作的对象,消息是按照Topic存储的;
KAFKA中按照一定的期限保存着所有发布过的Message,不管这些Message是否被消费过。kafka默认存储7天。
kafka_2.10-0.8.2.1
- 2.10是scala的版本,kafka是用Scala开发的,scale的安装版本应该对应
- 0.8.2.1是kafka的版本
1、安装jdk和zookeeper,并启动
$ sbin/zkServer.sh start --启动
$ sbin/zkServer.sh status --查看状态,也可jps查看
2、安装scala
tar zxvf /opt/softwares/scala-2.10.4.tgz
$ su -
# vi /etc/profile
#SCALA_HOME
SCALA_HOME=/opt/modules/cdh/scala-2.10.4
export PATH=$PATH:$SCALA_HOME/bin
$ scala -version
3、安装kafka
$ tar zxvf /opt/softwares/kafka_2.10-0.8.2.1.tgz
4、修改配置文件
a)
server.properties:
# 消息中转站,每个broker id必需唯一
broker.id=0
port=9092
# 主机名,去掉注解
host.name=hadoop1
# kafka存储数据的目录,并非存放日志的目录,$ mkdir data
log.dirs=/opt/modules/cdh/kafka_2.10-0.8.2.1/data
# 指定zookeeper服务器
zookeeper.connect=hadoop1:2181,hadoop2:2181,hadoop3:2181
5、启动kafka
./kafka_2.10-0.8.2.1/bin/kafka-server-start.sh -daemon ./kafka_2.10-0.8.2.1/config/server.properties
1、创建一个topic
# 副本因子通常是奇数,不大于集群服务器台数
# 分区数不能大于集群服务器台数
./kafka_2.10-0.8.2.1/bin/kafka-topics.sh --create --zookeeper hadoop1:2181 --replication-factor 3 --partitions 2 --topic testTopic
# 查看topic list
./kafka_2.10-0.8.2.1/bin/kafka-topics.sh --describe --zookeeper hadoop1:2181
Topic:testTopic PartitionCount:2 ReplicationFactor:3 Configs:
Topic: testTopic Partition: 0 Leader: 1 Replicas: 1,2,3 Isr: 1,2,3
Topic: testTopic Partition: 1 Leader: 2 Replicas: 2,3,1 Isr: 2,3,1
2、启动生产者
./kafka_2.10-0.8.2.1/bin/kafka-console-producer.sh --broker-list hadoop1:9092 --topic testTopic
3、启动消费者,再开一个窗口
./kafka_2.10-0.8.2.1/bin/kafka-console-consumer.sh --zookeeper hadoop1:2181 --topic testTopic --from-beginning