首页 > 编程知识 正文

Hadoop大数据技术,kafka怎么传大数据消息

时间:2023-05-06 06:29:13 阅读:16826 作者:65

2021年4月19日,Kafka 2.8.0正式发布! 这次升级包含许多重要的更改,其中最引人注目的是kafka通过自我管理的仲裁来替代ZooKeeper,通俗地说是3358www.Sina.com/!

1. Kafka概述Kafka是一个分布式、分区、复制副本和多订阅者消息传递订阅系统,常用于web/nginx日志、访问日志、消息服务等。

2. Kafka的特性Kafka将不再需要ZooKeeper,正式分手Kafka每秒可以处理十万条消息,他的延迟最低只有几毫秒的每个topic分为多个partition、consumer group针对partition (高吞吐量、低延迟:Kafka群集支持热扩展3358www.Sina.com/com/,支持数据备份,防止数据丢失。 允许可扩展性:群集中的节点失败。 如果拷贝数为n,则允许n-1节点失败。持久性、可靠性:在大多数使用场景中,数据处理的顺序很重要。 大多数消息队列原本都是排序的,以确保按特定顺序处理数据。 Kafka保证一个分区中消息的有序性(分区之间的数据是无序的,如果对数据顺序有要求,则在创建主题时将分区数partitions设置为1(http://www.Sina.com/支持数千个客户端的同时读写3. Kafka的使用场景http://www.Sina.com/1公司可以在Kafka上收集各种服务的日志,通过Kafka以相同接口服务的方式开放,例如hafka容错性:去耦(如Hbase )、生产者和消费者、顺序保证:Kafka (如缓存消息)以及web浏览、搜索、点击等web和app用户这些活动信息从每个服务器发布到Kafka,然后订阅者订阅这些topic进行实施监控分析,或者加载到hadoop、数据仓库进行离线分析和挖掘http://www.Sina.com 这包括收集各种分布式APP应用程序的数据,并为各种操作提供集中反馈。 例如警报和报告高并发::例如,spark streaming和storm 日志收集:4.Kafka发布-订阅消息收发模式是发布-订阅消息与点对点消息系统(一条消息只能消耗一次)不同,消费者可以订阅一个或多个topic,消费者可以消耗该topic中的所有数据,且多个消费者可以消耗相同的数据在发布-订阅消息系统中,消息的生产者称为发布者,消费者称为订阅者。

消息系统:

5 .与常用的消息队列相比,5.1 RabbitMQ RabbitMQ是使用Erlang编写的开源消息队列,包括AMQP、XMPP、SMTP、STOMP 因此,非常重量级,适合企业级开发。 Broker框架也已实现。 也就是说,消息发送到客户端时首先排在中央队列中。 支持路由、负载平衡或数据持久化。

5.2 Redis Redis是一个基于密钥值对的NoSQL数据库,开发和维护非常活跃。 这是Key-Value数据库存储系统,但它支持MQ功能,因此完全可以用作轻量级队列服务。 RabbitMQ和Redis入队和出队操作分别执行100万次,每10万次记录执行时间。 测试数据分为4个不同大小的数据: 128字节、512字节、1K和10K。 实验表明,入队、数据比较小时,Redis性能高于RabbitMQ,数据大小超过10K时,Redis慢得令人无法容忍; 离开团队时,无论数据大小如何,Redis都表现出非常好的性能,而RabbitMQ离开团队的性能远远低于Redis。

5.3 ZeroMQ ZeroMQ被称为最快的消息队列系统,特别是满足大吞吐量的需求场景。 ZeroMQ可以实现RabbitMQ不擅长的高/复杂队列,但开发者需要自己组合多个技术框架,技术复杂度是该MQ成功应用的挑战。 ZeroMQ有自己的非中间件模型,APP应用程序充当此服务器,因此不需要安装和执行消息服务器或中间件。 只需简单浏览ZeroMQ库,使用NuGet进行安装,即可在APP应用程序之间愉快地发送消息。 但是,ZeroMQ只提供非持久的队列。 也就是说,如果停机,数据将丢失。 其中,Twitter的Storm 0.9.0之前的版本默认使用ZeroMQ作为数据流的传输。 Storm从0.9版开始同时支持ZeroMQ和Netty作为传输模块。

5.4活动名称a

ctiveMQ是Apache下的一个子项目。 类似于ZeroMQ,它能够以代理人和点对点的技术实现队列。同时类似于RabbitMQ,它少量代码就可以高效地实现高级应用场景。

5.5 Kafka/Jafka

Kafka是Apache下的一个子项目,是一个高性能跨语言分布式发布/订阅消息队列系统,而Jafka是在Kafka之上孵化而来的,即Kafka的一个升级版。具有以下特性:快速持久化,可以在O(1)的系统开销下进行消息持久化;高吞吐,在一台普通的服务器上既可以达到10W/s的吞吐速率;完全的分布式系统,Broker、Producer、Consumer都原生自动支持分布式,自动实现负载均衡;支持Hadoop数据并行加载,对于像Hadoop的一样的日志数据和离线分析系统,但又要求实时处理的限制,这是一个可行的解决方案。Kafka通过Hadoop的并行加载机制统一了在线和离线的消息处理。Apache Kafka相对于ActiveMQ是一个非常轻量级的消息系统,除了性能非常好之外,还是一个工作良好的分布式系统。

6.Kafka API介绍 6.1 Producer API

Producer API允许各个app将数据流发送到Kafka集群的主题中,为了使用Producer API,我们需要在Maven工程中添加如下依赖

<dependency><groupId>org.apache.kafka</groupId><artifactId>kafka-clients</artifactId><version>2.8.0</version></dependency> 6.2 Consumer API

COnsumer API允许各个app通过Kafka集群中的主题读取数据流,为了使用Consumer API,我们需要在Maven工程中添加如下依赖

<dependency><groupId>org.apache.kafka</groupId><artifactId>kafka-clients</artifactId><version>2.8.0</version></dependency> 6.3 Streams API

Streams API允许数据写入topics中并从topics中读取,为了使用Streams API,需要在Maven工程中添加如下依赖

<dependency><groupId>org.apache.kafka</groupId><artifactId>kafka-streams</artifactId><version>2.8.0</version></dependency>

如果使用的是scala Maven工程,则还需要添加如下依赖

<dependency><groupId>org.apache.kafka</groupId><artifactId>kafka-streams-scala_2.12</artifactId><version>2.8.0</version></dependency> 6.4 Connect API

Connect API 允许继承该接口的connectors将数据从source data system存入Kafka中或者将Kafka中的数据存入sink data   system

6.5 Admin API

Admin API 支持管理和索引topics,brokers,acks,和其他的Kafka对象,如果需要使用Admin API,需要向Maven工程中添加如下依赖

<dependency><groupId>org.apache.kafka</groupId><artifactId>kafka-clients</artifactId><version>2.8.0</version></dependency> 7. Kafka中的术语解释

在深入理解Kafka之前,先介绍一下Kafka中的术语。下图展示了Kafka的相关术语以及之间的关系:

上图中一个topic配置了3个partition。Partition1有两个offset:0和1。Partition2有4个offset。Partition3有1个offset。副本的id和副本所在的机器的id恰好相同。

如果一个topic的副本数为3,那么Kafka将在集群中为每个partition创建3个相同的副本。集群中的每个broker存储一个或多个partition。多个producer和consumer可同时生产和消费数据。

7.1 broker

Kafka 集群包含一个或多个服务器,服务器节点称为broker。

broker存储topic的数据。如果某topic有N个partition,集群有N个broker,那么每个broker存储该topic的一个partition。

如果某topic有N个partition,集群有(N+M)个broker,那么其中有N个broker存储该topic的一个partition,剩下的M个broker不存储该topic的partition数据。

如果某topic有N个partition,集群中broker数目少于N个,那么一个broker存储该topic的一个或多个partition。在实际生产环境中,尽量避免这种情况的发生,这种情况容易导致Kafka集群数据不均衡。

7.2 topic

每条发布到Kafka集群的消息都有一个类别,这个类别被称为Topic。(物理上不同Topic的消息分开存储,逻辑上一个Topic的消息虽然保存于一个或多个broker上但用户只需指定消息的Topic即可生产或消费数据而不必关心数据存于何处)

类似于数据库的表名

7.3 partition

topic中的数据分割为一个或多个partition。每个topic至少有一个partition。每个partition中的数据使用多个segment文件存储。partition中的数据是有序的,不同partition间的数据丢失了数据的顺序。如果topic有多个partition,消费数据时就不能保证数据的顺序。在需要严格保证消息的消费顺序的场景下,需要将partition数目设为1。

7.4 Producer

生产者即数据的发布者,该角色将消息发布到Kafka的topic中。broker接收到生产者发送的消息后,broker将该消息追加到当前用于追加数据的segment文件中。生产者发送的消息,存储到一个partition中,生产者也可以指定数据存储的partition。

7.5 Consumer 

消费者可以从broker中读取数据。消费者可以消费多个topic中的数据。

7.6 Consumer Group

每个Consumer属于一个特定的Consumer Group(可为每个Consumer指定group name,若不指定group name则属于默认的group)。

7.7 Leader

每个partition有多个副本,其中有且仅有一个作为Leader,Leader是当前负责数据的读写的partition。

7.8 Follower

Follower跟随Leader,所有写请求都通过Leader路由,数据变更会广播给所有Follower,Follower与Leader保持数据同步。如果Leader失效,则从Follower中选举出一个新的Leader。当Follower与Leader挂掉、卡住或者同步太慢,leader会把这个follower从“in sync replicas”(ISR)列表中删除,重新创建一个Follower。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。