数据库其它

关注公众号 jb51net

关闭
首页 > 数据库 > 数据库其它 > Kafka提高读写效率

Kafka高效读写数据的原因及如何提升Kafka的吞吐量

作者:ha_lydms

本文主要介绍了Kafka的高效读写数据的原因及如何提升Kafka的吞吐量,Kafka通过分区、稀疏索引等零拷贝等技术提高了读写效率,增加缓冲区大小、调整batch、linger等参数可以提升生产者端的吞吐量,调整fetch.max.size等max.poll.records等参数可以提升消费者端的吞吐量

1、Kafka 为什么能高效读写数据

Kafka 的 producer 生产数据,要写入到 log 文件中,写的过程是一直追加到文件末端,

为顺序写。官网有数据表明,同样的磁盘,顺序写能到 600M/s,而随机写只有 100K/s。这

与磁盘的机械机构有关,顺序写之所以快,是因为其省去了大量磁头寻址的时间。

2、副本数设定

一般我们设置成2个或3个,很多企业设置为2个。

副本的优势:提高可靠性;副本劣势:增加了网络IO传输。

3、如何提升吞吐量

如何提升吞吐量?

4、Kafka丢不丢数据

5、Kafka数据重复

去重 = 幂等性 + 事务

1)幂等性配置参数

参数名称描述
enable.idempotence是否开启幂等性,默认true,表示开启幂等性。
max.in.flight.requests.per.connection1.0.X版本前,需设置为1,1.0.X之后,小于等于5
retries失败重试次数,需要大于0
acks需要设置为all

2)Kafka的事务一共有如下5个API

// 1初始化事务
void initTransactions();

// 2开启事务
void beginTransaction() throws ProducerFencedException;

// 3在事务内提交已经消费的偏移量(主要用于消费者)
void sendOffsetsToTransaction(Map<TopicPartition, OffsetAndMetadata> offsets,
                              String consumerGroupId) throws ProducerFencedException;

// 4提交事务
void commitTransaction() throws ProducerFencedException;

// 5放弃事务(类似于回滚事务的操作)
void abortTransaction() throws ProducerFencedException;

3)小结

总结

 本文主要介绍了Kafka的高效读写数据的原因及如何提升Kafka的吞吐量,Kafka通过分区、稀疏索引等零拷贝等技术提高了读写效率,提升吞吐量可以从生产者和消费者两个方面入手,增加缓冲区大小、调整batch、linger等参数可以提升生产者端的吞吐量,调整fetch.max.size等max.poll.records等参数可以提升消费者端的吞吐量,Kafka在生产者、Broker和消费者三个角度都有措施保证数据不丢失,Kafka通过开启幂等性、事务等措施保证数据去重和幂等性。

到此这篇关于Kafka高效读写数据的原因及如何提升Kafka的吞吐量的文章就介绍到这了,更多相关Kafka提高读写效率内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

您可能感兴趣的文章:
阅读全文