Storm Kafka与配置和代码集成
1.目标 - 风暴卡夫卡整合
在本Kafka教程中,我们将学习Storm Kafka Integration的概念。此外,我们将在此Kafka Storm集成教程中讨论Storm架构,Storm Cluster。因此,为了使Kafka开发人员更容易从Storm拓扑中摄取和发布数据流,我们执行Storm Kafka Integration。
那么,让我们开始Kafka Storm Integration教程。
2.什么是风暴?
Apache Storm是一个开源,分布式,可靠且容错的系统。Storm有各种用例,如实时分析,在线机器学习,连续计算和提取转换负载(ETL)范例。
但是,对于流数据处理,有几个组件可以协同工作,例如:
- 喷口
spout是流的源,它是连续的日志数据流。
- 螺栓
此外,spout将数据传递给组件,我们称之为bolt。基本上,bolt消耗任意数量的输入流,进行一些处理,并可能发出新的流。
让我们探讨Apache Kafka用例| Kafka应用程序
下图描述了Storm Architecture中的spout和bolt:
但是,让我们假设一个Storm集群是一个螺栓组件链。在这里,每个螺栓对喷口流式传输的数据执行某种转换。
此外,作业在Storm集群中称为拓扑。虽然,这些拓扑结构永远存在。之后,创建拓扑(计算图),用于Storm的实时计算。那么,数据如何通过螺栓从喷口流出,拓扑将定义它。
3.什么是Storm Kafka Integration?
一般来说,卡夫卡和风暴相互补充。因此,我们可以说他们强大的合作可以为快速移动的大数据提供实时流分析。因此,为了使开发人员更容易从Storm拓扑中摄取和发布数据流,我们执行Kafka-Storm集成。
下图描述了Kafka Storm集成工作模型的高级集成视图:
一个。使用KafkaSpout
基本上,从Kafka集群读取的常规spout 实现是KafkaSpout。它的基本用法是:
阅读Apache Kafka Architecture及其基本概念
-
SpoutConfig spoutConfig = new SpoutConfig( ImmutableList.of("kafkahost1", "kafkahost2"), // list of Kafka brokers 8, // number of partitions per host "clicks", // topic to read from "/kafkastorm", // the root path in Zookeeper for the spout to store the consumer offsets "discovery"); // an id for this consumer for storing the consumer offsets in Zookeeper KafkaSpout kafkaSpout = new KafkaSpout(spoutConfig);
但是,对于每个主机的静态代理列表和固定数量的分区,将对spout进行参数化。
此外,它还存储在Zookeeper中消耗的偏移的状态。此外,为了存储该特定喷口的偏移量和id,使用根路径对喷口进行参数化。因此,分区的偏移量将存储在这些路径中,其中“0”,“1”是分区的ID:
-
{root path}/{id}/0 {root path}/{id}/1 {root path}/{id}/2 {root path}/{id}/3 …
确保默认情况下,偏移量将存储在Storm使用的同一Zookeeper群集中。此外,我们可以通过我们的spout配置覆盖这个,如下所示:
-
spoutConfig.zkServers = ImmutableList.of("otherserver.com"); spoutConfig.zkPort = 2191;
以下配置显示了强制喷口回卷到先前偏移的能力。我们可以在spout配置上执行forceStartOffsetTime,如下所示:
-
spoutConfig.forceStartOffsetTime(-2);
这将选择围绕该时间戳写的最新偏移量以开始消费。此外,我们可以通过传入-1来强制喷口始终从最新的偏移开始,并且我们可以通过传入-2来强制它从最早的偏移开始。
让我们来讨论卡夫卡的优缺点
一世。用于连接Kafka Cluster的参数
此外,KafkaSpout是一个常规的spout实现,它从Kafka集群中读取数据。此外,为了连接到Kafka集群,它需要以下参数:
a。卡夫卡经纪人名单
b。每个主机的分区数
c。用于拉取消息的主题名称。
d。ZooKeeper中的根路径,Spout存储消费者偏移量
e。在ZooKeeper中存储使用者偏移量所需的使用者ID在
下面的代码示例中显示了使用前面参数的KafkaSpout类实例初始化:
-
Copy SpoutConfig spoutConfig = new SpoutConfig( ImmutableList.of("localhost:9092", "localhost:9093"), 2, " othertopic", "/kafkastorm", "consumID"); KafkaSpout kafkaSpout = new KafkaSpout(spoutConfig);
此外,为了存储消息偏移的状态和段消耗跟踪(如果消耗),Kafka Spout使用ZooKeeper。
在为ZooKeeper指定的根路径中,存储这些偏移量。此外,为了存储消息偏移量,Storm默认使用自己的ZooKeeper集群。但是,通过设置其他ZooKeeper集群,我们可以在Spout配置中使用它们。
要指定Spout如何通过设置属性从Kafka集群中获取消息,Kafka Spout还提供了一个选项,如缓冲区大小和超时。
值得注意的是,为了使用Storm运行Kafka,需要设置Storm和Kafka集群,并且它应该处于运行状态。
所以,这完全是关于Storm Kafka Integration。希望你喜欢我们的解释。
4。结论
因此,在这个Storm Kafka集成教程中,我们已经看到了Storm Kafka Integration的概念。在这里,我们讨论了Apache Storm,Storm Architecture,Storm Cluster的简要介绍。最后,我们讨论了使用KafkaSpout的实现