消息队列MQ

kafka学习(三)kafka基础理论

本文主要是介绍kafka学习(三)kafka基础理论,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

一、消费模式的选择

  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

  参数解析如下:

  • current-offset:当前消费组的已消费偏移量
  • log-end-offset:主题对应分区消息的结束偏移量
  • lag:当前消费组未消费的消息数

三、Topic【主题】和Log【消息数据日志】

  可以理解Topic是一个类别的名称,同类消息发送到同一个Topic下面。对于每一个Topic,下面可以有多个分区(Partition)日志文件:

Partition【分区】

  定义:一个有序的消息序列。

  作用:分片储存数据。不同的partition可以位于不同的机器上,方便数据横向扩展,提高吞吐量和并行度

  PS:分区对于组内消费者是单播的,对于不同组可以实现多播

  PS:当发消息时不指定分区,kafka选分区的原理:对Key进行hash运算得到的散列值再对分区进行取模运算

Offset【偏移量】

  定义:每个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。】

四、查看Topic信息

  当我们要了解kafka中Topic的分区、副本、或者是broker存活情况时,就需要用到如下命令去查看了:

##查看zookeeper【localhost:2181】下的,topic为'zhTest'的信息
##PS:因为topic的元数据是保存在ZK上的,所以查看信息就去ZK上面去查
kafka-topics.bat --describe --zookeeper localhost:2181 --topic zhTest 

  以下是输出内容的解释,第一行是所有分区的概要信息之后的每一行表示每一个partition的信息

  • Leader:节点负责给定partition的所有读写请求。【PS:图中的0表示的是leader节点为broker.id为0的机器
  • Replicas:表示某个partition在哪几个broker上存在备份。不管这个节点是不是"leader",甚至这个节点挂了,也会列出。
  • Isr:是replicas的一个子集,它只列出当前还存活着的,并且已同步备份了该partition的节点
这篇关于kafka学习(三)kafka基础理论的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!