使用kafka consumer需要按照如下方式进行配置,可变更参数的配置参考补充说明。
1. 配置gcluster参数
/opt/gcluster/config/gbase_8a_gcluster.cnf _gbase_transaction_disable=1(注意一定不要用0) gcluster_lock_level=10(不建议用2) _gcluster_insert_cache_buffer_flag=1 gcluster_assign_kafka_topic_period=20 gcluster_kafka_max_message_size=1000000 gcluster_kafka_batch_commit_dml_count=100000 gcluster_kafka_local_queue_size=210000 gcluster_kafka_consume_batch=100 gcluster_kafka_user_allowed_max_latency=15 |
说明(可变更参数)
l gcluster_assign_kafka_topic_period,自动接管consumer的时间周期,单位为秒,例如A节点宕机了,最大需要等待gcluster_assign_kafka_topic_period秒之后,A节点负责的同步任务会被其他节点接管。最小值20s,最大值120s。
l gcluster_kafka_max_message_size,从kafka topic获得消息的最大长度,单位为字节,最大值1000000000字节,这个值需要大于等于kafka server的配置(message.max.bytes),否则可能造成消费问题,即,如果kafka队列中存在一条消息,其大小超过gcluster_kafka_max_message_size就会造成消费卡住。
l gcluster_kafka_batch_commit_dml_count,一次提交dml操作的数量,适当调大能明显提高性能,但是如果一个topic涉及的表很多(几百个表)则建议该参数调小,表越多越应该调小,调小的目的是使得一次提交命中的表少一些,具体需要结合具体用户场景、同步速度、资源占用情况具体对待。 未来启用新事务后,表数量多对性能的影响会降低,会再次更新手册。需要注意的是,此参数是一个意向值,程序未必会严格按照此参数来提交,比如如果一个事务包含大量DML操作,那么程序必须确保事务完整性;再比如从kafka取消息、解析消息的速度慢于往单机提交数据的速度,那么程序也会选择先提交,而不是一定要等待满足gcluster_kafka_batch_commit_dml_count参数。
l gcluster_kafka_user_allowed_max_latency,允许消息在8A集群层缓存多长时间,超时之后必须马上提交,单位是毫秒。此参数与gcluster_kafka_batch_commit_dml_count作用类似,都是决定什么时候提交的。多攒一些数据再提交,有利于降低磁盘占用,如果用户对数据延迟不太敏感,而对磁盘占用比较敏感,可以通过这个参数来调节。典型值一般可以设置为50000~20000,需要注意提交动作本身也需要消耗时间。
l gcluster_kafka_local_queue_size,储存dml操作的队列的长度,建议至少为gcluster_kafka_batch_commit_dml_count的二倍多一些。
l gcluster_kafka_consume_batch,consumer一次读取kafka消息的条数。如果kafka队列里的消息size较小,可以设大,反之设小,此参数对性能的影响不大,所以一般没必要设太大,建议设为10~1000。
2. 配置gnode参数
/opt/gnode/config/gbase_8a_gbase.cnf _gbase_transaction_disable=1(注意一定不要用0) gbase_tx_log_mode=ONLY_SPECIFY_USE(注意一定不要用USE,STANDARD_TRANS) gbase_buffer_insert=1024M gbase_tx_log_flush_time=5 |
说明(可变更参数)
l gbase_buffer_insert,insert buffer的大小,随gcluster_kafka_batch_commit_dml_count的设置进行调整,如果数据量大,且consumer任务多,建议调大。需要保证单机insert buffer足够,否则会导致异常。
l gbase_tx_log_flush_time,单机内存数据刷新频率,单位为秒。建议设为5秒。
注意 l 如果现场之前使用的是"gbase_tx_log_mode=USE,STANDARD_ TRANS"这种配置(之前开发过程中使用事务模式的配置,后面已放弃这种配置),则在修改参数“gbase_tx_log_mode= ONLY_SPECIFY_USE”后,最好把之前同步数据涉及的表重导一遍数据(否则可能会报错)。如果数据量较大也可以配置gnode参数"_gbase_bsi_check_ disable=1"绕过这个检查报错逻辑(这种情况产生的报错并不会造成什么问题。关掉检查的缺点是可能会在后面如果有其他bug引起错误后,无法及时报错。) l 各节点的配置都要一致,只改动部分节点可能产生未知错误。 |