1.多播消息
不同的消费组订阅同一个topic,那么不同的消费组中只有一个消费者能收到消息。实际上也是多个消费者收到同一个消息。
2.查看消费组及详细信息情况
– describe --group testGroup
重点关注以下信息
- curren-offset 最后被消费的消息偏移量
- log-end-offset 消息总量 (最后一条消息的偏移量)
- lag: 积压了多少条消息 (未被消费)
二、主题和分区的概念
1.主题topic
主题topic在kafka中是一个逻辑概念,kafka通过topic将消息进行分类。不同的topic会被订阅的不同的topic消费者消费
2.分区partition
- 分区存储,可以解决统一存储文件过大的问题
- 提供了读写的吞吐量:读和写可以同时在多个分区中进行
2)创建多分区的主题
– replication-factor 1 --partitions 2 --topic test
3.kafka中消息日志文件中保持的内容
- 000000.log: 这个文件保存的就是消息
- _consumer_o ffsets-49:kafka内部自己创建了 _consumer-offset50个分区。这个主题用来存放消费者消费某个主题的偏移量。因为每个消费者都会自己维护着消费的主题的偏移量,也就是说每个消费者会把消费的主题的偏移量自主上报给kafka 中的默认主题。:consumer _offsets 。因此kafkfa为了提升这个主题的并发性,默认设置为50个分区。
- 至于提交到哪个分区:通过hash函数:hash(consumerGoupId)%_consumer_offsets主题的分区数
- 提交到该主题的内容是:key是consumerGroup+topic+分区号,value 就是当前offset的值。
- 文件中保存的消息,默认保存时间7天。
4.副本概念
副本是为了为主题中的分区创建多个备份,多个副本在kafka集群的多个broker中,会有一个副本作为leader其它是followe。
- Isr:可以同步和已同步的节点会被存到isr集合中,(如果isr中节点的性能比较差,会被踢出isr集合
- leader:kafka的写和读操作,都发生在leader上。leader负责把数据同步给follower,当leader挂了,经过主从选举,从多个follower 中选举产生新的leader。
- follower:接受leader同步的数据
集群中有多个broker,创建主题时可以指明主题有多个分区(把消息拆分到不同的分区中存储),可以为分区创建多个副本,不同的副本存放在不同的broker里
5.关于消费组消费者的细节
-
一个partition只能被一个消费组中的一个消费者消费,目的是保证消费的顺序星,但是多个消费者的总的消费顺序得不到保证,那(那么做到消费的总顺序性呢?
-
partition的数量决定了消费组中消费者的数量,建议同一个消费组中消费者数量不要超过partition数量,否者多出来的消费者消费不到消息(但是假如有宕机的可以及时补上 ,如果消费者挂了,那么会触发rebalance机制。