数据工程师的日常我爱编程

在IntelliJ中运行并扩展Kafka Streams

2018-05-06  本文已影响53人  表现力

仅仅是一段代码

Kafka Streams作为集成在Kafka系统中的一个API,在配合Kafka来进行流处理时有着得天独厚的优势。
不同于Spark Streaming和Flink等,使用Kafka Streams不需要单独的集群,只要在代码中调用Kafka Streams的API即可,并且天生可以享受Kafka本身带来的优势:高可扩展性,高容错等。
简单来说,Kafka Streams应用就是一段Java/Scala代码,仅此而已。
这使得Kafka Streams应用像其它Java程序一样,可以通过命令行运行,也可以通过Puppet,Chef等进行部署,又或者通过Docker容器作为微服务运行。

这里,我们展示如何在IntelliJ中编写Kafka Streams程序,与已经存在的Kafka集群连接,并方便地进行扩展。

如何配置Kafka Streams

以WordCount为例,具体代码可以参考Kafka Streams 入门实例1 WordCount
Kafka Streams应用需要调用Kafka Streams API,并与Kafka集群进行交互。实际的交互操作在内部是通过Consumer API以及Producer API来实现的。

需要配置的两个最重要的参数为:

如何扩展Kafka Streams

Kafka Streams的另一个特点就是,作为一段Java/Scala代码,在进行扩展时,代码本身不需要作任何变动。

当我们运行编写好的应用时,可以在运行日志中查看当前的任务,这里以将拥有2个partition的topic作为源topic的WordCount为例:

Snip20180505_1.png

可以看到当前的任务有0_0和0_1。

此时只有一个WordCount实例在运行。为了增加一个实例,只需要再次点击绿色运行按钮。之后会出现另一个终端窗口。此时再检查两边的日志,会发现第一个中显示的当前任务变为:


Snip20180505_4.png

而第二个则是:


Snip20180505_5.png

显然两个任务被重新分配到了这两个不同的实例上。

上一篇下一篇

猜你喜欢

热点阅读