Kafka发送消息过程

Kafka发送消息模型

 

ProducerRecord对象包含目标主题和要发送的内容,还可以指定键或分区。发送ProducerRecord对象时,生产者要先把键和值对象序列化为字节数组(默认使用StringSerializer),这样才可以在网络上传输。然后,字节数组被传给分区器。如果在ProducerRecord对象里指定了分区,那么分区器不会再做任何事,直接把指定的分区返回。如果没有指定分区,那么分区器会根据ProducerRecord对象的键来选择一个分区。如果键为空,那么分区器会使用负载均衡算法,随机选择一个分区返回。选好分区后,生产者就知道往哪个主题和分区发放这条消息了。接着,这条消息被添加到一个记录批次里,这个批次里的所有消息会被发送到相同的主题和分区上。有一个独立的线程负责把这些消息批次发送到相应的broker上。

服务器收到消息后返回一个响应。如果消息成功写入Kafka,就返回一个RecordMetaData对象,它包含了主题和分区信息,以及消息在分区里的偏移量。如果写入失败,则会返回一个错误。生产者在收到错误后会尝试重新发送消息,几次发送失败后,就返回错误信息。

ProducerRecord包含字段:
private final String topic;
private final Integer partition;
private final K key;
private final V value;
private final Long timestamp;
RecordMetaData包含字段:
public static final int UNKNOWN_PARTITION = -1;
private final long offset;
private final long timestamp;
private final long checksum;
private final int serializedKeySize;
private final int serializedValueSize;
private final TopicPartition topicPartition;
TopicPartition包含字段:
private int hash = 0;
private final int partition;
private final String topic;

《Kafka权威指南》
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值