一、kafka 是什么?
- 在实时计算中,Kafka 主要是用来缓存数据,storm 可以通过消费 kafka 中的数据进行实时计算。
- 一套开源的分布式的消息队列系统,由 scala 写成,支持 javaAPI。
- Kafka 读消息采用 topic 进行归类。
二、kafka 中有哪两种角色?
- 发送消息:Producer(生产者)
- 接收消息:Consumer(消费者)
三、为什么要使用消息队列?
- 可以解耦,拓展两边(生产者,消费者)的处理过程,为了避免高耦合出现的问题
- 可以拓展。
- 可恢复,生产者或者消费者宕机不会影响整个系统。
- 可以削峰,缓冲短时间高并发对系统带来的冲击。
- 顺序保障,FIFO。
- 异步通信,系统可以不必立即处理消息队列中的数据,缓解服务器端的压力。
四、Kafka 架构设计
- kafka 依赖 zookeeper,用 zk 保存元数据信息。
- 在企业实际应用中,zookeeper 集群单独部署(3,5,7台),避免因为访问元数据信息而产生的大量 IO 对系统性能的影响。
- 一个 topic 运行在多个服务器上的,topic 中的 分区运行在不同的服务器上。
- 为了保证高可用,每台服务器上的分区是有冗余的(在一台机器配置多个一模一样的)
五、kafka 安装部署
- 解压 tar -zxvf kafka_2.9.2-0.8.1.1.tgz -C ~/training/
- 修改配置文件 config/server.properties 内容如下:
数 | 参考参数值 |
broker.id | 0 |
port | 9092 |
log.dirs | /root/training/kafka_2.9.2-0.8.1.1/logs |
zookeeper.connect | bigdata001:2181,bigdata002:2182,bigdata003:2181 |
delete.topic.enable | true |
- 启动 zookeeper:
zkServer.sh start
- 启动 kafka:
bin/kafka-server-start.sh config/server.properties &
- 关闭 kafka:
bin/kafka-server-stop.sh
kafka 部署模式
- 单机单 broker:一台服务器只启动一个 kafka。
- 单机多 broker:一台服务器启动多个 kafka(多复制几份配置文件,多启动几个 kafka 进程就可以)。
config/server1.properties
config/server2.properties
config/server3.properties
- 多机多 broker:多台服务器,每台启动多个 kafka(真正的集群环境)。
六、基本命令
- 从 zookeeper 中查看当前所有的 topic 列表:
bin/kafka-topics.sh --zookeeper bigdata001:2181 --list
- 创建 topic:
bin/kafka-topics.sh --zookeeper bigdata001:2181 --create --replication-factor 1 --partitions 3 --topic mydemo
- 删除 topic:
bin/kafka-topics.sh --zookeeper bigdata001:2181 --delete --topic mydemo
注意:删除 topic “–delete” 这个选项,楼主试过三个版本的kafka,只有 kafka_2.11-2.0.0 这个版本的 kafka 才有。kafka_2.11-2.1.0 和 kafka_2.9.2-0.8.1.1 这两个版本根本没有 “–delete” 这个参数选项,大家在测试命令的时候不要选错版本。 - 发送消息:
bin/kafka-console-producer.sh --broker-list bigdata001:9092 --topic mydemo
- 接收消息:
kafka_2.9.2-0.8.1.1版本:bin/kafka-console-consumer.sh --zookeeper bigdata001:2181 --topic mydemo
kafka_2.11-2.1.0,kafka_2.11-2.0.0版本:bin/kafka-console-consumer.sh --bootstrap-server bigdata001:9092 --topic mydemo --from-beginning
- 查看 topic 的详细信息:
bin/kafka-topics.sh --zookeeper bigdata001:2181 --describe --topic mydemo