多partition模式:
9.5.3.28.2版本之后,kafka consumer同步支持多partition。该功能由参数gcluster_kafka_consumer_support_multi_partition控制,1开启,0关闭。开启此参数后,创建和启动consumer时会自动获取kafka端topic的partition数量,在information_schema.kafka_consumer_status等系统表里会展示相关信息。不开启此参数,对partition数>1的topic创建transaction consumer时会报错。
使用此模式时,要保证每个partition里的数据不存在主键上的交集,因为consumer对于每个partition不是顺序消费而是随机的,因此不能保证每个dml操作的先后顺序,若是主键存在交集会导致每次入库的结果都不一致,使用时需要谨慎。
对于重复消息的判断,各个partition之间是独立的,例如三个partition都出现了pos号为00000000010000000001的json消息,那么这三条消息都会被消费。但是在计算dml提交总数时,是计算的总和,例如设置gcluster_kafka_batch_commit_dml_count=100000,那么一次提交的dml操作数量是三个partition加起来100000。
kafka_consumer_statistics表:
开启gcluster_kafka_consumer_latency_time_statistics参数(设置为1),便可使kafka_consumer_statistics表记录一批dml操作的开始和提交时间,以便观察性能数据。更新多partition版本后,此表不再记录批次数据,只显示延迟时间。
gbase> desc information_schema.kafka_consumer_statistics;
+-------------+--------------+------+-----+---------------------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------------+--------------+------+-----+---------------------+-------+
| CONSUMER | varchar(128) | NO | | | |
| IP | varchar(64) | NO | | | |
| START_TIME | datetime | NO | | 0000-00-00 00:00:00 | |
| COMMIT_TIME | datetime | NO | | 0000-00-00 00:00:00 | |
| I | bigint(21) | NO | | 0 | |
| D | bigint(21) | NO | | 0 | |
| U | bigint(21) | NO | | 0 | |
+-------------+--------------+------+-----+---------------------+-------+
7 rows in set (Elapsed: 00:00:00.01)