kafka生产者使用方法(JAVA)

java实现生产者非常简单,可以直接使用kafka-clients包,也可以使用spring-kafka这样的框架。

我们为了便于内外网向kafka(0.10.0)上报数据,所以封装了一个http接口专门接收数据(做一些合法性校验)并将数据生产到kafka中。

运行了快一年,随着数据量的增大,业务变重,开始出现问题:

1、高峰期有时候出现接口不可用,全部上报都返回失败;

2、日志中大量打印alloc memery timeout;

在网上搜了一下错误码,其他人也有遇到过,给出的建议是将batchsize配置改为0来解决分配不到内存的问题。实测无效!!

然后回去看了官方文档,从官方文档的意思上看,由于我们使用了batchsize和lingerms来提升性能, send操作会将数据暂存到本地的buffermemory中,一定时间(lingerms)过后才会尝试将数据发送到kafka集群上。但是由于我们的buffermemory使用了kafka给的33M左右大小的块,在我们当前系统中会被快速消耗完毕。本来这个时候kafka内部有一个block直到有内存可用为止的方法,但是为了提升性能快速失败,我们配置了maxblockms为1000毫米,所以出现了很多分配不到内存的问题,将buffermemory增大10倍过后,分配不到内存的问题解决。

另外有个小知识点:

生产者的send函数,返回的是Future对象,该future是kafka包里面实现的,其中的get函数超时并不会导致任务失败。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 135,306评论 19 139
  • kafka的定义:是一个分布式消息系统,由LinkedIn使用Scala编写,用作LinkedIn的活动流(Act...
    时待吾阅读 10,717评论 1 15
  • 发行说明 - Kafka - 版本1.0.0 以下是Kafka 1.0.0发行版中解决的JIRA问题的摘要。有关该...
    全能程序猿阅读 7,925评论 2 7
  • 不过告诫你的是,投资普洱茶前,先理顺四个问题: 1、你收藏的普洱茶有木有变现途径? 2、如何流通和转让,特别是可以...
    城隼问羽阅读 2,087评论 0 0
  • 春惊万物散异香,落尽繁华始吐芳。 细雨如故潇潇下,云散雾开暖袭来。 晚霞余晖交相映,清风绿水互作旋。 众鸟争鸣残照...
    南宫冰雪林阅读 2,299评论 0 0