kafka 生产/消费API、offset管理/原理、kafka命令

大数据组件使用 总文章

 

创建topic
kafka-topics --create --zookeeper node1:2181 --replication-factor 3 --partitions 3 --topic test

展示topic
kafka-topics --list --zookeeper node1:2181
 
描述topic
kafka-topics --describe --zookeeper node1:2181 --topic test

生产者:
kafka-console-producer --broker-list node1:9092 --topic test
 
修改topic的分区数
kafka-topics --zookeeper node1:2181 --alter --partitions 3 --topic test

消费者:
旧版:kafka-console-consumer --zookeeper node1:2181 --topic test --from-beginning

新版:新版中仍然使用旧版的消费者命令会报错:zookeeper is not a recognized option
        kafka-console-consumer --bootstrap-server node1:9092 --topic test --from-beginning
        指定消费者组:kafka-console-consumer --bootstrap-server node1:9092 --group testGroup --topic test --from-beginning

删除topic
kafka-topics --delete --zookeeper node1:2181 --topic test

查看消费位置
指定消费者组:
    kafka-consumer-groups --bootstrap-server node1:9092 --describe --group testGroup 
    kafka-consumer-groups --bootstrap-server node1:9092 --describe --group testGroup --all-topics



=============================================

创建topic
kafka-topics --create --zookeeper 10.0.0.181:2181 --replication-factor 3 --partitions 3 --topic test

展示topic
kafka-topics --list --zookeeper 10.0.0.181:2181

生产者:
kafka-console-producer --broker-list 10.0.0.181:9092 --topic test

消费者:
旧版:kafka-console-consumer --zookeeper 10.0.0.181:2181 --topic test --from-beginning
新版:kafka-console-consumer --bootstrap-server 10.0.0.181:9092 --topic test --from-beginning

删除topic
kafka-topics --delete --zookeeper 10.0.0.181:2181 --topic test

==============================================

创建topic:同时指定key,那么生产数据时必须同时输入key和value

创建一个向主题 kafka-action 发送消息的生产者,同时指定每条消息包含有key
kafka-console-producer --broker-list 10.0.0.181:9092 --topic test --property parse.key=true


由于以上命令没有指定消息key与消息载荷值value(payload)之间的分隔符,默认为制表符,如果希望修改分隔符,可通过key.separator指定。
kafka-console-producer --broker-list 10.0.0.181:9092 --topic test --property parse.key=true --property key.separator=' '

数据分发策略:
    如果生产者指定了partition,同时发送消息中有key,可以指定数据发往哪个partition,当ProducerRecord 的构造参数中有partition的时候,就可以发送到对应partition上,
    如new ProducerRecord<String, String>("topic主题名",partition,"key", "value")
    如果生产者没有指定partition,但是发送消息中有key,那么将根据key的hash值的方式发送数据到那个partition分区/分片中

==============================================
            

kafka 0.9 及以上 有了一个大版本变化,
主要有以下几个方面:
  1.kafka-client 不再区分高低api
  2.kafka 消费者偏移量信息 不再单纯的存储在 zookeeper 中, kafka 会自己维护自己的 消费情况。
    对于某些特殊的情况:如 kafka-console-consumer,目前在 0.10.0.1 还是会存储在 zookeeper 中。

我们先启动消费者,再启动生产者, 再通过 bin/kafka-consumer-groups.sh 进行消费偏移量查询,
注意:
    在执行脚本查询的时候,对于新的 kafka 自维护的 偏移量的  消费者来说, 消费者 同时运行 是必须的。
    否则会出现 group.id 指定 的 group 查找不到的错误 !!!!
由于kafka 消费者记录 group 的消费 偏移量 有两种方式 :
    1)kafka 自维护 (新)
    2)zookpeer 维护  (旧)  ,已经逐渐被废弃
所以 ,脚本查看  消费偏移量的方式有两种   kafka自维护  / zookeeper维护


kafka 维护 消费偏移量的 情况:
    1. 查看有那些 group ID 正在进行消费: 
        kafka-consumer-groups --bootstrap-server node1:9092 --list
        注意:
            这里面是没有指定 topic 的,所以查看的所有的 topic 的 消费者 的 group.id  的列表。
            注意: 重名的 group.id 只会显示一次 
            
    2.查看指定group.id 的消费者消费情况 
        kafka-consumer-groups --bootstrap-server node1:9092 --group testGroup --describe    

        
zookeeper 维护  消费偏移量的 情况:(kafka 0.9及以后的版本的kafka-consumer-groups命令后面已不带有--zookeeper的参数)
    1. 查看有那些 group ID 正在进行消费:
            kafka-consumer-groups --zookeeper node1:2181 --list
    2.查看指定group.id 的消费者消费情况 
            kafka-consumer-groups --zookeeper node1:2181 --group testGroup --describe


=====================================================================================

zookeeper 的shell 命令窗口
    执行 zookeeper-client 命令
        ls /consumers/testGroup/offsets/test
        get /consumers/testGroup/offsets/test/0
        get /consumers/testGroup/offsets/test/1
        get /consumers/testGroup/offsets/test/2


=====================================================================================

        1.kafka消费者在会保存其消费的进度,也就是offset,存储的位置根据选用的kafka api不同而不同。
        2.使用 zookeeper.connect 代表 使用kafka-0.10.1.X版本之前的消费者API
                    auto.offset.reset 的值为 smallest(最小值) 和 largest(最大值) (offest保存在zk中)
                    根据javaapi来消费,也就是【kafka.javaapi.consumer.ConsumerConnector、kafka.javaapi.consumer.SimpleConsumer】,我们会配置参数【zookeeper.connect】来消费
                    消费者的offset会更新到zookeeper的【consumers/{group}/offsets/{topic}/{partition}】目录下。消费者API会把offset保存在 /consumers/groupID/offsets/topic/分区号 中。
                    ls /consumers/testGroup1/offsets/test:得 分区号 [0, 1, 2]
                    get /consumers/testGroup1/offsets/test/分区号:得 分区中的 offsets偏移量
                                [zk: localhost(CONNECTED) 0] get /kafka/consumers/zoo-consumer-group/offsets/my-topic/0
                                5662
                                cZxid = 0x20006d28a
                                ctime = Wed Apr 12 18:20:51 CST 2017
                                mZxid = 0x30132b0ed
                                mtime = Tue Aug 22 18:53:22 CST 2017
                                pZxid = 0x20006d28a
                                cversion = 0
                                dataVersion = 5758
                                aclVersion = 0
                                ephemeralOwner = 0x0
                                dataLength = 4
                                numChildren = 0


            3.如果是根据kafka默认的api来消费,即【org.apache.kafka.clients.consumer.KafkaConsumer】,我们会配置参数【bootstrap.servers】来消费。
              而其消费者的offset会更新到一个kafka自带的topic【__consumer_offsets】下面,查看当前group的消费进度,则要依靠kafka自带的工具【kafka-consumer-offset-checker】
                    kafka 0.8版本以前:kafka-consumer-offset-checker --zookeeper node1:2181/kafka --group testGroup  --topic test --broker-info
                    kafka 0.8版本以后:kafka-consumer-groups --bootstrap-server node1:9092 --group testGroup --describe    
                            Group           Topic                          Pid Offset          logSize         Lag             Owner
                            test-consumer-group stable-test                    0   601808          601808          0               none
                            test-consumer-group stable-test                    1   602826          602828          2               none
                            test-consumer-group stable-test                    2   602136          602136          0               none

              4.Group : 消费者组
                Topic : topic的名字
                Pid : partition的ID
                Offset : kafka消费者在对应分区上已经消费的消息数【位置】
                logSize : 已经写到该分区的消息数【位置】
                Lag : 还有多少消息未读取(Lag = logSize - Offset)
                Owner : 分区创建在哪个broker

            5.offset更新的方式,不区分是用的哪种api,大致分为两类:
                    1.自动提交,设置enable.auto.commit=true,更新的频率根据参数【auto.commit.interval.ms】来定。这种方式也被称为【at most once】,
                                fetch到消息后就可以更新offset,无论是否消费成功。
                    2.手动提交,设置enable.auto.commit=false,这种方式称为【at least once】。fetch到消息后,等消费完成再调用方法【consumer.commitSync()】,
                                手动更新offset;如果消费失败,则offset也不会更新,此条消息会被重复消费一次。

 

版权声明:本文为zimiao552147572原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/zimiao552147572/article/details/89553787

智能推荐

kafka

kafka简介和安装 1.简介 2.kafka的安装和配置(单机版,分布式版) 2.1单机版安装 2.2集群版安装 2.2.1consumer.properties配置文件 2.2.2producer.properties 2.2.3server.properties ### 2.2.4注意点 (kafka-logs是数据) [外链图片转存中…(img-2e9jUch2-157355...

Kafka

文章目录 写在之前 Kafka 1、分布式流平台 1.1 流平台的关键功能 1.2 应用 1.3 概念 1.4 核心API说明 2、Topics and Logs 2.1 topic 2.2 Distribution 2.3 Producers 2.4 Consumers 3、快速入门 3.1 Kafka部署 3.2 Kafka Shell 3.2.1 创建一个话题 3.2.2 查看话题 3.2....

Kafka

一消息系统概述 一、模式 1.Peer-to-Peer模式 - 点对点(rabbitmq) (1)往往消费者是串行消费的 (2)数据往往只能被消费一次 (3)解耦能力相对较弱 2发布/订阅模式(kafka) (1)允许消费者进行并行消费 (2)往往会提供数据的持久化机制,从而保证数据可以被消费多次 (3)解耦能力更强 二、消息队列的优势 1.解耦:各个系统之间通过消息系统这个统一接口交换数据,无须...

kafka

1、kafka介绍 Kafka是由Apache软件基金会开发的一个开源流处理平台,由Scala和Java编写。Kafka是一种高吞吐量的分布式发布订阅消息系统,它可以处理消费者规模的网站中的所有动作流数据。 这种动作(网页浏览,搜索和其他用户的行动)是在现代网络上的许多社会功能的一个关键因素。 这些数据通常是由于吞吐量的要求而通过处理日志和日志聚合来解决。 对于像Hadoop一样的日志数据和离线分...

kafka

一、JMS 1、JMS是Java Message Service的缩写,即Java消息服务,如Hornetq、ActiveMQ、kafka。在大型互联网中,JMS可以帮助我们应用之间的解耦以及操作的异步。 2、JMS两种消息模型:点对点模型,发布/订阅模型。在此基础上,我们着重思考的是消息的顺序保证、扩展性、可靠性、业务操作与消息发送一致性,以及多集群订阅者等方面的问题。 点对点模型:一条消息只被...

猜你喜欢

Kafka

Kafka kafka⾼吞吐量的分布式队列(Linkin开发,apache顶级开源项⽬) kafka是一个分布式数据流平台,可以运行在单台服务器上,也可以在多台服务器上部署形成集群。他提供了发布和订阅功能,使用者可以发送数据到kafka中,也可以从kafka中读取数据(以便进行后续的处理)kafka具有高吞吐,低延迟,高容错的特点 架构 Producer:Producer即⽣生产者,消息的产⽣生者...

kafka

kafka 1.Kafka介绍 Apache Kafka是一个开源消息系统,由Scala写成。是由Apache软件基金会开发的一个开源消息系统项目。 Kafka最初是由LinkedIn开发,并于2011年初开源。2012年10月从Apache Incubator毕业。该项目的目标是为处理实时数据提供一个统一、高通量、低等待的平台。 Kafka是一个分布式消息队列:生产者、消费者的功能。它提供了类似...

kafka

消息队列 消息队列(这里是消息队列概念,kafka只是消息队列的一种):              点对点模式(一对一,消费者主动拉取数据,消息收到后消息消除)   优点:是消费者可以自己拉取信息,可以防止一个客户端A发送消息速度比消费消息客户端B快而导致消费消息客户端奔溃。   缺点:是消费消息客户端B无法...

冒泡排序,及改进方式,性能优化400%>>>附图解加源码

首先源码附上,源码中带有注释,看不懂没关系,源码后面附带图解,最后附上代码效率提升图 源码如下: 方案一:其实实现很简单,两层循环,每次内层迭代出最大的一个值,将其放入数组最后一个位置,外层循环的末端便往前移一位。其原理如下图 方案一代码块: 方案二:优化改进 仔细观察上面的图,我们不难发现当迭代到图下这样的情况时,其实已经全排序好了,但是我们还是需要对它进行1,2,3,4,5,6的迭代,这些情况...

css3常用选择器

先介绍一下基本选择器,如下几种 *:通配符。选择页面的所有元素 E:元素选择器。对页面的一些元素进行选择,如p,div,li等 .class:类选择器 #id:id选择器。一个Id在一个页面中只能选择,这是和类选择器的区别 E F:后代选择器。如ul li。选中ul下的li E>F:子元素选择器。如下,可以用 h1 > strong {color:red;}使h1的子元素strong变...