Storm与Kafka的集成

本文涉及的产品
服务治理 MSE Sentinel/OpenSergo,Agent数量 不受限
简介: 笔记

版本选择:


storm-1.2.3

kafka_2.11-0.8.2.2


一、深入Kafka服务架构原理


行业里最流行的Message Queue产品; MQ的特点:生产者,消费者


Kafka是LinkedIn开源出来的一个高吞吐的分布式消息系统。 使用scala开发,支持多语言客户端(c++、java、python等)


其具有以下特点:


支持高Throughput(高吞吐量)的应用。多分区


无需停机即可扩展机器


持久化:通过将数据持久化到硬盘以及replication防止数据丢失


支持online和offline消费数据的场景。


1.png


Broker:消息中间件处理结点, 一个kafka节点就是一个broker

Producer:消息发布者

Consumer:消息订阅者

kafka的消息分几个层次:


Topic:一类消息,例如page view日志,click日志等都可以以topic的形式存在,kafka集群能够同时负责 多个topic的分发


Partition: Topic物理上的分组,一个topic可以分为多个partition(默认是2个),每个partition是一个有序 的队列。partition中的每条消息都会被分配一个有序的id(offset,消费位置)。创建Topic时,指定 partition数,数据量大的就设置多一些partition。


Message:消息,最小订阅单元


消息数据处理流程:


Producer根据指定的partition方法(round-robin、hash等),将消息发布到指定topic的partition里 面


kafka集群接收到Producer发过来的消息后,将其持久化到硬盘,并保留消息指定时长(可配置,默认7 天),而不关注消息是否被消费。


Consumer从kafka集群消费(pull)数据,并控制获取消息的offset偏移量。Pull是Consumer客户端主动拉取数据,Consumer自己记录好消费的offset位置。

Push是服务端主动推送数据给Consumer客户端,服务端压力大,推送的数据延迟较高。


Kafka如何实现高吞吐量:

High Throughput是kafka需要实现的核心目标之一,为此kafka做了以下一些设计:


(1)数据磁盘持久化:消息不在内存中cache,直接写入到磁盘,充分利用磁盘的顺序读写性能,所以 broker没有内存压力。


(2)zero-copy:减少IO操作步骤


(3)数据批量发送

(4)数据压缩

(5)Topic划分为多个partition,提高parallelism (并行度)


Kafka如何实现负载均衡:

Kafka不是master/slave 架构,不存在单点故障,所以不需要所谓的HA(热备)。


producer根据用户指定的算法,将消息发送到指定的partition;


存在多个partiiton,每个partition有自己的replica(副本),每个replica分布在不同的Broker节 点上;


多个partition时需要选取出leader partition(通过zk的选举机制),leader partition负责控制读 写,并由zookeeper负责fail over;


通过zookeeper管理broker与consumer的动态加入与离开;


扩容:

当需要增加broker节点时,新增的broker会向zookeeper注册,而producer及consumer会根据注册 在zookeeper上的watcher感知这些变化,并及时作出调整



二、kafka集群安装与部署


这里的storm使用的是1.2.3,由于官网有指定要求,storm1.2.3对应的kafka的版本是0.8

2.png

官方版本:https://archive.apache.org/dist


配置Server.propertis文件


分发到其他机器上


修改其他机器上server.properties文件



三、基于maven构建Storm-kafka工程


配置pom.xml文件:

<dependency>
    <groupId>org.apache.storm</groupId>
    <artifactId>storm-kafka</artifactId>
    <version>1.2.3</version>
</dependency>
<dependency>
    <groupId>org.apache.kafka</groupId>
    <artifactId>kafka_2.11</artifactId>
    <version>0.8.2.2</version>
    <exclusions>
        <exclusion>
            <artifactId>zookeeper</artifactId>
            <groupId>org.apache.zookeeper</groupId>
        </exclusion>
        <exclusion>
            <artifactId>log4j</artifactId>
            <groupId>log4j</groupId>
        </exclusion>
        <exclusion>
            <artifactId>slf4j-log4j12</artifactId>
            <groupId>org.slf4j</groupId>
        </exclusion>
        <exclusion>
            <artifactId>scala-library</artifactId>
            <groupId>org.scala-lang</groupId>
        </exclusion>
        <exclusion>
            <artifactId>jopt-simple</artifactId>
            <groupId>net.sf.jopt-simple</groupId>
        </exclusion>
        <exclusion>
            <artifactId>zkclient</artifactId>
            <groupId>com.101tec</groupId>
        </exclusion>
    </exclusions>
</dependency>
<dependency>
    <groupId>org.apache.kafka</groupId>
    <artifactId>kafka-clients</artifactId>
    <version>0.8.2.2</version>
    <exclusions>
        <exclusion>
            <artifactId>slf4j-log4j12</artifactId>
            <groupId>org.slf4j</groupId>
        </exclusion>
        <exclusion>
            <artifactId>lz4</artifactId>
            <groupId>net.jpountz.lz4</groupId>
        </exclusion>
    </exclusions>
</dependency>
<dependency>
    <groupId>org.scala-lang</groupId>
    <artifactId>scala-library</artifactId>
    <version>2.11.11</version>
</dependency>


四、Storm-kafka编程模型


3.png


相关文章
|
1月前
|
消息中间件 Java Kafka
Springboot集成高低版本kafka
Springboot集成高低版本kafka
|
3月前
|
消息中间件 Kafka Apache
Flink 提供了与 Kafka 集成的官方 Connector,使得 Flink 能够消费 Kafka 数据
【2月更文挑战第6天】Flink 提供了与 Kafka 集成的官方 Connector,使得 Flink 能够消费 Kafka 数据
74 2
|
3月前
|
消息中间件 存储 物联网
|
3月前
|
消息中间件 SQL druid
最新版 springboot集成kafka
最新版 springboot集成kafka
32 0
|
4月前
|
消息中间件 分布式计算 关系型数据库
Sqoop与Kafka的集成:实时数据导入
Sqoop与Kafka的集成:实时数据导入
Sqoop与Kafka的集成:实时数据导入
|
4月前
|
消息中间件 分布式计算 Kafka
Spark与Kafka的集成与流数据处理
Spark与Kafka的集成与流数据处理
|
4月前
|
消息中间件 分布式计算 Kafka
使用Kafka与Spark Streaming进行流数据集成
使用Kafka与Spark Streaming进行流数据集成
|
3月前
|
消息中间件 安全 Kafka
2024年了,如何更好的搭建Kafka集群?
我们基于Kraft模式和Docker Compose同时采用最新版Kafka v3.6.1来搭建集群。
490 2
2024年了,如何更好的搭建Kafka集群?
|
4月前
|
消息中间件 存储 数据可视化
kafka高可用集群搭建
kafka高可用集群搭建
49 0
|
7月前
|
消息中间件 存储 Kubernetes
Helm方式部署 zookeeper+kafka 集群 ——2023.05
Helm方式部署 zookeeper+kafka 集群 ——2023.05
274 0

热门文章

最新文章