脚本方法

  1. ./bin/kafka-run-class.sh kafka.tools.GetOffsetShell --broker-list localhost:9092 --topic test
  2. test:0:1522
  3. test:1:1020
  4. test:2:1258

和Java程序比起来,运行得有点慢。

Java 程序

更详细的代码工程,可以参考我的GitHub 消费者获取分区列表,并获取分区最新的OFFSET

  1. import java.util.ArrayList;
  2. import java.util.Collection;
  3. import java.util.Collections;
  4. import java.util.List;
  5. import java.util.Properties;
  6. import org.apache.kafka.clients.consumer.Consumer;
  7. import org.apache.kafka.clients.consumer.ConsumerConfig;
  8. import org.apache.kafka.clients.consumer.ConsumerRecords;
  9. import org.apache.kafka.clients.consumer.KafkaConsumer;
  10. import org.apache.kafka.common.PartitionInfo;
  11. import org.apache.kafka.common.TopicPartition;
  12. import org.apache.kafka.common.serialization.LongDeserializer;
  13. import org.apache.kafka.common.serialization.StringDeserializer;
  14. // import kafka.api.OffsetRequest;
  15. public class KafkaConsumerDemo {
  16. private final static String TOPIC = "test";
  17. private final static String BOOTSTRAP_SERVERS = "localhost:9092";
  18. private static Consumer<Long, String> createConsumer() {
  19. final Properties props = new Properties();
  20. props.put(ConsumerConfig.BOOTSTRAP_SERVERS_CONFIG, BOOTSTRAP_SERVERS);
  21. props.put(ConsumerConfig.GROUP_ID_CONFIG, "KafkaExampleConsumer");
  22. props.put(ConsumerConfig.KEY_DESERIALIZER_CLASS_CONFIG, LongDeserializer.class.getName());
  23. props.put(ConsumerConfig.VALUE_DESERIALIZER_CLASS_CONFIG, StringDeserializer.class.getName());
  24. final Consumer<Long, String> consumer = new KafkaConsumer<>(props);
  25. return consumer;
  26. }
  27. // 获取某个Topic的所有分区以及分区最新的Offset
  28. public static void getPartitionsForTopic() {
  29. final Consumer<Long, String> consumer = createConsumer();
  30. Collection<PartitionInfo> partitionInfos = consumer.partitionsFor(TOPIC);
  31. System.out.println("Get the partition info as below:");
  32. List<TopicPartition> tp =new ArrayList<TopicPartition>();
  33. partitionInfos.forEach(str -> {
  34. System.out.println("Partition Info:");
  35. System.out.println(str);
  36. tp.add(new TopicPartition(TOPIC,str.partition()));
  37. consumer.assign(tp);
  38. consumer.seekToEnd(tp);
  39. System.out.println("Partition " + str.partition() + " 's latest offset is '" + consumer.position(new TopicPartition(TOPIC, str.partition())));
  40. });
  41. }
  42. // 持续不断的消费数据
  43. public static void run() throws InterruptedException {
  44. final Consumer<Long, String> consumer = createConsumer();
  45. consumer.subscribe(Collections.singletonList(TOPIC));
  46. final int giveUp = 100; int noRecordsCount = 0;
  47. while(true){
  48. final ConsumerRecords<Long, String> consumerRecords = consumer.poll(1000);
  49. if(consumerRecords.count()==0){
  50. noRecordsCount++;
  51. if(noRecordsCount > giveUp) break;
  52. else continue;
  53. }
  54. // int i = 0;
  55. consumerRecords.forEach(record -> {
  56. // i = i + 1;
  57. System.out.printf("Consumer Record:(%d, %s, %d, %d)\n",
  58. record.key(), record.value(),
  59. record.partition(), record.offset());
  60. });
  61. // System.out.println("Consumer Records " + i);
  62. consumer.commitAsync();
  63. }
  64. consumer.close();
  65. System.out.println("Kafka Consumer Exited");
  66. }
  67. }

参考资料

  1. How can I get the LATEST offset of a kafka topic?
  2. Kafka 源码解析之 Consumer Poll 模型(七)
  3. Case Study to Understand Kafka Consumer and Its Offsets

获取Kafka每个分区最新Offset的几种方法的更多相关文章

  1. PHP获取MySql新增记录ID值的3种方法

    From: http://www.jb51.net/article/51473.htm 这篇文章主要介绍了PHP获取MySql新增记录ID值的3种方法,一般使用PHP自带函数mysql_insert_ ...

  2. python获取字母在字母表对应位置的几种方法及性能对比较

    python获取字母在字母表对应位置的几种方法及性能对比较 某些情况下要求我们查出字母在字母表中的顺序,A = 1,B = 2 , C = 3, 以此类推,比如这道题目 https://project ...

  3. javascript获取json对象的key名称的两种方法

    javascript获取json对象的key名称的两种方法 数据处理中,你可能接收到一个不确定内容格式的json对象,然后要把key的值提取出来.今天试过两种可以提取json key的方法,均可以正常 ...

  4. VS编程,WPF中,获取鼠标相对于当前屏幕坐标的一种方法

    原文:VS编程,WPF中,获取鼠标相对于当前屏幕坐标的一种方法 版权声明:我不生产代码,我只是代码的搬运工. https://blog.csdn.net/qq_43307934/article/det ...

  5. Java代码中获取配置文件(config.properties)中内容的两种方法

    方法千千万,本人暂时只总结了两种方法. (1)config.properties中的内容如图 在applicationContext.xml中配置 <!-- 引入配置文件 --> < ...

  6. 使用java传参调用exe并且获取程序进度和返回结果的一种方法

    文章版权由作者李晓晖和博客园共有,若转载请于明显处标明出处:http://www.cnblogs.com/naaoveGIS/ 1.背景 在某个项目中需要考虑使用java后台调用由C#编写的切图程序( ...

  7. 获取JAVA[WEB]项目相关路径的几种方法

    在jsp和class文件中调用的相对路径不同. 在jsp里,根目录是WebRoot 在class文件中,根目录是WebRoot/WEB-INF/classes 当然你也可以用System.getPro ...

  8. Struts2 在Action中获取request、session、servletContext的三种方法

    首页message.jsp: <body> ${requestScope.req }<br/> ${applicationScope.app }<br/> ${se ...

  9. 获取Map的key和value的两种方法

    //使用迭代器,获取key; /*Iterator<String> iter = map.keySet().iterator(); while(iter.hasNext()){ Strin ...

随机推荐

  1. 【Collect】免费图片库网站推荐(国外高清可商用)

    #国外高清可商用免费图片库 1.https://unsplash.com/2.https://pixabay.com/3.https://www.sitebuilderreport.com/stock ...

  2. 【STM32H7教程】第16章 STM32H7必备的HAL库API(重要)

    完整教程下载地址:http://www.armbbs.cn/forum.php?mod=viewthread&tid=86980 第16章       STM32H7必备的HAL库API(重要 ...

  3. 【linux运维】linux系统上忘记密码如何操作

    目录 红帽系统忘记密码操作 红帽系统设置ip,主机名 centos系统忘记密码操作 一.红帽系统忘记密码操作 1)再出现以下界面后按键盘e键 2)进入以下界面后,再次按e键 3)使用上下键选择第2项或 ...

  4. rsync免交互方法

    添加-e "ssh -o StrictHostKeyChecking=no" rsync -avzP -e "ssh -o StrictHostKeyChecking=n ...

  5. C#程序员在老项目中用到VB遇到的一次坑

    博主自认为C#基础还不错.但是最近接到一个需求,是用VB写的.万般不愿意,不想接触VB,并不是说VB语言不好,而是我真的不喜欢VB.因为没基础过VB,领导派给的任务,有这个需求,不愿意归不愿意,领导给 ...

  6. JavaWeb之servlet(1)

    servlet servlet:就是一个Java程序,运行在web服务器中,用于接收和响应客户端的http请求.更多是配合动态资源使用.当然静态资源也要使用servlet,只不过Tomcat里面已经定 ...

  7. DQL---连接查询(内连接、外连接)、子查询、分页查询

    一.连接查询 1.连接查询建立在有相互关系的两个表间,进行两个及两个以上的表或视图的查询. 2.对n张表进行查询,至少需要n-1个连接表的条件. 二.笛卡尔积(容易造成数据库宕机) 1.指表中每行元素 ...

  8. 干货:Wireshark使用技巧-显示规则

    - 显示规则使用 在Wireshark界面对已经抓取的报文在界面的显示进行控制的规则,称为显示规则,显示规则只是让一部分不符合规则的报文不被显示,但未被丢弃,这些报文仍然存在在Wireshark的系统 ...

  9. git设置github的远程仓库的相关操作

        git能够把github作为远程仓库,本地可以进行推送有关变更,从而多人可以进行协作开发工作.    1  ssh-keygen -t rsa -C "your-email@163. ...

  10. 剑指offer 17:合并两个有序链表

    题目描述 输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则.   解题思路 链表基础操作考察,难点在于对于输入数据的把握,一定要考虑输入数据的全面性 1.出现 ...