Storm与Kafka的集成

本文涉及的产品
注册配置 MSE Nacos/ZooKeeper,118元/月
任务调度 XXL-JOB 版免费试用,400 元额度,开发版规格
服务治理 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


相关文章
|
2月前
|
消息中间件 Java Kafka
什么是Apache Kafka?如何将其与Spring Boot集成?
什么是Apache Kafka?如何将其与Spring Boot集成?
92 5
|
2月前
|
消息中间件 Java Kafka
Spring Boot 与 Apache Kafka 集成详解:构建高效消息驱动应用
Spring Boot 与 Apache Kafka 集成详解:构建高效消息驱动应用
74 1
|
5月前
|
消息中间件 安全 Java
Spring Boot 基于 SCRAM 认证集成 Kafka 的详解
【8月更文挑战第4天】本文详解Spring Boot结合SCRAM认证集成Kafka的过程。SCRAM为Kafka提供安全身份验证。首先确认Kafka服务已启用SCRAM,并准备认证凭据。接着,在`pom.xml`添加`spring-kafka`依赖,并在`application.properties`中配置Kafka属性,包括SASL_SSL协议与SCRAM-SHA-256机制。创建生产者与消费者类以实现消息的发送与接收功能。最后,通过实际消息传递测试集成效果与认证机制的有效性。
217 4
|
5月前
|
消息中间件 Kafka 数据处理
实时数据流处理:Dask Streams 与 Apache Kafka 集成
【8月更文第29天】在现代数据处理领域,实时数据流处理已经成为不可或缺的一部分。随着物联网设备、社交媒体和其他实时数据源的普及,处理这些高吞吐量的数据流成为了一项挑战。Apache Kafka 作为一种高吞吐量的消息队列服务,被广泛应用于实时数据流处理场景中。Dask Streams 是 Dask 库的一个子模块,它为 Python 开发者提供了一个易于使用的实时数据流处理框架。本文将介绍如何将 Dask Streams 与 Apache Kafka 结合使用,以实现高效的数据流处理。
116 0
|
6月前
|
消息中间件 Java Kafka
Spring Boot与Apache Kafka Streams的集成
Spring Boot与Apache Kafka Streams的集成
|
6月前
|
消息中间件 Java Kafka
Spring Boot与Apache Kafka集成的深度指南
Spring Boot与Apache Kafka集成的深度指南
|
6月前
|
消息中间件 Java Kafka
Spring Boot与Kafka的集成应用
Spring Boot与Kafka的集成应用
|
3月前
|
消息中间件 存储 运维
为什么说Kafka还不是完美的实时数据通道
【10月更文挑战第19天】Kafka 虽然作为数据通道被广泛应用,但在实时性、数据一致性、性能及管理方面存在局限。数据延迟受消息堆积和分区再平衡影响;数据一致性难以达到恰好一次;性能瓶颈在于网络和磁盘I/O;管理复杂性涉及集群配置与版本升级。
157 1
|
3月前
|
消息中间件 Java Kafka
Flink-04 Flink Java 3分钟上手 FlinkKafkaConsumer消费Kafka数据 进行计算SingleOutputStreamOperatorDataStreamSource
Flink-04 Flink Java 3分钟上手 FlinkKafkaConsumer消费Kafka数据 进行计算SingleOutputStreamOperatorDataStreamSource
68 1
|
5月前
|
消息中间件 Java Kafka
Kafka不重复消费的终极秘籍!解锁幂等性、偏移量、去重神器,让你的数据流稳如老狗,告别数据混乱时代!
【8月更文挑战第24天】Apache Kafka作为一款领先的分布式流处理平台,凭借其卓越的高吞吐量与低延迟特性,在大数据处理领域中占据重要地位。然而,在利用Kafka进行数据处理时,如何有效避免重复消费成为众多开发者关注的焦点。本文深入探讨了Kafka中可能出现重复消费的原因,并提出了四种实用的解决方案:利用消息偏移量手动控制消费进度;启用幂等性生产者确保消息不被重复发送;在消费者端实施去重机制;以及借助Kafka的事务支持实现精确的一次性处理。通过这些方法,开发者可根据不同的应用场景灵活选择最适合的策略,从而保障数据处理的准确性和一致性。
400 9

热门文章

最新文章