Kafka之消费者

本文详细介绍了Kafka消费者的运作模式,包括push和pull模式及其优缺点,消费者组的概念,以及分区策略如RoundRobin、Range和Sticky。讨论了offset的维护,包括Kafka 0.9之前的Zookeeper存储和之后的内置topic存储。同时,文章涵盖了自动和手动提交offset的使用,以及如何重置offset。最后,提到了Consumer事务,确保消费与offset提交的原子性,以实现精准一次性消费。
摘要由CSDN通过智能技术生成

一、消费者的工作方式

        一般有两种模式,分别为push和pull,消费者采用pull模式从broker中读取数据。

        push(推)模式很难适应消费速率不同的消费者,因为消息发送速率是由broker决定的。它的目标是尽可能以最快速度传递消息,但是这样很容易造成consumer来不及处理消息,典型的表现就是拒绝服务以及网络拥塞。而pull模式则可以根据consumer的消费能力以适当的速率消费消息。

        pull(拉)模式不足之处是,如果kafka没有数据,消费者可能会陷入循环中,一直返回空数据。针对这一点,Kafka的消费者在消费数据时会传入一个时长参数timeout,如果当前没有数据可供消费,consumer会等待一段时间之后再返回,这段时长即为timeout。

二、消费者基础代码

package com.hpu.kafka.consumer;


import org.apache.kafka.clients.consumer.*;

import java.time.Duration;
import java.util.ArrayList;
import java.util.Properties;

/**
 * @author LS
 * @date 2021/12/29 14:33
 * @description
 */
public class kafkaconsumer01 {
    public static void main(String[] args) {
        Properties pro = new Properties();
        pro.put(ConsumerConfig.BOOTSTRAP_SERVERS_CONFIG, "hadoop102:9092");
        pro.put(ConsumerConfig.KEY_DESERIALIZER_CLASS_CONFIG, "org.apache.kafka.common.serialization.StringDeserializer");
        pro.put(ConsumerConfig.VALUE_DESERIALIZER_CLASS_CONFIG, "org.apache.kafka.common.serialization.StringDeserializer");
        pro.put(ConsumerConfig.GROUP_ID_CONFIG,"ls");
        
        KafkaConsumer<Object, Object> consumer = new KafkaConsumer<>(pro);

        ArrayLi
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值