美文网首页数据工程师的日常我爱编程
在IntelliJ中运行并扩展Kafka Streams

在IntelliJ中运行并扩展Kafka Streams

作者: 表现力 | 来源:发表于2018-05-06 04:29 被阅读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来实现的。

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

    • application.id
      这个参数定义了Kafka Streams应用的ID。同时,应用在调用Consumer API来和集群交互时,使用的consumer group id也将与这个值相同。因此,如果中途修改了这个参数的值,consumer group id也将随之变化,并将失去之前从Kafka消费的数据。

    • bootstrap.servers
      这个参数即是Kafka集群的位置。

    如何扩展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

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

    相关文章

      网友评论

      本文标题:在IntelliJ中运行并扩展Kafka Streams

      本文链接:https://www.haomeiwen.com/subject/mceyrftx.html