四、 kafka consumer 配置

consumer配置

#指明当前消费进程所属的消费组,一个partition只能被同一个消费组的一个消费者消费(同一个组的consumer不会重复消费同一个消息)
group.id

#针对一个partition的fetch request所能拉取的最大消息字节数,必须大于等于Kafka运行的最大消息
fetch.message.max.bytes  1024 * 1024

#是否自动周期性提交已经拉取到消费端的消息offset; 如果此值设置为true,consumer会周期性的把当前消费的offset值保存到zookeeper

auto.commit.enable true

consumer端丢失消息的情形

1: auto.commit.enable=true 在消息处理完成前就提交了offset,那么就有可能造成数据的丢失。由于Kafka consumer默认是自动提交位移的,所以在后台提交位移前一定要保证消息被正常处理了,因此不建议采用很重的处理逻辑,如果处理耗时很长,则建议把逻辑放到另一个线程中去做。为了避免数据丢失,现给出两点建议:

  • enable.auto.commit=false  关闭自动提交位移
  • 在消息被完整处理之后再手动提交位移

2 如果auto.commit.enable=false也可能出现数据丢失的情况。假设consumer的两个fetcher各自拿了一条数据(这种情形是partition的数量大于consumer group中的consumer的数量,这样就会有一个consumer同时消耗两个partition的数据),并且由两个线程同时处理,这时线程t1处理完partition1的数据,手动提交offset,这里需要着重说明的是,当手动执行commit的时候,实际上是对这个consumer进程所占有的所有partition进行commit,kafka暂时还没有提供更细粒度的commit方式,也就是说,即使t2没有处理完partition2的数据,offset也被t1提交掉了。如果这时consumer crash掉,t2正在处理的这条数据就丢失了。

  • 如果希望能够严格的不丢数据,解决办法有两个:

    1. 手动commit offset,并针对partition_num启同样数目的consumer进程,这样就能保证一个consumer进程占有一个partition,commit offset的时候不会影响别的partition的offset。但这个方法比较局限,因为partition和consumer进程的数目必须严格对应。
    2. 另一个方法同样需要手动commit offset,另外在consumer端再将所有fetch到的数据缓存到queue里,当把queue里所有的数据处理完之后,再批量提交offset,这样就能保证只有处理完的数据才被commit。当然这只是基本思路,实际上操作起来不是这么简单,具体做法以后我再另开一篇。



#自动提交offset到zookeeper的时间间隔
auto.commit.interval.ms  60 * 1000

#消费均衡的重试次数(当新的consumer加入到consumer  group时,consumers集合试图重新平衡分配到每个consumer的partitions数目(即重新做负载均衡)。如果consumers集合改变了,当分配正在执行时(正在做负载均衡时,consumer的数目变化了),这个重新平衡会失败并重入(负载均衡会失败并且重新负载均衡))
rebalance.max.retries  4

#消费均衡两次重试之间的时间间隔
rebalance.backoff.ms 2000

#当重新去获取partition的leader前需要等待的时间
refresh.leader.backoff.ms   200

#如果zookeeper上没有offset合理的初始值情况下获取第一条消息开始的策略smallest|largeset
auto.offset.reset largest(新的consumer加入进来的时候,从最新的消息消费,还是从最早的消息开始消费)

#如果其超时,将会可能触发rebalance并认为已经死去
zookeeper.session.timeout.ms  6000(zookeeper 会话的超时限制。如果consumer在这段时间内没有向zookeeper发送心跳信息,则它会被认为挂掉了,并且reblance将会产生)

#确认zookeeper连接建立操作客户端能等待的最长时间
zookeeper.connection.timeout.ms 6000 ---------------------  

转载于:https://www.cnblogs.com/liufei1983/p/9728681.html

Spoon是一个用于Apache Kafka的消费者框架,它提供了一种简单的方式来创建、管理和监控Kafka消费者的实例。在Spoon中配置Kafka Consumer通常涉及以下几个步骤: 1. **添加依赖**:首先,在你的项目中引入Spoon库,如果你使用Maven,可以在pom.xml文件中添加如下依赖: ```xml <dependency> <groupId>com.vlkan</groupId> <artifactId>spoon-kafka-consumer</artifactId> <version>最新版本号</version> </dependency> ``` 2. **创建配置对象**:使用`SpoonConsumerConfig`类来设置Kafka消费者的基本配置,如bootstrap servers地址、group id等: ```java SpoonConsumerConfig config = new SpoonConsumerConfig(); config.bootstrapServers("localhost:9092"); config.groupId("my-consumer-group"); ``` 3. **订阅主题**:指定消费者需要订阅的主题列表: ```java List<String> topics = Arrays.asList("topic1", "topic2"); config.subscribe(topics); ``` 4. **设置偏移量策略**:可以选择从头开始消费(`earliest`)、从最近的位置开始(`latest`) 或者自定义偏移量(`specific offset`): ```java config.seekToBeginning(); // 从头开始 ``` 5. **启动消费者**:通过`SpoonConsumer`工厂创建并运行消费者实例: ```java SpoonConsumer<String, String> consumer = SpoonConsumer.create(config); consumer.start(); ``` 6. **处理消息**:消费者会自动拉取消息并调用回调函数处理。你可以定义一个处理消息的回调函数来处理接收到的消息。 7. **关闭消费者**:当不再需要消费时,记得关闭消费者以释放资源: ```java consumer.close(); ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值