热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Kafka如何读取指定topic中的offset用来验证分区是不是均衡!!!(__consumer_offsets)(已验证!)

我现在使用的是librdkafka的CC++的客户端来生产消息,用flume来辅助处理异常的数据,,,但是在前段时间,单独使用flume测试的时候发现,flume不能对分区

我现在使用的是librdkafka 的C/C++ 的客户端来生产消息,用flume来辅助处理异常的数据,,,

但是在前段时间,单独使用flume测试的时候发现,flume不能对分区进行负载均衡!同一个集群中,一个broker的一个分区已经有10亿条数据,另外一台的另一个分区只有8亿条数据;

因此,我对flume参照别人的做法,增加了拦截器;

即在flume配置文件中 增加以下字段;

-----

stage_nginx.sources.tailSource.interceptors = i2
stage_nginx.sources.tailSource.interceptors.i2.type=org.apache.flume.sink.solr.morphline.UUIDInterceptor$Builder
stage_nginx.sources.tailSource.interceptors.i2.headerName=key
stage_nginx.sources.tailSource.interceptors.i2.preserveExisting=false

----特别注意,,此处的sources是你自己的sources name.

增加完后,要先进行自己测试,验证flume拦截器的负载均衡功能;

好,下来话不多少,,看测试步骤;

 

1,创建topic 相关联的分区 (因现场暂时只有2个分区,所以我这边暂时取2个分区做测试)

  (我暂时使用的kafka版本是kafka_2.11-0.9.0.1,以下都是在kafka相关版本的bin路径下操作命令

  ./kafka-topics.sh --create --zookeeper 192.165.1.91:12181,192.165.1.92:12181,192.165.1.64:12181 --replication-factor 1 --partitions 2 --topic test3      

   创建topic test3  不要分区  zookeeper 3台   分区2个  zookeeper端口号12181(我本地的broker端口号是19091,这个在kafka  conf/ server.properties里边配置)

2,查看topic的创建情况 

  在broker的每台机器的目录下,分别查看topic的创建情况!  

  下边是我91机器的情况:

  ./kafka-topics.sh --describe --zookeeper 192.165.1.91:12181 --topic test3 

  

    Topic:test3 PartitionCount:2 ReplicationFactor:1 Configs:

    Topic: test3 Partition: 0 Leader: 1 Replicas: 1 Isr: 1

    Topic: test3 Partition: 1 Leader: 2 Replicas: 2 Isr: 2

-------------意思是  他有俩个分区,,每个分区他的备份分区都是他们自己,即没有分区,,你们可以根据你们自身的现状做不同的操作;

3,启动flume生产消息,并且查看消息是否生产成功;

   a, 启动flume:/home/hadoop/wgjflume/apache-flume-1.5.0-cdh5.4.9-bin/bin/flume-ng agent -n stage_nginx -c /home/hadoop/wgjflume/apache-flume-1.5.0-cdh5.4.9-bin/conf -f /home/hadoop/wgjflume/apache-flume-1.5.0-cdh5.4.9-bin/conf/flume-conf.properties -Dflume.root.logger=INFO,console      

    次处生产了30条消息!!!

   b, 查看消息是否消费成功!

   ./kafka-run-class.sh kafka.tools.GetOffsetShell --broker-list 192.165.1.91:19092,192.165.1.92:19092,192.165.1.64:19092 --topic test6 --time -1

4,要查消费情况,必须的建立消费组,,下来创建消费group

   ./kafka-console-consumer.sh --bootstrap-server 192.165.1.91:19092,192.165.1.92:19092,192.165.1.64:19092 --topic test3 --from-beginning --new-consumer

    此处会消费信息!

5,(此处,关闭消费程序,或者另外开一个窗口来)查看自己创建的  group id号;

     ./kafka-consumer-groups.sh --bootstrap-server 192.165.1.91:19092,192.165.1.92:19092,192.165.1.64:19092 --list --new-consumer       

     本地我显示的是:console-consumer-54762

6,查询__consumer_offsets topic所有内容

    注意:运行下面命令前先要在consumer.properties中设置exclude.internal.topics=false(同时要配置好你的consumer.properties中有关zookeeper和broker相关的IP和端口信息

     ./kafka-console-consumer.sh --topic __consumer_offsets --zookeeper 192.165.1.91:12181,192.165.1.92:12181,192.165.1.64:12181 --formatter "kafka.coordinator.GroupMetadataManager\$OffsetsMessageFormatter" --consumer.config ../config/consumer.properties --from-beginning

  此处需要注意的是  consumer.properties 的路径!!!  

7. 计算指定consumer group在__consumer_offsets topic中分区信息

这时候就用到了第4步获取的group.id(本例中是console-consumer-54762)。Kafka会使用下面公式计算该group位移保存在__consumer_offsets的哪个分区上:

Math.abs(groupID.hashCode()) % numPartitions

所以在本例中,对应的分区=Math.abs("console-consumer-54762".hashCode()) % 50 = 22,即__consumer_offsets的分区22保存了这个consumer group的位移信息,下面让我们验证一下。

  注意:Math.abs("console-consumer-54762".hashCode()) % 50  这个使用java输出的一个值,Math.abs是java的一个函数,可以直接将前边这个做参数,打印出他的值.

8. 获取指定consumer group的位移信息 

bin/kafka-simple-consumer-shell.sh --topic __consumer_offsets --partition 22 --broker-list 192.165.1.91:19092,192.165.1.92:19092,192.165.1.64:19092 --formatter "kafka.coordinator.GroupMetadataManager\$OffsetsMessageFormatter"

9,生产消息,查看负载均衡情况,,,,我项目中用的flume是exec方式的,,所有使用  cat 一个文件中的内容追加到flume  exec 的文件末尾,然后运行命令8,,,查看消费位移!!!

  结果显示,,,拦截器,,分发消息成功,,俩个分区数目基本是持衡的。

  

   本文链接地址:https://i.cnblogs.com/EditPosts.aspx?postid=6339111

   特别鸣谢,胡夕,参考了他的博文,他的博客链接地址:http://www.cnblogs.com/huxi2b/p/6061110.html

 


推荐阅读
  • ConsumerConfiguration在kafka0.9使用JavaConsumer替代了老版本的scalaConsumer。新版的配置如下:bootstrap. ... [详细]
  • 我正在使用sql-serverkafka-connect和debezium监视sqlserver数据库,但是当我发布并运行我的wo ... [详细]
  • 你知道Kafka和Redis的各自优缺点吗?一文带你优化选择,不走弯路 ... [详细]
  • kafka教程基本概念
    kafka教程基本概念 ... [详细]
  • 篇首语:本文由编程笔记#小编为大家整理,主要介绍了MySQL安装(windows版本)相关的知识,希望对你有一定的参考价值。1.下载.MyS ... [详细]
  • Druid读取Kafka数据的简单配置过程
    Druid的单机版安装参考:https:blog.51cto.com101202752429912Druid实时接入Kafka的过程下载、安装、启动kafka过程:wgethttp ... [详细]
  • 本系列内容:Kafka环境搭建与测试Python生产者消费者测试Spark接收Kafka消息处理,然后回传到KafkaFlask引入消费者WebSocket实时显示版本:spark ... [详细]
  • 本文介绍了在Linux下安装和配置Kafka的方法,包括安装JDK、下载和解压Kafka、配置Kafka的参数,以及配置Kafka的日志目录、服务器IP和日志存放路径等。同时还提供了单机配置部署的方法和zookeeper地址和端口的配置。通过实操成功的案例,帮助读者快速完成Kafka的安装和配置。 ... [详细]
  • 深入理解Kafka服务端请求队列中请求的处理
    本文深入分析了Kafka服务端请求队列中请求的处理过程,详细介绍了请求的封装和放入请求队列的过程,以及处理请求的线程池的创建和容量设置。通过场景分析、图示说明和源码分析,帮助读者更好地理解Kafka服务端的工作原理。 ... [详细]
  • 本文介绍了使用Spark实现低配版高斯朴素贝叶斯模型的原因和原理。随着数据量的增大,单机上运行高斯朴素贝叶斯模型会变得很慢,因此考虑使用Spark来加速运行。然而,Spark的MLlib并没有实现高斯朴素贝叶斯模型,因此需要自己动手实现。文章还介绍了朴素贝叶斯的原理和公式,并对具有多个特征和类别的模型进行了讨论。最后,作者总结了实现低配版高斯朴素贝叶斯模型的步骤。 ... [详细]
  • 本文介绍了禅道作为一款国产开源免费的测试管理工具的特点和功能,并提供了禅道的搭建和调试方法。禅道是一款B/S结构的项目管理工具,可以实现组织管理、后台管理、产品管理、项目管理和测试管理等功能。同时,本文还介绍了其他软件测试相关工具,如功能自动化工具和性能自动化工具,以及白盒测试工具的使用。通过本文的阅读,读者可以了解禅道的基本使用方法和优势,从而更好地进行测试管理工作。 ... [详细]
  • 本文介绍了解决java开源项目apache commons email简单使用报错的方法,包括使用正确的JAR包和正确的代码配置,以及相关参数的设置。详细介绍了如何使用apache commons email发送邮件。 ... [详细]
  • 本文总结了初学者在使用dubbo设计架构过程中遇到的问题,并提供了相应的解决方法。问题包括传输字节流限制、分布式事务、序列化、多点部署、zk端口冲突、服务失败请求3次机制以及启动时检查。通过解决这些问题,初学者能够更好地理解和应用dubbo设计架构。 ... [详细]
  • 视图分区_组复制常规操作网络分区amp;混合使用IPV6与IPV4 | 全方位认识 MySQL 8.0 Group Replication...
    网络分区对于常规事务而言,每当组内有事务数据需要被复制时,组内的成员需要达成共识(要么都提交,要么都回滚)。对于组成员资格的变更也和保持组 ... [详细]
  • camel_使用Camel在来自不同来源的Solr中索引数据
    camelApacheSolr是建立在Lucene之上的“流行的,快速的开源企业搜索平台”。为了进行搜索(并查找结果),通常需要从不同的源(例如内容管理 ... [详细]
author-avatar
相思和怀恋_811_372
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有