kafka key的作用_Kafka消息从发送到消费---发送篇
Kafka作为一个常用消息中间件,他具备很多优秀的特点,在此,文章从消息的发送到kafka存储,然后到消费方进行消费,进行一个流程性的介绍,希望能够对kafka有个基本的了解
首先,我们如何向kafka发送消息的呢?
其中 客户端的代码连接到kafka集群地址,设置所有的消息都需要ack返回,重试次数为0等信息。生成消息生产者producer,producer连接到Kafka集群,根据消息进行分区计算,将消息发送leader分区的broker。
那么如何进行分区确定?
如何寻找到leader分区,如何感知leader分区的变化?
如何确保消息发送的可靠性?
消息分区的确定:
其中ProducerRecord,就提供了参数,让生产者对消息指定分区
<1> 若指定Partition ID,则ProducerRecord被发送至指定Partition
<2> 若未指定Partition ID,但指定了Key, ProducerRecord会按照hasy(key)发送至对应Partition
<3> 若既未指定Partition ID也没指定Key,ProducerRecord会按照round-robin模式发送到每个Partition
<4> 若同时指定了Partition ID和Key, ProducerRecord只会发送到指定的Partition (Key不起作用,代码逻辑决定)
寻找分区leader
当生产者发送消息失败(分区消失,不可用),生产者会更新topic分区元信息,
正常情况下,每隔topic.metadata.refresh.interval.ms(缺省10分钟)去轮询分区变化。在生产者的代码中
消息发送的可靠性
props.put(“acks”,”all”) ,这个acks作为消息发送的可靠性重要的参数,
acks=0 生产者不会等待broker的任何确认,消息会被立即添加到缓冲区并被认为已经发送
acks=1,在leader服务器的副本收到消息的同一时间,生产者会接收到broker的确认
acks=all(或-1),一旦所有的同步副本接收到消息,生产者才会接收到broker的确认。这是最安全的模式。
以上是kafka发送消息流程的一些思考和总结
Kafka作为一个常用消息中间件,他具备很多优秀的特点,在此,文章从消息的发送到kafka存储,然后到消费方进行消费,进行一个流程性的介绍,希望能够对kafka有个基本的了解 首先,我们如何向kafka发送消息的呢? 其中 客户端的代码连接到kafka集群地址,设置所有的消息都需要ack返回,重试次数为0等信息。生成消息生产者producer,producer连接到Kafka集群,根据消息进行分区计算,将消息发送leader分区的broker。 那么如何进行分区确定? 如何寻找到leader分区,如何感知leader分区的变化? 如何确保消息发送的可靠性? 消息分区的确定: 其中ProducerRecord,就提供了参数,让生产者对消息指定分区 <1> 若指定Partition ID,则ProducerRecord被发送至指定Partition <2> 若未指定Partition ID,但指定了Key, ProducerRecord会按照hasy(key)发送至对应Partition <3> 若既未指定Partition ID也没指定Key,ProducerRecord会按照round-robin模式发送到每个Partition <4> 若同时指定了Partition ID和Key, ProducerRecord只会发送到指定的Partition (Key不起作用,代码逻辑决定) 寻找分区leader 当生产者发送消息失败(分区消失,不可用),生产者会更新topic分区元信息, 正常情况下,每隔topic.metadata.refresh.interval.ms(缺省10分钟)去轮询分区变化。在生产者的代码中 消息发送的可靠性 props.put(“acks”,”all”) ,这个acks作为消息发送的可靠性重要的参数, acks=0 生产者不会等待broker的任何确认,消息会被立即添加到缓冲区并被认为已经发送 acks=1,在leader服务器的副本收到消息的同一时间,生产者会接收到broker的确认 acks=all(或-1),一旦所有的同步副本接收到消息,生产者才会接收到broker的确认。这是最安全的模式。 以上是kafka发送消息流程的一些思考和总结