kafka(二):测一测各种参数的合适值,性能优化,生产者消费者实战

本文探讨了Kafka的性能优化,包括生产者与消费者的配置策略,如同步、异步生产数据的测试,以及分区、Key的作用。文章还提及了Kafka在数据丢失、延迟和吞吐量要求等方面的考量,并分享了如何查看和管理分区数据、清理主题数据的方法。此外,提到了消费者偏移量和从头消费的设定,以及遇到的Zookeeper和NodeManager启动问题。
摘要由CSDN通过智能技术生成

写在前面

中途丢失过一次近2000的文字,写得心痛。

kafka权威指南很久前已经看完了。今天打算根据所学到的知识进行一些基准测试和调优。本篇文章侧重实践+少量源码分析+部分原理分析,更多的原理分析、理解放在下篇文章中
【实战过程中,脑海中冒出了太多的疑惑和想解决的问题,我认为消息中间件 比之前学习的大数据生态的一些组件要复杂些,等校招拿了offer,我会把下方所有未解决的问题,逐个深入击破】。
另外,由于无人指导,文章中的测试或者结论,皆为个人见解,不妥之处,大家多指出。

背景

需要将第三方接口的数据全部导出,为避免数据丢失,故考虑使用kafka,暂时没有结合Flume(数据维度有些复杂)。
数据量:近8000万条论文等知识产权数据,预计600G。

我所理解的kafka的使用场景

  • 考虑数据丢失。比如我们从某个数据源接受数据,但是数据从数据源流出的速度大于我们接受数据组件的处理速度,那么这种情况,就很有可能出现数据丢失;还有就是网络阻塞,机器宕机,也可能会造成数据丢失。而kafka处理数据的策略可以适当的解决这个问题

  • 多订阅数据分发,kafka的消费者组,kafka的某个主题,可以让多个组件去订阅。比如我们某个系统出来的数据,可能多个子系统都会使用这些数据,那么使用kafka是个很不错的选择【比如对于同一份数据,我们需要有不同的动作,比如对该数据进行数据清洗挖掘信息,或者将该数据发往别的界面进行展示,等等。】(Kafka支持多个消费者从一个消息流上读取数据,而且消费者之间直不影响)

  • 实时处理:收集处理流式数据(我们可以把数据库的更新发布到 Kafka 上,应用程序通过监控事件流来接收数据库的实时更新。)

  • 日志收集: kafka可将多个日志服务器的数据聚合到一起,比如说文件服务器,hdfs。之后再对这些日志数据进行离线分析,或者放入全文检索系统中进行数据挖掘

  • 应用程序指标,跟踪 CPU 使用率和应用性能等指标

  • 行为跟踪:跟踪用户浏览页面、搜索及其他行为,以发布-订阅的模式实时记录到对应的topic里。那么这些结果被订阅者拿到后,就可以做进一步的实时处理,或实时监控,或放到hadoop/离线数据仓库里处理。(在领英,Kafka 最初的使用场景是跟踪用户的活动。这样一来就可以生成报告,为机器学习系统提供数据,更新搜索结果等)

优化需要考虑的问题

使用kafka前,有些我们需要考虑的地方,想象我们自己设计中间件,需要考虑些什么?

  • 生产与消费,异步还是同步?
  • 如何确定生产者正确接受到数据,当前场景,是否每个消息都很重要?是否允许丢失一小部分消
    息?偶尔出现重复消息是否可以接受?
  • 发送失败的重试次数
  • 是否有严格的延迟和吞吐量要求?
  • 缓冲区大小
  • 因为是消息中间件嘛,更多的只是作为一个通道(也会持久化),所以需要根据实际业务,考虑消息删除策略,是基于时间还是基于空间
  • 由于组的概念,以为消费者往往需要进行数据分析、处理,所以我们还需要考虑消费者处理数据的速度,需要多少消费者,还有确定消费者分别处理哪些分区的数据。
  • 还有消费者数量变化、分区数量变化导致的数据再均衡
  • 消费者读取信息的偏移量,如何保证消费者成功消费到所有数据
  • 如何保证消费者不重复消费数据
  • 如何正确退出生产和消费
  • 等等

以下代码会有不少注释,很多注释是初学时或者第一次实践时注释的,考虑到好记性不如烂笔头,就没有去掉。但是在企业真实生产环境中,过于普通,大家都懂的注释,还是少写点吧?

生产者优化

对于server的配置优化,留到最后,不然反复重启Kafka集群,还是比较不划算。

配置1-同步生产数据

在这里, producer.send()先返回一个 Future 对象,然后调用 Future 对象的 get()方法等待 Kafka 响应。如果服务器返回错误, get 方法会抛出异常。如果没有发生错误,我们会得到一个 RecordMetadata 对象,进一步,可以用它获取消息的偏移量。

kafkaProducer.send(new ProducerRecord<>(topic, Integer.toString(keyCount), Arrays.toString(keywords))).get();
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值