Kafka消息传递图解
Posted 舒穆禄祤
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Kafka消息传递图解相关的知识,希望对你有一定的参考价值。
近期因为项目需要,对Kafka进行了一番扫盲级学习,现讲所学进行简要总结,方便后续回顾,同时供给Kafka初学者参考。
kafka作为一种分布式流数据处理平台,提供强大的实时消息传递功能及实时流数据处理能力。支持集群水平扩展,通过消息数据多副本存储实现高可用,同时提供超级快速的读写能力(官网用wicked fast形容)。具备消息主题发布与订阅(消息写入与读取),数据处理,数据存储等功能。
kafka通过对消息进行分区保存,对消费者进行分组等手段实现高效的消息传递机制,提供多种消息写入及读取方式,适用多种实时数据传递需要。
第一步:topic注册
kafka集群通过zookeeper进行管理,kafka接受创建topic请求后,根据参数创建partition,创建副本,通过选举机制选出leader,即主节点(后续主节点进行提供数据读写服务,从节点通过主节点数据),最后将topic相关信息存储在zookeeper,以供生产者及消费者适用。
第二步:producer传递消息数据
kafka通过对主题配置多个partition,支持生产者同时向多个partition写入数据。
kafka提供3中消息传递模式:
1、acks=0:只发送一次,不等待broker反馈,不保证消息成功投递。
2、acks=1:以leader反馈收到作为成功投递标准;大部分应用均会折中选择此种模式
3、acks=-1:以leader和所有副本都反馈收到作为成功投递标准,保证投递可靠性,但提高了性能开销;
第三步:consumer读取消息数据
kafka提供消费者通过poll方式读取数据的功能,较传统push方式可避免造成消费端消息堆积造成服务异常以及网络拥塞等问题。kafka提供两种消费模式,High level及 Low level。High level模式通过kafka管理消费者的offset,默认保证消息至少被消费一次。Low level需要消费端自己维护offset等相关信息,实际上较High level模式要复杂很多。
kafka消费具有如下规则:
1、partition中的消息至少被一个consumer消费
2、一个partition中的消息只能被一个group中的一个consumer消费
3、一个partition中的消息可以被多个group重复消费
4、一个consumer可以消费多个partition中的消息
5、consumer的消费都必须是顺序读取partition里面的message
6、只允许同一个consumer group下的一个consumer线程去访问一个partition
本文对kafka消息传递进行的简要的描述,对于kafka的集群部署、参数优化,异常处理、最佳实践等相关内容还需要在项目逐步探索。
以上是关于Kafka消息传递图解的主要内容,如果未能解决你的问题,请参考以下文章
实时构建:Apache Kafka的大数据消息传递,Part 2
专为实时而构建:使用Apache Kafka进行大数据消息传递 第2部分