kafka producer 发送消息简介

本文深入探讨了Kafka中主题(topic)的概念及其组成部分——分区(partition)。详细介绍了生产者(producer)如何根据消息的key选择特定的分区进行消息发送,并解释了分区的副本(replica)机制,包括leader和follower的角色。通过实例分析,展示了在一个由三个节点组成的Kafka集群中,一个具有单一分区的主题如何工作,以及生产者如何确定并连接到正确的leader分区。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

kafka 的 topic 由 partition 组成,producer 会根据 key,选择一个 partition 发送消息,而 partition 有多个副本,副本有 leader 和 follower 之分,producer 需要把消息发送到 partition 的 leader。

背景:kafka 集群由 3 个节点组成(node1,node2,node3,其中 node3 是 controller),存在名为 idea-zhang 的 topic,只有一个 partition, partition 的副本数是2。

流程图如下:

重要日志如下:

Initialize connection to node 10.253.114.163:9092 (id: -1 rack: null) for sending metadata request (org.apache.kafka.clients.NetworkClient)
Sending metadata request (type=MetadataRequest, topics=idea-zhang) to node 10.253.114.163:9092 (id: -1 rack: null) (org.apache.kafka.clients.NetworkClient)

Completed receive from node -1 for METADATA with correlation id 1, received 
{
	throttle_time_ms = 0,
	brokers = [{
		node_id = 2,
		host = 10.253.162.17,
		port = 9092,
		rack = null
	},
	{
		node_id = 1,
		host = 10.253.160.154,
		port = 9092,
		rack = null
	},
	{
		node_id = 3,
		host = 10.253.114.163,
		port = 9092,
		rack = null
	}],
	cluster_id = oX31KEPESLeIWHz7BgJv7g,
	controller_id = 3,
	topic_metadata = [{
		error_code = 0,
		topic = idea-zhang,
		is_internal = false,
		partition_metadata = [{
			error_code = 0,
			partition = 0,
			leader = 2,
			replicas = [2, 3],
			isr = [2, 3]
		}]
	}]
}
 (org.apache.kafka.clients.NetworkClient)
 
 Initiating connection to node 10.253.162.17:9092 (id: 2 rack: null) (org.apache.kafka.clients.NetworkClient)
 
 Sending record ProducerRecord(topic=idea-zhang, partition=null, headers=RecordHeaders(headers = [], isReadOnly = true), key=1, value=Message_1, timestamp=null) with callback null to topic idea-zhang partition 0 (org.apache.kafka.clients.producer.KafkaProducer)

 

转载于:https://www.cnblogs.com/allenwas3/p/9681783.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值