Skip to content
killme2008 edited this page Apr 13, 2012 · 30 revisions

##如何保证消息不丢?

  • Meta的所有消息都将写入磁盘,没有区分所谓持久消息和非持久消息,所有消息都是持久的
  • 生产者在发送消息的时候,服务端只在将消息写入磁盘的情况下才会返回应答给生产者告知消息写入成功
  • 消费者在消费消息后,消息也不会删除,而是按照设定的过期处理策略进行批量处理,与任何消费者无关。消费者可在任何时候进行消费,也就是没有区分持久订阅和非持久订阅,都是持久订阅。
  • 写入磁盘的消息,其实是写入os缓冲区,可根据你对数据可靠性的要求设定sync策略。参考《服务端配置管理》
  • 单机broker可能因为磁盘损坏等硬件故障永久丢失消息,meta还提供了高可用的HA复制方案,通过将消息复制到多个broker来提高数据可靠性。参考HA复制配置

##如何发送任意topic?

消息生产者在发送消息前必须publish要发送的topic,这是为了从zookeeper查找到提供该topic服务的broker。如果你想发送任意的topic类型到broker,你可以这样做:

  • 定义一个topic为*
  • 保证*numPartitions跟[system]模块配置的一致,生产者发送的任意topic都将默认使用[system]配置的分区数,而发送端在发送前选择分区依赖的是*的分区数,因此需要保证两者相等。
  • 消息生产者设置默认topic为*,设置的方法是MessageProducersetDefaultTopic方法,但是Message的topic即可为任意topic。

##如何配置异步复制?

参考HA复制配置

##为什么重写kafka,meta相比于kafka有什么异同?

参考meta介绍

##如何优化metamorphosis性能?

TODO

Clone this wiki locally