1.单播消息
如果多个消费者在同一个消费组,那么只有一个消费者可以收到订阅的topic中的消息
./kafka-console-consumer.sh --bootstrap-server bigdata1:9092 --topic test --from-beginning --consumer-property group.id=testgroup1
2.多播消息
不同的消费组订阅同一个topic,那么不同的消费组中只有一个消费者能收到消息。
./kafka-console-consumer.sh --bootstrap-server bigdata1:9092 --topic test --from-beginning --consumer-property group.id=testgroup1
./kafka-console-consumer.sh --bootstrap-server bigdata1:9092 --topic test --from-beginning --consumer-property group.id=testgroup2
3.主题 topic
kafka通过topic将消息进行分类,不同的topic会被订阅该topic的消费者消费
但是有个问题,如果说这个topic中的消息非常多,多到需要几个T来存,因为消息是保存在log日志文件中的,为了解决这个问题,kafka给出分区解决
4.分区 partition
通过partition将一个topic中的消息分区来存储
- 分区存储,可以统一解决存储文件过大的问题
- 提供了读写的吞吐量,读和写可以同时在多个分区中进行
创建多分区主题:
./kafka-topics.sh --zookeeper localhost:2181 --create --topic test --replication-factor 3 --partitions 2
kafka中消息日志文件中保存的内容:
- 0000.log:文件中保存的就是消息
- __consumer_offsets-49:kafka内部自己创建了__consumer_offsets主题 包含了50个分区,这个主题用来存放消息的偏移量,也就是说每个消费者会把消费的肢体的偏移量自主上报给kafka中的默认主题,至于提交到哪个分区,通过hash函数(默认为什么设置50个分区:因为可能会接收高并发的请求,可以通过 offsets.topic.num.partition修改)
5.副本
副本是对分区的备份,在集群中,不同的副本会被部署在不同的broker上
副本是为主题中的分区创建多个备份,多个备份在kafka集群的多个broker中,会有一个副本作为leader,其他follower
- leader:kafka的写和读的操作,都发生在leader上,leader负责把数据同步给follower,当leader挂了,经过主从选举,从多个follower中选举产生一个新的leader
- follower:接收leader同步的数据1.
- isr:可以同步和已同步的节点会被存入到isr的集合中,如果isr中的节点性能较差,会被踢出isr集合
集群中有多个broker,创建主题是可以指明主题有多个分区(把消息拆分到不同的分区中存储),可以为分区创建多个副本,不同的副本存放在不同的broker里。