消息中间件:生产者和消费者
正常情况:生产速度小于等于消费速度
其他情况:
- 消费者故障,生产的数据丢失
- 生产过快,消费者来不及消费,生产的数据丢失
解决方法:拿个容器,将生产者生产的数据放到容器中,消费者消费的时候去取(即缓存)
Kafka就充当容器的功能,因此经常与flume配合使用。
有时候容器很容易满,就多准备几个容器,即Kafka的扩容。
Kafka架构
- producer:生产者
- consumer:消费者
- broker:容器
- topic:主题,给数据打标签,topic a给消费者a,topic b属于消费者b
一些配置:
Kafka/config/server.properties
broker.id=0 # 容器编号,唯一
listerners=PLAINTEXT://:9092 # 默认监听端口
host.name=localhost # 当前机器
log.dirs=/tmp/kafka-logs # 默认存储Kafka日志文件,注意:此目录每次重启会清空,建议重新指定目录
zookeeper.connect=localhost:2181 # zookeeper的地址,与zookeeper/conf/zoo.cfg中的端口配置一致
启动Kafka
kafka-server-start.sh <配置文件及路径>
创建topic:zk
kafka-topics.sh --create --zookeeper <zookeeper地址> --replication-factor <副本系数> --partitions <分区> --topic <topic名称>
查看topic命令
kafka-topics.sh --list --zookeeper <zookeeper地址>
生产消息:broker
kafka-console-producer.sh --broker-list localhost:<监听端口> --topic <topic名称>
消费消息:zk
kafka-console-consumer.sh --zookeeper localhost:<监听端口> --topic <topic名称> --from-beginning
注:--from-beginning # 从头开始消费 topic的端口是zookeeper监听端口,生产者的端口是kafka配置的监听端口,消费者是zookeeper配置的监听端口 理解为zookeeper是管理Kafka中的各部分组件,生产者生产的数据放在broker中,同时会微数据添加topic标签,topic标签关系由zk管理,消费者从告诉zk要消费数据的标签。