kafka获取指定数据

HAIbing0417 2019-04-03 04:44:43
已知kafka的topic和topic下的partition,现在需要使用请求,每次请求只从指定的partition中获取第一条数据返回,这种请求需要怎么做,求指导
...全文
542 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
HAIbing0417 2019-04-03
  • 打赏
  • 举报
回复
我自己在看API文档时想到一个方法,但是不能确定这种方法的实用性,代码基本上参照https://www.jianshu.com/p/6e89db47c116这篇帖子做的修改,我的controller中的代码如下: Properties props = new Properties(); props.put("bootstrap.servers", "localhost:9092"); props.put("group.id", "group-1"); props.put("auto.offset.reset", "earliest"); //该属性用于控制单次调用 call() 方法能够返回的记录数量,可以帮你控制在轮询里需要处理的数据量 props.put("max.poll.records", 1); props.put("enable.auto.commit", "true"); props.put("auto.commit.interval.ms", "1000"); props.put("key.deserializer", "org.apache.kafka.common.serialization.StringDeserializer"); props.put("value.deserializer", "org.apache.kafka.common.serialization.StringDeserializer"); KafkaConsumer<String, String> consumer = new KafkaConsumer<>(props); consumer.subscribe(Arrays.asList("testDemo")); final Thread mainThread = Thread.currentThread(); Runtime.getRuntime().addShutdownHook(new Thread() { public void run() { System.out.println("Starting exit..."); consumer.wakeup(); try { // 主线程继续执行,以便可以关闭consumer,提交偏移量 mainThread.join(); } catch (InterruptedException e) { e.printStackTrace(); } } }); try { ConsumerRecords<String, String> records = consumer.poll(1000); System.out.println("count : " + records.count()); for (ConsumerRecord<String, String> record : records) { System.out.println("topic = " + record.topic() + ", partition = " + record.partition() + ", offset = " + record.offset() + " , value:" + record.value()); } consumer.commitAsync(); } catch (WakeupException e) { // 不处理异常 } finally { consumer.commitSync(); consumer.close(); System.out.println("Closed consumer and we are done"); } 这么写目前自己测试可以每次发送请求获取一条partition中的消息,但是不能确定是否有其他问题,求各位高手指点。

50,523

社区成员

发帖
与我相关
我的任务
社区描述
Java相关技术讨论
javaspring bootspring cloud 技术论坛(原bbs)
社区管理员
  • Java相关社区
  • 小虚竹
  • 谙忆
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧