pulsar+flink组合流测试

pulsar解决了消息传输的问题。但是实时计算采用什么技术呢,之前楼主一直使用的是spark,但是偶然的机会发现了flink(阿里开源的blink就是基于此做的,预计会在1.9版本将blink糅合到flink中),因为最近需要将流计算的东西整理一下,和现在线上环境pulsar组合到一起使用。所以做了一下pulsar与flink流计算的测试。

pulsar

git代码位置
https://github.com/apache/pulsar/tree/master/pulsar-flink

测试例子代码
https://github.com/apache/pulsar/tree/master/examples/flink

客户端idea测试

楼主是新建了一个maven项目,有不会的同学可以去下面这个链接学习一下。
https://blog.csdn.net/zzy1078689276/article/details/78732183/
pom.xml依赖:

com.flink
PulsarApi
1.0-SNAPSHOT


org.projectlombok
lombok
1.18.4


org.apache.pulsar
pulsar-flink
p u l s a r . v e r s i o n < / v e r s i o n > < e x c l u s i o n s > < e x c l u s i o n > < g r o u p I d > o r g . a p a c h e . p u l s a r < / g r o u p I d > < a r t i f a c t I d > p u l s a r − c l i e n t − o r i g i n a l < / a r t i f a c t I d > < / e x c l u s i o n > < / e x c l u s i o n s > < / d e p e n d e n c y > < d e p e n d e n c y > < g r o u p I d > o r g . a p a c h e . p u l s a r < / g r o u p I d > < a r t i f a c t I d > p u l s a r − c l i e n t − a d m i n < / a r t i f a c t I d > < v e r s i o n > {pulsar.version}</version> <exclusions> <exclusion> <groupId>org.apache.pulsar</groupId> <artifactId>pulsar-client-original</artifactId> </exclusion> </exclusions> </dependency> <dependency> <groupId>org.apache.pulsar</groupId> <artifactId>pulsar-client-admin</artifactId> <version> pulsar.version</version><exclusions><exclusion><groupId>org.apache.pulsar</groupId><artifactId>pulsarclientoriginal</artifactId></exclusion></exclusions></dependency><dependency><groupId>org.apache.pulsar</groupId><artifactId>pulsarclientadmin</artifactId><version>{pulsar.version}

ProducerQueueIsFullError
楼主做的测试是PulsarConsumerSourceWordCount.java
但是做测试的时候出现了问题。因为楼主是在window10的idea上开发的,直接run之后发现cpu直接占满了。后来发现是pulsar对windows客户端支持的不是很好,没有做cpu和内存的优化。并且在过程中出现了ProducerQueueIsFullError,后来和sijie大神沟通后才知道是producer的maxPendingMessages和blockIfQueueFull等没有开启,后来发现默认的api创建producer的时候的确没有进行这方面的优化。所以重写了FlinkPulsarProducer。在创建producer的时候加上对批的操作。
原创建api;
return client.newProducer()
.topic( this.defaultTopicName)
.create();
重写后api
return client.newProducer()
.topic( this.defaultTopicName)
.batchingMaxMessages(1024)
.batchingMaxPublishDelay(10L, TimeUnit.MILLISECONDS)
.enableBatching(true)
.blockIfQueueFull(true)
.maxPendingMessages(2048)
//设置消息发送超时时间
.sendTimeout(360, TimeUnit.SECONDS)
.create();
再次提交测试就一切正常。代码也不会丢ProducerQueueIsFullError了。

然后楼主将代码打包发送到linux上运行。楼主打的是包是tar.gz包。有不会的同学可以跟着下面这个链接学一下
https://www.cnblogs.com/hdwang/p/6627912.html
解压后已经包含有代码运行所依赖的jar包,在lib包下。

直接java -jar jarname.jar

或者发送到flink运行。
可从web端发送到flink运行。但是依赖的jar包需要拷贝到flink安装位置的lib目录下。依赖包就是打的tar.gz包的lib包中。

你可能感兴趣的:(pulsar,flink)