小记--------kafka高效读写数据、kafka高效读写及zookeeper在kafka中的作用
kafka高效读写数据
1.顺序写磁盘
kakfa的producer生产数据,要写入log文件中,写的过程是一直追加到文件末端为顺序写,顺序写能达到600M/s。而随机写只有100K/s,顺序写之所以快,是因为其省去了大量磁头寻址时间
2.零复制技术
正常操作将一个目录下的文件移动到另一个目录下, 首先通过系统空间读取到文件,在传输到用户空间(也就是我们的代码层面),在写入到系统空间,最后移动到另一个目录下。
而kafka架构是直接跳过用户空间,在系统空间进行操作。因此高效的读写效率
Zookeeper在kafka中的作用
kafka集群中有一个broker会被选举为Controller,负责管理集群broker的上下线,所有topic的分区副本分配和leader选举(争抢资源,哪个broker抢到,就会被选举为Controller)等工作。
Controller的管理工作都是依赖于Zookeeper。Controller的作用就是在Zookeeper中写消息,其他作用与普通的broker是一样的。
Kafka事务
kafka事务可以保证kafka在Exactly Once语义的基础上,生产和消费可以跨分区和回话,要么全部成功,要么全部失败
producer事务
为了实现跨分区跨会话的事务,需要引入一个全局唯一的TransactionID,并将Producer获得的PID和TransactionID绑定,这样当Producer重启后就可以通过正在进行的TransactionID获得原来的PID,
为了管理Transaction, kafka引入一个新的组件Transaction Coordinator,Producer就是通过和Transaction Coordinator交互获得TransactionID对应的任务状态,Transaction Coordinator还负责将事务所有写入kafka的一个内部Topic,这样即使整个服务重启,由于事务状态得到保存,进行中的事务状态可以得到回复,从而继续进行。
作者:于二黑
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。