2 基本概念
基本概念
如图是Talos的架构图,Producer持续地生产消息并发送给指定Topic,Consumer从Topic中读取消息进行消费;Topic中的消息分布在不同的Partition里。
Topic & Partition
Topic即逻辑上的消息队列,由一个或多个partition组成;partition的个数决定了Topic的最大并发度;
Topic创建时需要指定partition的个数,Topic创建后partition只能增加不能减少。
【注】:Partition个数的指定,请用户参照如下的标准来设置,每个partition允许最大512K/s的写,最大1M/s的读,请用户根据业务的数据量来合理设置partition个数;
TopicName & TopicTalosResourceName
TopicName即Topic的名字,创建时指定,某一时刻系统中相同TopicName的Topic只能有一个。
TopicTalosResourceName是Topic创建后的唯一标识,请用户注意,创建一个topic,然后删除,再创建一个同名topic,它们的TopicTalosResourceName是不同的。
Topic创建后,后续的读写操作都使用TopicTalosResourceName作为唯一标识。
TopicTalosResourceName的组成格式:
developerId#topicName#UUID
TalosAdmin
TalosAdmin是Talos的数据控制接口,用来进行Topic的创建/删除等DDL操作,详细信息参考TalosAdmin API
SimpleProducer
SimpleProducer是发送数据的同步接口,每个SimpleProducer只对应一个partition,详细信息可参见SimpleProducer API。
SimpleConsumer
SimpleConsumer是消费数据的同步接口,每个SimpleConsumer只对应一个partition,详细信息可参见SimpleConsumer API
【注】:SimpleProducer和SimpleConsumer是Talos提供数据读写的低阶API,它们都是以同步的方式发送/读取数据;与之相对应的,Talos也提供了一套高阶API,即TalosProducer和TalosConsumer,它们都是以异步的方式发送/读取数据。
TalosProducer
TalosProducer是发送数据的高阶API,它会根据Topic的partition个数构造相应数目的线程发送数据,每个线程会有一个队列用来缓存用户数据;TalosProducer采用异步方式,支持用户注册回调来处理发送消息的结果;
关键点
- PartitionKey
如果用户在Message中指定PartitionKey,则TalosProducer会将PartitionKey映射成一个32位正整数,然后根据这个整数分配到相应的partition
如果用户在Message中没有指定PartitionKey,则TalosProducer会为Message随机指定一个partitionId,指定partitionId的策略是可configurable的,具体可以参见TalosProducer API与配置中可选配置项的场景4
- Buffer
如上所述,TalosProducer是异步方式,会将用户的消息缓存在队列中,需要注意的是,如果client进程挂掉,buffer中的数据是会丢失的,请使用高阶API的用户知悉;
TalosConsumer
TalosConsumer是消费数据的高阶API,它会自动进行Re-Balancer
;自动进行消息的Commit
,用户也可以通过配置自己控制消息的commit;关于TalosConsumer有一些关键概念需要清楚,具体如下:
- TalosConsumer & ConsumerGroup
每个TalosConsumer属于一个特定的consumer group,初始化的时候会指定ConsumerGroup的名字,需要注意的是,某个Topic的某个partition同一时刻只能被同一consumer group内的一个consumer消费,但多个consumer group可同时消费这个partition;
如图所示,partition 1
正在被consumer group A
中的Consumer-1
消费,那么consumer group A
中的Consumer-2
就无法消费partition 1
;而图右边所示,partition 1
可以同时被consumer group A
中的Consumer-1
和consumer group B
中的Consumer-1
消费。
- Re-Balancer
Re-Balance
的意思是TalosConsumer会根据用户启动的实例个数来自动分配对Topic partition的消费,如果TalosConsumer实例个数发生变化时,即出现TalosConsumer的上下线,它会自动感知,并对Partition的分配进行重新计算;
如图所示,开始时只有一个TalosConsumer-1
进程,该Topic的5个partition全部被TalosConsumer-1
消费,当用户又启动了另一个相同consumer group的consumer实例,即TalosConsumer-2
上线后,TalosConsumer-1
会自动感知到TalosConsumer-2
的上线,并通过算法释放出2个partition,TalosConsumer-2
会接手消费被TalosConsumer-1
释放的2个partition;
关于TalosConsumer的详细介绍以及如何自己控制消息的commit逻辑请参考TalosConsumer API