Kafka介绍
在流式计算中,Kafka一般用来缓存数据,Storm通过消费Kafka的数据进行计算。
KAFKA + STORM +REDIS
1、Apache Kafka是一个开源消息系统,用Scala写成。
2、Kafka是一个分布式消息队列:生产者、消费者的功能。它提供了类似于JMS的特性,但是在设计实现上完全不同,此外它并不是JMS规范的实现。
3、Kafka对消息保存时根据Topic进行归类,发送消息者称为Producer,消息接收者成为Consumer,此外Kafka集群由多个Kafka实例组成,每个实例(server)称为broker。
4、无论是kafka集群,还是Producer和Consumer都依赖于zookeeper集群保存一些meta信息,来保证系统可用性。
Kafka 是一个基于分布式的消息发布-订阅系统,它被设计成快速、可扩展的、持久的。与其他消息发布-订阅系统类似,Kafka 在主题当中保存消息的信息。
生产者向主题写入数据,消费者从主题读取数据。由于 Kafka 的特性是支持分布式,同时也是基于分布式的,所以主题也是可以在多个节点上被分区和覆盖的。
Kafka 的生产者负责在消息队列中对生产出来的消息保证一定时间的占有,消费者负责追踪每一个主题 (可以理解为一个日志通道) 的消息并及时获取它们。
Kafka核心组件
Topic :消息根据Topic进行归类
Producer:发送消息者,向broker发布消息
Consumer:消息消费者,从Kafka broker中读取消息的客户端
broker:每个kafka实例(server)。Kafka集群中包含一个或多个服务器,这个服务器称为broker
Zookeeper:依赖集群保存meta信息。Zookeeper管理集群配置,选举leader,以及在Consumer Group发生变化时进行rebalance
Partition:物理上的概念,每个Topic包含一个或多个Partition
Consumer Group:每个Consumer属于一个特定的Consumer Group(可为每个Consumer指定group name,若不指定group name则属于默认的group)。
Kafka拓扑结构:
Kafka集群部署(前提:先部署好zookeeper集群)
1、下载安装包
http://kafka.apache.org/
2、上传并解压安装包
tar -zxvf /root/kafka_2.11-0.8.2.2.tgz -C /export/servers/
cd /export/servers/
ln -s kafka_2.11-0.8.2.2 kafka
3、修改配置文件
vi /export/servers/kafka/config/server.properties
配置一下内容:
4、分发安装包
scp -r /export/servers/kafka_2.11-0.8.2.2 storm2:/export/servers
scp -r /export/servers/kafka_2.11-0.8.2.2 storm3:/export/servers
然后分别在各机器上创建软连
cd /export/servers/
ln -s kafka_2.11-0.8.2.2 kafka
5、再次修改配置文件(重要)
依次修改各服务器上配置文件的broker.id,分别是0,1,2,不得重复!
6、启动集群(先启动zookeeper集群)
依次在每个节点上的/kafka/路径下启动Kafka:
bin/kafka-server-start.sh config/server.properties
Kafka常用操作命令
- 查看当前服务器中的所有topic
bin/kafka-topics.sh --list --zookeeper zk01:2181
- 创建topic
./kafka-topics.sh --create --zookeeper mini1:2181 --replication-factor 1 --partitions 3 --topic first
- 删除topic
sh bin/kafka-topics.sh --delete --zookeeper zk01:2181 --topic test
需要server.properties中设置delete.topic.enable=true否则只是标记删除或者直接重启。
- 通过shell命令发送消息
kafka-console-producer.sh --broker-list kafka01:9092 --topic itheima
- 通过shell消费消息
sh bin/kafka-console-consumer.sh --zookeeper zk01:2181 --from-beginning --topic test1
- 查看消费位置
sh kafka-run-class.sh kafka.tools.ConsumerOffsetChecker --zookeeper zk01:2181 --group testGroup
- 查看某个Topic的详情
sh kafka-topics.sh --topic test --describe --zookeeper zk01:2181