其实pulsar的安装算是比较简单的。主要分为两部分bookie和broker,而我们只需要将配置文件修改好,环境准备好基本都能安装运行了。
安装步骤我就不说了,有不知道的小伙伴可以去看看楼主其他博客,有步骤的讲解。
现在说一下安装时碰到的一个小问题,花费了楼主一下午的时间,才发现不是自己的问题。
1. 安装篇,配置
extraServerComponents=org.apache.bookkeeper.stream.server.StreamStorageLifecycleComponent
如果你配置了这个的话。当然坑不在此,楼主安装软件之后喜欢看启动的日志。也就是这个步骤发现了pulsar的一个小坑。
配置了extraServerComponents这个选项,会造成bookie.out启动日志中打印一条异常日志,当时楼主是第一次安装pulsar,发现日志感觉很奇怪,对比pulsar的安装文档仔细研读了一遍(后来又重新操作了一遍),发现自己操作的完全没错误。那是因为什么呢,看官网上有测试例子,使用了一下发现pulsar可以正常使用,使用客户端写好代码后发现生产消费都是正常的,但是这个异常因为什么呢???百思不得其解。后来经过询问pulsar官方人员才知道,是一个bug,2.2版本不支持这个功能,2.3版本的不清楚,直接在2.2上升级,此功能也没有开启。
2. 使用篇
- 游标功能:
前面写了一个博客专门讲解了游标的使用和回滚测试。现在说一下感受和坑吧。
因为项目需求,可能对一些topic有回滚的需求
对分区topic不支持游标回滚功能,但是提供的api只能创建分区topic。后来楼主想了一个点子,只使用其中一个分区,例如partitioned-0分区,后来测试果然可以使用游标回滚功能了,但是坑的点还不止于此,不论是seek(),还是resetCursor(),回滚的都不精确,没办法后来干脆不管理这个了,不回滚了。期待后期能有所改进吧
- ack批量提交处理功能
consumer.acknowledgeCumulative( message.getMessageId() );
这个的确可以批量回滚,这个没问题,但是批量提交ack之后,一段时间不消费你会发现它会抛出一个警告。
UnAckedMessageTracker.java:116 ## [ConsumerBase{subscription=‘32010’, consumerName=‘32010’, topic=‘persistent://xxxxx/xxx/32010_172.16.4.219-partition-0’}] 361 messages have timed-out
这个楼主不能忍,当时就看代码去了。因为有可能会造成消息的重复消费,这个问题就严重了。后来发现写的逻辑的确没什么问题。然后老方法询问官方,可能是bug。然后不死心的楼主在线下开始测试起来,发现数据量比较大的时候的确有这个现象,然后楼主测试是否回滚成功,发现也已经回滚成功,那这是为什么呢?经过询问pulsar官方人员,可能是个错误报警,等后续吧。