本文kafka版本2.x版本
kafka是一个分布式的消息队列,用于大数据实时处理领域
同步处理 >>> 填写注册信息----注册信息存入数据库----调用发送短信-----页面响应注册成功
异步处理 >>> 填写注册细腻----注册信息存入数据库----响应页面注册成功----发送短信写入消息队列-----发送短信
使用消息队列:
1.解耦,允许扩展和修复两边的处理过程
2.可恢复性,系统的部分组件失效时,不会影响到整个系统,处理消息进程挂了,恢复系统之后仍可以继续处理加入队列的消息
3.缓冲,有助于空值优化数据流经过系统的速度,解决生产消息和消费消息的处理速度不一致的情况
4.灵活性和峰值处理能力,面对突然多的流量可以顶住突发的访问压力,不会因为突发的超负荷请求完全崩溃
5.消息队列提供异步处理机制,允许用户把一个消息放入队列,可以不立即处理它,想放入多少消息就放入多少,然后需要的时候再去处理
消息队列的两种模式
点对点模式(一对一,消费者主动拉取数据,消息收到后消息清除):消息生产者消息发送到Queue中,然后消息消费者从高Queue中取出并且消费信息,消费之后queue不在存储此消息,可以支持有多个消费者,但对于一个消息只有一个消费者
发布/订阅模式(一对多,消费者消费数据后不会清除信息):消息生产者将消息发布到topic中,同时有多个消息消费者消费消息,发布到topic的消息会被所有订阅者消费
同一个分区的数据只能被同一个组里的消费者消费
安装
kafka命令行操作
查看当前服务器中的所有topic
bin/kafka-topics.sh --list --zookeeper master:2181
创建topic主题,用来分类,--topic 指定主题名 , --partitions指定分区数 --replication-factor 2指定副本,我有三台机器所以2个机器上分别有name-0和name-1,第三台上会有副本name-0和name-1
bin/kafka-topics.sh --create --zookeeper master:2181 --topic name --partitions 2 --replication-factor 2
删除topic主题,
bin/kafka-topics.sh --delete --zookeeper master:2181 --topic name
查看topic主题详细信息
bin/kafka-topics.sh --describe --topic name --zookeeper master:2181
控制台生产者
bin/kafka-console-producer.sh --topic name --broker-list master:9092
控制台消费者
bin/kafka-console-consumer.sh --topic name --zookeeper master:2181 (已过时)
bin/kafka-console-consumer.sh --topic name --zookeeper master:2181 --from-beginning //获取已被生产者发送存入队列的数据
bin/kafka-console-consumer.sh --topic name --bootstrap-server master:9092 // 存放再kafka本地