1. 常见的MQ
Kafka, ActiveMQ, RabbitMQ, RocketMQ
在大数据场景下,主要使用Kafka,在javaee中主要采用ActiveMQ, RabbitMQ, RocketMQ
2. MQ作用
(1)削峰
(2)解耦
(3)异步
3. 消息队列的模式
(1)点对点模式
(2)发布订阅模式
二. Kafka基础架构1. 在同一个消费者组中(每条消息只能被该组中的一个消费者消费),每个分区只能由一个固定消费者进行处理,否则后续很难维护;
2. 分区有leader和follower之分,读写只在leader副本上进行,follower副本(HA)只负责数据同步;
3. zk记录集群哪些几点上线了,记录副本的leader信息,leader选举。由于zk逐渐成为了kafka的瓶颈,去除zk是后续的方向
三. Kafka开发入门 1. 启动配置(1)broker.id:集群中每个节点的唯一编号,不能重复
(2)log.dir:日志存储目录
(3)zookeeper.connect:zk连接信息,而且建议创建指定目录存放,否则kafka信息会打散到各个地方
2. 命令行(1)topic:
1)create: 1个分区,3个副本
bin/kafka-topics.sh --bootstrap-server server01:8081 --topic demo --create --partitions 1 --replication-factor 3
2)list:
bin/kafka-topics.sh --bootstrap-server server01:8081 --list
3)describe:
bin/kafka-topics.sh --bootstrap-server server01:8081 --describe
4)alter: 将分区数改成3,分区数只能增加,因此如果减少的话,合并后的分区无法确定消费者的offset。副本数无法通过命令行进行修改
bin/kafka-topics.sh --bootstrap-server server01:8081 --alter --partition 3
(2)producer:
bin/kafka-console-producer.sh --bootstrap-server server01:8081 --topic demo
(3)consumer:
bin/kafka-console-consumer.sh --bootstrap-server server01:8081 --topic demo --from-beginning3. Kafka生产者 3.1 原理
涉及两个线程:main线程和sender线程,main线程中创建了一个双端队列RecordAccumulator,main线程将消息发送给RecordAccumulator,RecordAccumulator中的消息达到指定大小或者等待指定时长后,通过sender线程从RecordAccumulator中将消息取出来发送到Kafka broker。
发送后,默认可以最多有5个批次的数据不进行应答,超过后不再向kafka发送数据。



