kafka常见的消费模式有两种:
PS:记录消费偏移量是以组为单位进行的,增删消费者不影响。【会在下面进行说明】
定义:一条消息只能被某一个消费者消费的模式,类似队列的模式。
实现方式:让所有消费者在同一个消费组里即可。
定义:一条消息能被多个消费者消费的模式,类似发布订阅模式。
实现方式:让消费者属于不同的消费组即可。
消费偏移量:指的是哪些消息已经被消费了,做一个记录。
##1、创建一个消费者组,监听'zhTest'这一Topic kafka-console-consumer.bat --bootstrap-server localhost:9092 --consumer-property group.id=zhTestGroup1 --topic zhTest
##2、查看消费者组列表 kafka-consumer-groups.bat --bootstrap-server localhost:9092 --list
##3、查看消费者组'zhTestGroup1'的消费偏移量 kafka-consumer-groups.bat --bootstrap-server localhost:9092 --describe --group zhTestGroup1
参数解析如下:
可以理解Topic是一个类别的名称,同类消息发送到同一个Topic下面。对于每一个Topic,下面可以有多个分区(Partition)日志文件:
定义:一个有序的消息序列。
作用:分片储存数据。不同的partition可以位于不同的机器上,方便数据横向扩展,提高吞吐量和并行度。
PS:分区对于组内消费者是单播的,对于不同组可以实现多播。
PS:当发消息时不指定分区,kafka选分区的原理:对Key进行hash运算得到的散列值再对分区进行取模运算。
定义:每个partition中消息的唯一编号。
作用:用来唯一标示某个分区中的消息。
PS:一个partition中的message的offset都是唯一的,但是不同的partition中的message的offset可能是相同的。
PS:kafka一般不会删除消息,不管这些消息有没有被消费。只会根据配置的日志保留时间(log.retention.hours)来决定消息多久被删除,默认保留7天的日志消息。
PS:kafka的性能与保留的消息数据量大小没有关系,因此保存大量的数据消息日志信息不会有什么影响。
PS:每个consumer是基于自己在commit log【如数据目录下的00000000000000000000.log文件】中的消费进度(offset)来进行工作的。在kafka中,消费offset由consumer自己来维护。【这意味kafka中的consumer对集群的影响是非常小的,添加一个或者减少一个consumer,对于集群或者其他consumer 来说,都是没有影响的,因为每个consumer维护各自的消费offset。】
当我们要了解kafka中Topic的分区、副本、或者是broker存活情况时,就需要用到如下命令去查看了:
##查看zookeeper【localhost:2181】下的,topic为'zhTest'的信息 ##PS:因为topic的元数据是保存在ZK上的,所以查看信息就去ZK上面去查 kafka-topics.bat --describe --zookeeper localhost:2181 --topic zhTest
以下是输出内容的解释,第一行是所有分区的概要信息,之后的每一行表示每一个partition的信息。