Kafka旧版消费者API示例(低级消费者)

Kafka旧版高级消费者API强依赖ZK,目前高版本kafka已将offset移交内部主题,若高版本可选用新版API。

实现低级API变成实现的主要步骤

  • 获取指定主题相应分区对应的元数据信息

  • 找出指定分区的Leader副本节点,创建SimpleConsumer,建立与Leader副本的连接

  • 构造消费请求

  • 获取数据并处理

  • 对偏移量进行处理

  • 当代理发生变化时进行相应处理,保证消息被正常消费

1.创建一个类并定义部分常量:

public class LowConsumerAPI {

    /**
     * broker list
     */
    private static final String BROKER_LIST = "192.168.1.100:9092,192.168.1.100:9093,192.168.1.100:9094";

    /**
     * 连接超时时间:1min
     */
    private static final int TIME_OUT = 60 * 1000;
    /**
     * 读取消息缓存区大小:1M
     */
    private static final int BUFFER_SIZE = 1024 * 1024;
    /**
     * 每次获取消息的条数
     */
    private static final int FETCH_SIZE = 100000;
    /**
     * 发生错误时重试的次数
     *///
    private static final int RETRIES_TIME = 3;
    /**
     * 允许发生错误的最大次数
     */
    private static final int MAX_ERROR_NUM = 3;

2.定义获取主题相应分区元数据信息的方法:

/**
     * 获取指定主题指定分区的元数据
     */
    private PartitionMetadata fetchPartitionMetadata(List<String> brokerList, String topic, int partitionId) {
        SimpleConsumer consumer = null;
        TopicMetadataRequest metadataRequest = null;
        TopicMetadataResponse metadataResponse = null;
        List<TopicMetadata> topicMetadatas = null;

        try{
            /*
             * 循环是因为不确定传入的partition的leader节点是哪个
             */
            for(String host : brokerList) {
                // 1. 构建一个消费者SimpleConsumer,它是获取元数据的执行者
                String[] hostsAndPorts = host.split(":");
                   // 最后一个参数是 clientId
                consumer = new SimpleConsumer(hostsAndPorts[0], Integer.parseInt(hostsAndPorts[1]),
                        TIME_OUT, BUFFER_SIZE, topic + "-" + "0" + "-" + "client");

                // 2. 构造请求主题元数据信息的请求 TopicMetadateRequest
                metadataRequest = new TopicMetadataRequest(Arrays.asList(topic));

                // 3. 通过send()正式与代理通信,发送TopicMetadateRequest请求获取元数据
                try {
         
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值