SparkStreaming踩坑之Kafka偏移超出范围

1.问题描述由于程序宕机、误操作等原因,SparkStreaming保存的Kafka offset可能过期,超出有效范围,会导致连接Kafka失败,无法正常消费数据。2.对策通过Kafka低阶API获取最新的分区信息。3.具体步骤1)定义Kafka工具类 packagexxx.util; importjava.util.ArrayList;...
摘要由CSDN通过智能技术生成

1.问题描述

由于程序宕机、误操作等原因,SparkStreaming保存的Kafka offset可能过期,超出有效范围,会导致连接Kafka失败,无法正常消费数据。

2.对策

通过Kafka低阶API获取最新的分区信息。

3.具体步骤

1)定义Kafka工具类

package xxx.util;

 

import java.util.ArrayList;

import java.util.Collection;

import java.util.Date;

import java.util.HashMap;

import java.util.List;

import java.util.Map;

 

import org.springframework.stereotype.Component;

 

import kafka.javaapi.*;

import kafka.api.PartitionOffsetRequestInfo;

import kafka.cluster.Broker;

import kafka.common.TopicAndPartition;

import kafka.javaapi.consumer.SimpleConsumer;

import lombok.extern.slf4j.Slf4j;

 

/**

 * Kafka工具类

 *

 */

@Component

@Slf4j

public class KafkaUtil {

    /**

     * for SimpleConsumer

     */

    final int TIMEOUT = 100000;

    /**

     * for SimpleConsumer

     */

    final int BUFFERSIZE = 64 1024;

 

    /**

     * 获取Kafka各topic最新offset

     * @param brokerList

     * @param topics

     * @param groupId

     * @return key: 分区, value: offset

     */

    public Map<TopicAndPartition, Long> getLatestOffset(String brokerList, Collection<String> topics,

      String groupId) {

 

        Map<TopicAndPartition, Long> partitionOffsetMap = new HashMap<TopicAndPartition, Long>();

        List<String> topicList = new ArrayList<String>();

        topicList.addAll(topics);

        Map<TopicAndPartition, Broker> partitionBrokerMap =

            findLeader(brokerList, topicList);

 

        for (Map.Entry<TopicAndPartition, Broker> partitionBrokerEntry : partitionBrokerMap

                .entrySet()) {

            // get leader broker

            Broker leaderBroker = partitionBrokerEntry.getValue();

 

            SimpleConsumer simpleConsumer = new SimpleConsumer(leaderBroker.host(), leaderBroker.port(),

                TIMEOUT, BUFFERSIZE, groupId);

 

            long readOffset = getTopicAndPartitionLatestOffset(simpl

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值