Kafka组件包含Producer、Broker、Consumer及ZooKeeper。本文将介绍Kafka Producer组件的功能以及设计要点。
Kafka Producer是由用户使用Kafka提供的SDK开发的,Producer将数据转化成消息,并通过网络发送给Broker。
在Kafka中,每条数据被称为消息,每条消息表示为一个三元组:<topic,key,message>。每个元素表示的含义如下:
topic:表示该条消息所属的topic。topic是划分消息的逻辑概念,一个topic可以分布到多个不同的broker上。
key:表示该条消息的主键。Kafka会根据主键将同一个topic下的消息划分成不同的分区(partition),默认是基于哈希取模的算法,用户也可以根据自己需要设计分区算法。Kafka Producer写入数据过程如图所示:
Kafka Producer写消息过程假设topic A共分为4个partition(创建topic时静态指定的),当用户向topic A写入一条消息时,会对key求hash值,得到一个整数,然后对该整数求模4,得到待写入的partition编号,之后通过网络告知Broker,由Broker写到对应的partition中。
message:表示该条消息的值。该数值的类型为字节数组,可以是普通字符串、JSON对象,或者经过JSON、Avro,Thrift或Protobuf等序列化框架序列化后的对象。
Kafka Producer发送消息时,不需要指定所有Broker的地址,只需给定一个或几个初始化Broker地址即可(一般给定多于一个以达到容错的目的),Producer可通过指定的Broker获取其他所有Broker的位置信息,并自动实现负载均衡。
网友评论