Xiaomi Galaxy Talos Book

Talos常见问题


为什么要使用Talos,从Kafka迁移过来对用户有什么好处?

  • Talos提供完善的认证/授权机制,细粒度的权限访问控制,保证多租户下的数据安全/隔离,解决Kafka数据不安全的痛点
  • Talos底层基于Hdfs,可以保证数据不丢失,解决Kafka可能丢数据的痛点
  • Talos提供良好的故障迁移和负载均衡机制,解决Kafka failover的rebalance痛点
  • Talos提供Rest接口,既可以满足公司内部用户,也可以满足小米生态链用户
  • Talos易运维,出现问题可以快速响应,解决Kafka运维复杂的痛点

关于数据重复:Talos提供more than once的语义,什么情况下是会出现more than once呢?

Producer Timeout时,可能会出现
  • 当用户向Talos写数据时,如果因为Timeout而返回写失败,比较小的概率可能Server端已经写成功了,这种情况下client端重试会导致数据写入duplicate;
Consumer Failover时,没有commit或commit失败
  • 用户使用High Level Consumer过程中,例如用户实例化了两个TalosConsumer的实例A,B;假设A在消费partition数据的时候被杀死了或者机器宕机了,这时候A消费的数据的checkpoint还没有来得及commit,而后B接管了A之前所消费的partition,B就会重复消费那部分A在挂掉之前已经消费但是没有commit的数据,这时候出现more than once;

  • 用户使用High Level Consumer过程中,当多个Consumer出现上下线的时候,Consumer之间会进行Rebalance,即重新分配partition;假设Consumer A原来消费partition [1,2,3],当有其他Consumer上线时,A需要释放partition 1,此时,A会将已经消费的partition 1的数据进行commit,commit发生失败的情况下会出现more than once;commit失败的原因可能是:1) Consumer A已经丢掉了partition 1的锁而无法commit,例如gc或网络原因导致丢锁; 2) Consumer A commit的时候写HBase发生错误导致失败,这种情况的概率比较小,且server端会有重试的逻辑;Commit失败后,其他Consumer接管这个partition就会重复消费A之前已经消费的那部分数据;

关于数据完整性:Talos会丢数据吗?

简单来讲,Talos返回写入成功的数据,我们承诺不丢;某些场景下,用户还没有写入的数据可能会丢,请知悉

  • 当用户使用Simple Producer(同步接口)时,如返回写成功,承诺不丢;

  • 当用户使用High Level的TalosProducer(异步接口)时,成功执行用户回调的onSuccess时,承诺不丢;

  • 当用户使用用High Level的TalosProducer(异步接口)时,进程挂了或被杀掉,buffer中还未写入的数据会丢;