地址:https://www.bilibili.com/video/BV1a4411B7V9?from=search&seid=10631292900083333512
消费者消费策略:https://blog.csdn.net/lzb348110175/article/details/100773487
kafka消息过滤设置:https://blog.csdn.net/yy756127197/article/details/103901814
---
kafka消费者,基本的配置
---32---
这个是两种场景是可以使用的。
当前这个消费者组第一次消费,就是换了组,或者是新的,挂掉直接重启不是的。
如果当前的offset已经不存在了,已经初始化了,就是消费者挂掉了,之前已经消费到10了,当前只有10条数据,七天之后就是kafka已经删掉了这些数据了,之后再次启动的话就是10但是已经没有数据了,而且我的kafka机器已经是1000了,此时我会补全之前没有消费的。
earlister
和
laster---默认
改为这个配置:
第一种情况我没换组,就没有数据拉取,因为进度是一样的。
此时我换了组:
再次起消费者:
如何重新消费某一个主题的数据:换一个组加上earlist这个属性就可以了。
---33---
消费者保留offset:
此时打开消费者。
消费10条数据,再次打开消费者依然消费10条数据。
两次都是这样的。
解释:
offset只是没有写回去,但是在我当前的进程的内存还是有的,所以还是沿着100往下消费的。
此时停掉重新开始的话就又从90开始消费了。
保存在非内存的offset只是在启动的时候去访问一次的。
---34---
自动提交。提交过程中假设我读100条数据过来之后,就是我间隔1秒提交一次offset,我再次提交offset,但是在提交之后,我这100步长还没有处理完挂掉了,再次重新启动的时候,我消费者在101,但是我还没处理完这100个就会丢失数据。
自动提交是基于时间提交的。
手动提交有同步和异步的。
---
异步用的会多一些的,不管是自动还是手动都是有问题的。
自动的话时间间隔比较短的话会丢失数据的,就是我本地还没处理完你就给我提交了,我可能会挂掉的,再次启动就是在提交之后开始读取的。
自动提交的延时长一些的话,我读了100条,已经处理完了,5s处理完的,10s之后再提交的话,此时挂掉了,再次启动的话就是重复消费了。
---
自定义存储offset。
自己提交是传到了kafka里面了。
场景的话就是我们处理之后放在了mysql,放在统一的事务里面。
实现:
这两个方法是自己写的。
在musql读取,要把组 主题 分区 我们的offset
kafka:
---35---