One minute
Pulsar Client Producer
这篇文章会对 producer 进行分析.
入口
这里通过org.apache.pulsar.client.tutorial.SampleProducer#main进行分析.
producer client impl
主要有 ProducerImpl 和 PartitionedProducerImpl 两种,
- ProducerImpl
- 实例化后, 会创建连接, 触发CONNECT、PRODUCER command
- 简单的直接发送消息
- PartitionedProducerImpl
- 实例化的时候, 遍历partition实例化producer, 并监听partition变化.
- 发送消息时, 通过partition router选择指定的producer进行发送
初始化
先弄清几个概念, broker有两种角色, 如下
- 充当Lookup服务的broker
- topic owner broker
-
在充当Lookup服务的broker, 可以通过提供 域名 + http服务 实现元数据的管理, 也可以通过 broker的二进制协议实现, 无论是 http协议服务, 还是二进制协议服务, 都只是服务的交互方式, 真正的元数据是存在zk中的
-
topic owner broker 只做一件事情, 就是负责处理topic生产的消息, 进行消息的存储和分发.
所以, producer创建的时候, 先连接到Lookup服务, 通过Lookup服务查询到topic的owner broker, 然后连接到 topic owner broker进行消息的发送.
faq
- topic partition发生变更了怎么办? producer无法感知, 需要重启.
总结
- 无
不足
- 无
71 Words
2019-03-03 14:43 +0800