Kafka消息传递图解

Posted 舒穆禄祤

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Kafka消息传递图解相关的知识,希望对你有一定的参考价值。

近期因为项目需要,对Kafka进行了一番扫盲级学习,现讲所学进行简要总结,方便后续回顾,同时供给Kafka初学者参考。


kafka作为一种分布式流数据处理平台,提供强大的实时消息传递功能及实时流数据处理能力。支持集群水平扩展,通过消息数据多副本存储实现高可用,同时提供超级快速的读写能力(官网用wicked fast形容)。具备消息主题发布与订阅(消息写入与读取),数据处理,数据存储等功能。


kafka通过对消息进行分区保存,对消费者进行分组等手段实现高效的消息传递机制,提供多种消息写入及读取方式,适用多种实时数据传递需要。    


第一步:topic注册

kafka集群通过zookeeper进行管理,kafka接受创建topic请求后,根据参数创建partition,创建副本,通过选举机制选出leader,即主节点(后续主节点进行提供数据读写服务,从节点通过主节点数据),最后将topic相关信息存储在zookeeper,以供生产者及消费者适用。

Kafka消息传递图解

第二步:producer传递消息数据

kafka通过对主题配置多个partition,支持生产者同时向多个partition写入数据。


Kafka消息传递图解


kafka提供3中消息传递模式:

1、acks=0:只发送一次,不等待broker反馈,不保证消息成功投递。

Kafka消息传递图解

2、acks=1:以leader反馈收到作为成功投递标准;大部分应用均会折中选择此种模式

Kafka消息传递图解

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消息传递图解的主要内容,如果未能解决你的问题,请参考以下文章

kafka传递消息的三种方式

实时构建:Apache Kafka的大数据消息传递,Part 2

Kafka0.8.2官方文档中文版系列-消息传递语义

专为实时而构建:使用Apache Kafka进行大数据消息传递 第2部分

如何使用 Kafka Connect 将 Protobuf 消息传递到 Elasticsearch?

Kafka 消息 VS REST 调用