我现在使用的是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

Kafka 如何读取指定topic中的offset -------------用来验证分区是不是均衡!!!(__consumer_offsets)(已验证!)的更多相关文章

  1. 【kafka】设置指定topic和group_id消耗的offset

    该博文方法有问题,正确方案在http://www.cnblogs.com/dplearning/p/7992994.html 背景: 搭建了一个kafka集群,建立了topic test,用group ...

  2. JDBC批处理读取指定Excel中数据到Mysql关系型数据库

    这个demo是有一个Excel中的数据,我需要读取其中的数据然后导入到关系型数据库中,但是为了向数据库中插入更多的数据,循环N次Excel中的结果. 关于JDBC的批处理还可以参考我总结的如下博文: ...

  3. 【C++】ubuntu中读取指定目录中的所有文件

    摘要:ubuntu系统下,C++程序读取指定文件夹中多个文件,保存文件名列表.文件名没有规律且不考虑读取子文件夹中的文件. 系统配置:ubuntu16.04, cmake编译 首先安利一个函数,输入s ...

  4. 读取指定页面中的超链接-Python 3.7

    #!/usr/bin/env python#coding: utf-8from bs4 import BeautifulSoupimport urllibimport urllib.requestim ...

  5. matlab读取excel文件中的数据

    1.读取sheet1中的所有数据 1.1首先我们建立一个sheet表,表名为‘111’ 1.2 默认这些文本以及数字都放在sheet1中,我们将此excel选入当前工作目录(必要步骤), 选入当前工作 ...

  6. Kafka设计解析(十二)Kafka 如何读取offset topic内容 (__consumer_offsets)

    转载自 huxihx,原文链接 Kafka 如何读取offset topic内容 (__consumer_offsets) 众所周知,由于Zookeeper并不适合大批量的频繁写入操作,新版Kafka ...

  7. Kafka 如何读取offset topic内容 (__consumer_offsets)

    众所周知,由于Zookeeper并不适合大批量的频繁写入操作,新版Kafka已推荐将consumer的位移信息保存在Kafka内部的topic中,即__consumer_offsets topic,并 ...

  8. Kafka 如何读取offset topic内容 (__consumer_offsets)(转发)

    原文  https://www.cnblogs.com/huxi2b/p/6061110.html 众所周知,由于Zookeeper并不适合大批量的频繁写入操作,新版Kafka已推荐将consumer ...

  9. kafka中的offset概念

    在 Kafka 中无论是 producer 往 topic 中写数据, 还是 consumer 从 topic 中读数据, 都避免不了和 offset 打交道, 关于 offset 主要有以下几个概念 ...

随机推荐

  1. 大数据开发实战:离线大数据处理的主要技术--Hive,概念,SQL,Hive数据库

    1.Hive出现背景 Hive是Facebook开发并贡献给Hadoop开源社区的.它是建立在Hadoop体系架构上的一层SQL抽象,使得数据相关人员使用他们最为熟悉的SQL语言就可以进行海量数据的处 ...

  2. Laravel validate 500异常 添加手机验证,中文验证与Validator验证的“半个”生命周期

    今天来讲一下,Lumen的Validator函数 1 2 3 4 5 6 7 8 9 10 11 use Validator;   ...   Class .. {   public function ...

  3. Android -- View流程

    在自定义view中打log,view的显示共有三种,visible.invisible和gone,分别看一下log: gone onVisibilityChanged construct 2 para ...

  4. JS调试必备的5个debug技巧_javascript技巧

    JS调试必备的debug调试javascript技巧 1. debugger; 我以前也说过,你可以在JavaScript代码中加入一句debugger;来手工造成一个断点效果.需要带有条件的断点吗? ...

  5. 详解Nginx + Tomcat 反向代理 如何在高效的在一台服务器部署多个站点

    转自:http://www.jb51.net/article/100111.htm 首先我们需要安装好Nginx.jdk.Tomcat,安装方法已经在 上一篇 说过了,本篇不再赘述. 下来看一下我们的 ...

  6. 【高德地图SDK】如何实现轨迹平滑移动?

    很多人应该都有类似的经历,叫完车,想看看车离我还有多远距离?但手机屏幕上的车不是一动不动,就是一跳一跳的漂移. 目前市面上大多产品“轨迹平滑移动”做的并不好. 市面上只有快的打车和一号专车实现了平滑移 ...

  7. Window10中创建目录连接点

    使用命令: mklink /J "junction point name" "target directory" 如,我有一个文件夹在D:\aa,想存在相同的目 ...

  8. 005-Go 操作PostgreSQL数据库

    package main import( "fmt" "database/sql" _ "github.com/lib/pq" " ...

  9. dynamicpdf文件打印

    function printForm(PD_ID, sREP_ID) { var data = { id: '#SID#', t: '' + new Date(), PrintAction: 'Pri ...

  10. Git如何获得两个版本间所有变更的文件列表

    https://segmentfault.com/q/1010000000133613 git diff --name-status HEAD~2 HEAD~3