`
wbj0110
  • 浏览: 1610663 次
  • 性别: Icon_minigender_1
  • 来自: 上海
文章分类
社区版块
存档分类
最新评论

Faq of metaq

阅读更多

采用pull模型,消息的实时性有保证吗?

Metamorphosis在消费端采用pull的模型,consumer主动去broker拉取数据,而不是类似大多数MQ那样由broker主动push数据给消费者。可能很多人担心采用pull模型后,会不会消息的实时性降低了,从发送到消费的整个时间周期拉长了。

实际上,meta中消息的实时性受很多因素影响,不能简单地说实时性一定会降低,主要影响因素如下

  • broker上配置的批量force消息的阈值,默认是1000条force一次。这个值越大,则实时性越低。
  • 消费者每次抓取的数据大小,这个值越大,则实时性越低,但是吞吐量越高。
  • Topic的分区数目对实时性也有较大影响,分区数目越多,则磁盘压力越大,导致消息投递的实时性降低。
  • 消费者重试抓取的时间间隔,越长则延迟越严重。
  • 消费者抓取数据的线程数

可见,消息实时性在meta里受到很多因素的影响,meta可以让用户自己决定如何在响应性和吞吐量之间做平衡,通过配置来合理设置参数,达到应用方需要的实时性,实际测试,消息消费的延迟可以在几毫秒到几秒之间。

服务器相关参数见服务器管理配置

客户端相关参数见javadoc

Metamorphosis怎么做到环境隔离?

不同环境使用不同的zookeeper即可实现隔离,或者使用同一个zookeeper集群,但是设置不同的zkRoot(zk根路径名)也可以实现隔离。

如何保证消息不丢?

  • 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:

    producer.setDefaultTopic("*");

切记:不要publish任何要发送消息的topic,否则将进入正常发送流程,导致找不到分区可用。

如何配置服务器集群?

Broker集群配置非常容易,假设你已经按照如何开始和服务器配置管理配置好并启用了你第一台broker,某一天你发现这个单台broker无法支撑更大的消息量,那么你可能就需要引入更多的broker作为集群来提供服务,你要做的事情很简单:

  • 拷贝broker1的配置文件conf/server.ini到新的broker,假设为broker2。
  • 修改broker2的server.ini中的brokerId配置,赋一个不同于broker1的brokerId。
  • 启动broker2,这样一来broker2将和broker1组成一个服务器集群
  • 在这个过程中你不需要重启任何现有的服务,包括生产者、消费者和broker1,他们都将自动感知到新的broker2

可见,配置一个集群唯一要做的就是使用同一份配置文件并定义不同的brokerId即可。

多网卡机器如何指定服务器使用IP?

默认服务器会绑定到所有网卡上的IP,但是只会注册一个地址到zookeeper,这个注册地址可以通过server.ini配置文件里的hostName指定:

hostName = x.x.x.x

生产者重复publish同一个topic会影响性能吗?

不会,因为pusblish内部有做缓存,如果判断是重复publish会立刻返回。

如何配置异步复制?

参考HA复制配置

如何不重启新增Topic?也就是如何热加载配置文件?

在新增或者删除topic并保存server.ini之后,可以通过下列命令热加载新的配置文件并生效:

 bin/metaServer.sh reload

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

参考meta介绍

删除消息数据后,如何更新zookeeper上保存的offset信息?

删除消息数据,可以简单地删除MetaQ的数据目录,但是如果没有更新zookeeper上的offset(默认消费者信息是保存做zookeeper上),那么消费者将无法消费到新的消息。通常不建议人工删除数据目录,但是做开发的时候可能常常需要手工清理环境,MetaQ支持Broker告诉消费者最新的offset信息并更新,通过加入broker的环境变量(修改env.sh或者env.bat的JVM参数):

 -Dmeta.get.tellMaxOffset=true

将启用此功能。默认该选项是关闭的,主要原因是考虑到master-slave配置下,很可能消费者先从master消费,做重新负载均衡后可能从slave消费,因为master的消息可能比slave多(因为复制延迟的存在),那么消费者的offset在master上的会比在slave上的大,从slave消费的时候会被更新offset(缩小),导致消息的重复消费,因此这个选项默认被关闭。

如何做消息去重?

MetaQ并不保证消息不会被重复消费,因此消费端需要自己处理消息重复的问题。通常有这么几种解决方案,都是基于message id的唯一性做去重:

  • 内存内维护一个LRU map,保存最近消费的message id,消费成功的消息id放入缓存,每次消费前判断消息id是否在缓存内存在。
  • 不使用LRU map,而是使用布隆过滤器。
  • 不使用内存内缓存,而是使用集中式缓存,比如memcached,redis等。

从1.4.6开始,我们提供了MessageIdCache接口用于统一做消息去重,具体见Java客户端高级主题一节。

如何针对特定消费分组做消息过滤?

我只是想消费topic下的部分满足条件的消息,也就是消息过滤,具体见 Java客户端高级主题一节

如何将MetaQ作为Twitter Storm的Spout数据源?

参见Java客户端高级主题

如何优化metamorphosis性能?

转自 metaq's wiki https://github.com/killme2008/Metamorphosis/wiki/Faq-chinese

分享到:
评论

相关推荐

    metamorphosis(metaq)

    《Metamorphosis (MetaQ) 服务端1.4.3版本详解及客户端使用》 Metamorphosis,简称MetaQ,是一款高效、稳定、可扩展的消息队列系统,由阿里巴巴开发并开源,主要用于解决分布式环境下的异步处理、解耦以及数据传输...

    Metaq原理与应用

    Metaq 是一种高性能、高可用的消息中间件,其设计灵感来源于 Kafka,但并不严格遵循任何特定的规范,如 JMS(Java Message Service)或 CORBA Notification 规范。Metaq 提供了丰富的特性来解决 Messaging System 中...

    metaQ向spark传数据

    在大数据处理领域,MetaQ和Spark是两个非常关键的组件。MetaQ是腾讯开源的一款分布式消息中间件,常用于实时数据处理系统中的消息传递。而Spark则是一个强大的、通用的并行计算框架,专为大数据分析设计,尤其擅长...

    metaq-server-1.4.6.2客户端+服务端

    MetaQ是阿里巴巴开源的一款分布式消息中间件,它主要用于在大规模分布式系统中提供高效、可靠的消息传递服务。MetaQ Server 1.4.6.2版本是这个中间件的一个特定发行版,包含了服务端和客户端的组件,以及相关的...

    metaq-server-1.4.6.2.tar.gz

    《MetaQ服务器1.4.6.2版的深度解析》 MetaQ是阿里巴巴开源的一款分布式消息中间件,主要用于提供高可靠、高可用的消息传输服务。在本文中,我们将深入探讨MetaQ Server 1.4.6.2版本的核心特性、架构设计以及使用...

    Metaq在JDk 7下的异常及解决方案

    《Metaq在JDK 7下的异常及其解决策略》 Metaq是一款高性能的消息中间件,广泛应用于分布式系统中,提供高效、稳定的消息传递服务。然而,在JDK 7环境下,Metaq可能会遇到一些运行异常,其中最常见的就是与物理文件...

    metaq-server-1.4.6.2.zip 和原版一样就是换了个名字

    《MetaQ服务器1.4.6.2版本详解》 MetaQ是阿里巴巴开源的一款分布式消息中间件,主要用于解决大规模分布式系统中的消息传递问题。在1.4.6.2这个版本中,它继续保持着与原版一致的核心特性,提供高效、稳定、可扩展的...

    Metaq详细手册.docx

    《Metaq详细手册》 Metaq,源自LinkedIn的开源消息中间件Kafka的Java实现——Memorphosis,针对淘宝内部的应用需求进行了定制和优化。它遵循一系列设计原则,旨在提供高效、可靠且灵活的消息传递服务。 1. **消息...

    MetaQ 分布式消息服务中间件.pdf

    MetaQ是一款分布式消息服务中间件,其核心功能基于发布-订阅模型。在这一模型中,发布者(Producer)将消息发布到MetaQ,MetaQ会储存这些消息,而订阅者(Consumer)则通过pull方式来消费这些消息。具体而言,消费者...

    metaq消息中间件服务端、客户端资源汇集

    Metamorphosis是淘宝开源的一个Java消息中间件,他类似apache-kafka,但不是一个简单的山寨拷贝,而是做了很多改进和优化,项目的主页在淘蝌蚪上。服务端、客户端、javadoc都包含在内。

    metaQ的安装包

    MetaQ,全称为“Meta Message Queue”,是阿里巴巴开源的一款分布式消息中间件,主要用于解决大规模分布式系统中的消息传递问题。MetaQ 提供了高可用、高可靠的消息服务,支持多种消息模型,如点对点(Point-to-...

    阿里消息中间件MetaQ学习Demo.zip

    阿里消息中间件MetaQ学习Demo

    支付宝之所以牛逼的原因:来看内部架构剖析

    Metamorphosis(MetaQ)是一个高性能、高可用、可扩展的分布式消息中间件,类似于LinkedIn的Kafka,具有消息存储顺序写、吞吐量大和支持本地和XA事务等特性,适用于大吞吐量、顺序消息、广播和日志数据传输等场景,在...

    阿里rocketMQ

    阿里RocketMQ是一款开源的消息中间件,它在阿里巴巴集团内部广泛使用,并且被社区接纳成为Apache顶级项目。RocketMQ的设计目标是提供低延迟、高可靠、高可扩展的消息传递服务,适用于大规模分布式系统中的消息通讯。...

    支付宝钱包系统架构内部剖析(架构图)

    - **透明协议设计**:MetaQ采用了文本协议设计,这种设计使得MetaQ的操作更加直观易懂,便于开发者进行监控和调试。 - **纯Java实现**:无论是通信层还是存储层,MetaQ均使用Java语言实现,这对于支付宝这样的大型...

    Metamorphosis, 一种高可用高性能的分布式.zip

    Metamorphosis, 一种高可用高性能的分布式 #新闻MetaQ 1.4.6.2 发布。更新日志MetaQ 1.4.6.1 发布。更新日志MetaQ 1.4.5.1 发布。更新日志MetaQ 1.4.5发布。更新日志meta: 一个用于的ruby 客户端。 源代码

    Storm项目:流数据监控(下)

    该文档为storm模拟项目系列文档之一,是MetaQ与storm接口的说明文档,主要介绍了如何集成MetaQ到项目代码中。软件(阿里),其对应的许多技术文档还是比较容易看的,并且Github提供了许多的应用实例,所以使用MetaQ...

Global site tag (gtag.js) - Google Analytics