kafka consumer相关文档阅读

This commit is contained in:
2023-11-25 02:09:57 +08:00
parent e4d198c890
commit d2930c17dd

View File

@@ -375,6 +375,22 @@ kafka中的分区策略通过`partition.assignment.strategy`参数来进行配
> - `auto.commit.interval.ms`:自动提交默认的间隔时间为5s
>
> 在开启自动提交时每次消费者调用poll接口时都会检查是否距离上次提交的时间间隔已超过5s若超过则执行自动提交逻辑。
>
> 在自动提交场景下可能会造成消息的重复消费如果自动提交的间隔为10s在上次提交完成后过了6s消费完100条消息但是此时消费者宕机了导致消费的100条消息没有提交offset此时该宕机消费者负责的分区将会被分配给消费者组中的其他消费者其他消费者消费时仍然会从最后一次提交的offset开始消费导致100条消息会被重复消费。
> #### kafka手动提交
> kafka可以选择设置手动提交只用把`enable.auto.commit`关闭。kafka手动提交分为如下两种场景
> - commitSync同步提交。当关闭自动提交时可以调用`commitSync`接口来进行手动提交。手动提交的offset为最后一次调用poll方法返回的offset。该方法通常在消费完所有poll返回的消息后再调用否则若commit后消息还没有消费完消费者宕机则会导致消息丢失有些消费不会被消费。<br>
> 在同步提交的场景下调用commitSync后线程会一直阻塞直到接收到kafka server返回的ackack代表broker对commit offsets的确认
> - commitAsync由于同步提交会造成阻塞一直等待broker返回ack故而会影响消息消费的吞吐量。可以通过异步提交来解决吞吐量问题但是`异步提交可能会造成更多消息被重复消费`。
> #### kafka手动提交、自动提交的优劣
> - kafka自动提交可能会造成消息的丢失自动提交默认间隔为5s如果在上次poll后的5s内消息并未被消费完成那么在kafka自动提交后即使尚未被消费的消息后续未被消费那么kafka也会将其视为已消费从而造成消息丢失
>
> - kafka commitSync可手动同步提交offset但是在调用commitSync接口后会等待broker返回确认信息在此之前消费者会一直阻塞。这样会影响消费者的吞吐量故而为了提高吞吐量可以尽量减少commitSync的提交次数
>
> - kafka commitAsync相比于同步提交commitAsync在调用后并不会阻塞而是直接返回此后可以继续调用poll来继续从broker拉取后续消息。