hadoopde mapr
MapR Streams是一个新的分布式消息传递系统,用于大规模流式传输事件数据,并且已集成到MapR融合平台中。 MapR Streams使用Apache Kafka API,因此,如果您已经熟悉Kafka,就会发现开始使用MapR Streams特别容易。
尽管MapR Streams通常使用Apache Kafka编程模型 ,但仍存在一些关键差异。 例如,在MapR文件系统中有一种新的对象,称为对象流。 每个流都可以处理大量主题,并且在一个群集中可以有许多流。 可以在流级别设置诸如生存时间或ACE(访问控制表达式)之类的策略,以便一起方便地管理许多主题。 您可以在新的短本《 流式体系结构:使用Apache Kafka和MapR流的新设计》中找到有关使用Kafka和MapR Streams的流体系结构的更多信息,可从MapR网站免费下载。
如果您已经拥有Kafka应用程序,则很容易将它们迁移到MapR Streams。 您可以在http://maprdocs.mapr.com/51/的MapR文档中找到更多信息– MapR_Streams / migrating_kafka_applications_to_mapr_streams.html
在当前博客中,我们描述了如何使用MapR Streams运行最初为Kafka编写的简单应用程序。
样例程序
如上所述,MapR Streams使用Kafka API 0.9.0 ,这意味着可以在进行较小更改的情况下重用同一应用程序。 在深入探讨具体示例之前,让我们看一下必须更改的内容:
- 主题名称从“
topic-name
”更改为“/stream-name:topic-name
”,因为出于管理原因(安全性,TTL等),MapR在流中组织了主题。 - MapR流未使用的生产者和使用者配置参数将被自动忽略,因此此处未做任何更改。
- 生产者和消费者应用程序正在使用MapR中的jar,而不是Apache Kafka jar。
您可以在“ MapR流示例程序”页面上找到完整的应用程序 。 这是一个简单的副本,其中包括对Kafka 0.9 API项目的示例程序的较小更改。 这卡夫卡项目已经证明这文章 。
先决条件
您将需要基本的Java编程技能以及访问权限:
- 正在运行的MapR 5.1 群集或沙盒
- Apache Maven 3.0或更高版本
- Git克隆https://github.com/mapr-demos/mapr-streams-sample-programs存储库
运行您的第一个MapR Streams应用程序
步骤1:建立串流
流是可以通过以下方式一起管理的主题的集合:
- 设置适用于该流中所有主题的安全策略
- 为流中创建的每个新主题设置默认的分区数
- 为流中每个主题的消息设置生存时间
您可以在文档中找到有关MapR Streams概念的更多信息。
在MapR集群上,以mapr
用户身份运行以下命令:
$ maprcli stream create -path /sample-stream
缺省情况下,生产和消费主题权限默认为流的创建者—您用于运行maprcli命令的Unix用户。 可以通过编辑流来配置权限。 例如,要使所有人都能使用所有主题(公共权限),可以运行以下命令:
$ maprcli stream edit -path /sample-stream -produceperm p -consumeperm p -topicperm p
步骤2:建立主题
对于示例程序,我们需要两个主题,可以使用maprcli
创建maprcli
:
$ maprcli stream topic create -path /sample-stream -topic fast-messages
$ maprcli stream topic create -path /sample-stream -topic summary-markers
可以使用以下命令列出这些主题:
$ maprcli stream topic list -path /sample-stream
topic partitions logicalsize consumers maxlag physicalsize
fast-messages 1 0 0 0 0
summary-markers 1 0 0 0 0
请注意,如果该主题尚不存在,该程序将自动创建该主题。 对于您的应用程序,您应该决定让程序仅通过提及主题来自动创建主题会更好还是严格控制存在的主题会更好。
步骤3:编译并打包示例程序
返回到包含示例程序的目录,并构建示例程序。
$ cd ..
$ mvn package
...
该项目创建一个具有所有外部依赖项的jar( ./target/mapr-streams-examples-1.0-SNAPSHOT-jar-with-dependencies.jar
jar-with-dependencies.jar)
请注意,只要您在运行和部署Apache Kafka依赖项时不将其打包到应用程序中,就可以构建该项目。 此示例依赖于MapR Streams客户端,而后者可以在mapr.com
maven存储库中找到。
<repositories>
<repository>
<id>mapr-maven</id>
<url>http://repository.mapr.com/maven</url>
<releases><enabled>true</enabled></releases>
<snapshots><enabled>false</enabled></snapshots>
</repository>
</repositories>
...
<dependency>
<groupId>org.apache.kafka</groupId>
<artifactId>kafka-clients</artifactId>
<version>0.9.0.0-mapr-1602</version>
<scope>provided</scope>
</dependency>
...
步骤4:运行示例生产者
您可以安装MapR Client并在本地运行该应用程序,也可以将jar文件复制到您的集群(任何节点)上。
$ scp ./target/mapr-streams-examples-1.0-SNAPSHOT-jar-with-dependencies.jar mapr@<YOUR_MAPR_CLUSTER>:/home/mapr
生产者将向/sample-stream:fast-messages
发送大量消息,并向/sample-stream:summary-markers
/sample-stream:fast-messages
偶尔的消息。 由于尚未运行任何使用者,因此没有人会收到消息。
如果将此与用于构建此应用程序的Kafka示例进行比较,则主题名称是对代码的唯一更改。
任何MapR Streams应用程序都将需要MapR Client库。 一种使用/opt/mapr/bin/mapr classpath
命令使这些库可用于将它们添加到应用程序类路径的方法。 例如:
$ java -cp $(mapr classpath):./mapr-streams-examples-1.0-SNAPSHOT-jar-with-dependencies.jar com.mapr.examples.Run producer
Sent msg number 0
Sent msg number 1000
...
Sent msg number 998000
Sent msg number 999000
Apache Kafka应用程序和MapR Streams应用程序之间唯一重要的区别是客户端库是不同的。 这将导致MapR生产者连接到MapR群集以发布消息,而不是Kafka代理。
步骤5:启动示例使用者
在另一个窗口中,可以使用以下命令运行使用者:
$ java -cp $(mapr classpath):./mapr-streams-examples-1.0-SNAPSHOT-jar-with-dependencies.jar com.mapr.examples.Run consumer
1 messages received in period, latency(min, max, avg, 99%) = 20352, 20479, 20416.0, 20479 (ms)
1 messages received overall, latency(min, max, avg, 99%) = 20352, 20479, 20416.0, 20479 (ms)
1000 messages received in period, latency(min, max, avg, 99%) = 19840, 20095, 19968.3, 20095 (ms)
1001 messages received overall, latency(min, max, avg, 99%) = 19840, 20479, 19968.7, 20095 (ms)
...
1000 messages received in period, latency(min, max, avg, 99%) = 12032, 12159, 12119.4, 12159 (ms)
<998001 messages received overall, latency(min, max, avg, 99%) = 12032, 20479, 15073.9, 19583 (ms)
1000 messages received in period, latency(min, max, avg, 99%) = 12032, 12095, 12064.0, 12095 (ms)
999001 messages received overall, latency(min, max, avg, 99%) = 12032, 20479, 15070.9, 19583 (ms)
请注意,摘要中列出了消息批次的等待时间。 这是因为在将消息发送到MapR Streams时,使用者没有在运行,因此只有在消息发送很久以后才获取消息。
监控主题
您可以随时使用maprcli工具获取有关该主题的一些信息。 例如:
$ maprcli stream topic info -path /sample-stream -topic fast-messages -json
-json
选项用于将主题信息作为JSON文档获取。
打扫干净
播放完毕后,可以使用以下命令删除流和所有相关主题:
$ maprcli stream delete -path /sample-stream
结论
通过使用从Apache Kafka应用程序构建的示例,您学习了如何编写,部署和运行第一个MapR Streams应用程序。
如您所见,应用程序代码确实很相似,只需要进行一些更改(例如更改主题名称)。 这意味着可以轻松地将您的Kafka应用程序部署在MapR上,并获得MapR Streams所有功能的好处,例如高级安全性,地理位置分散的部署,大量主题等等。 这也意味着您可以立即在MapR部署中使用所有的Apache Kafka技能。
如果您对运行MapR Streams应用程序有任何疑问,请在下面的评论部分中提问。
翻译自: https://www.javacodegeeks.com/2016/03/getting-started-mapr-streams.html
hadoopde mapr