中间件

kafka中的信息都是存储在zk中的。zk是一个协调服务,它可以存储少量数据, 保证数据的一致性,特性: 顺序节点自动增长、临时节点自动删除,从而提供分布式的协调服务。注册中心是zk众多应用当中的一种,zk可以应用于统一命名服务 配置中心 分布式锁

吞吐量:ActiveMQ>RabbitMQ>Kafka

数据的可用性及准确性:RabbitMQ> ActiveMQ> Kafka

Kafka注重批量。

Erlang经常应用于一些 游戏服务器,主要应用于高并发的场景。

Kafka是java 和 Scala 混合式编程实现的。最大特点是高可用HA、高水平扩展、高吞吐量

从支持的协议来看:ActiveMQ支持的客户端种类 比RabbitMQ 和 Kafka 多。

RocketMQ是阿里在Kafka的基础上进行的重写 实现的一个消息系统,两者在很多方面类似,比如数据堆积特性类似、吞吐量很大。两者最大的不同在于应用场景:

RocketMQ更多地应用于业务场景,进行一些对事务的支持。Kafka更多地应用于数据场景,关注点在数据吞吐量上、动态扩容。RocketMQ对集群和动态扩容也是支持的。

Kafka不但是消息队列 还可以存储数据。

1、Kafka可以存储数据

2、可以在流数据产生时就处理数据: Kafka提供了一些特殊的API, 数据到Kafka中的一个topic1中后,topic2开始处理topic1的数据,然后消费者从第二个topic中拿数据,

kafka实现的是仿AMQP协议。

kafka以集群的方式存在,有多个broker;kafka以多波的方式进行,可以多次消费。

kafka是一个消息系统。

 

数据分片 副本的概念:

假设有12T的数据需要存储,一台机器只有3G,因此需要将数据划分为4份。每一个分片的数据是一份不完整的数据。

数据分片优点partition:

1、统一存储。(将 磁盘、内存、cpu运算 统一起来)

2、负载均衡:查找一数据时,原先只有在一台机器上查找 到现在可以在多台机器上查找,提高并发级别,

3、降低数据丢失风险

缺点:

数据可用性差:只要宕机一台机器,则这台机器上的数据就会丢失,不能保证数据的完整性。

解决办法:

冗余备份replication:对数据进行备份,如 将p3数据进行备份R3,放在其他机器中的任意一台即可。同理,p2 p1 p0f均需要备份。

p0 p1 p2 p3称为leader partition 即:正在对外提供读写服务的分片;R1 R2 R3 R0称为follower partition 即:被动接收数据的分片。

数据写入p3后,会备份到R3。只有p3宕机后 R3才会被选举出来称为leader partition。

leader只能有一个,follower可以有多个。

partition级别数据有顺序,topic级别数据无序。

若想保证topic级别数据也有顺序,方法可以是只有一个partition。也可以利用key值哈希为数据找分片。

kafka中唯一标识一条数据:topicId+partitionId+offsetId

kafka中需要先创建topic然后再放数据。

Streams API方便对数据进行清洗、转换。

Connector API实现两个接口, source:取别的系统中的数据 往kafka中写。sink:把kafka中的数据写入别的系统。优点:便于复用。

注意点:

1、send()是异步方法

数据发送出去后 会进入buffer中,每一个partition有自己对应的buffer,当buffer满后 会将数据一起发送到topic中。

2、buffer满了 还没达到linger.ms,则会将数据发送出去;若达到linger.ms,buffer还没满,也将数据发送出去。若buffer为16k,然而发送了一条18k的数据 则不会经过buffer 直接将数据发送到partition。

3、Back ground I/O thread负责将数据发送到topic。

4、“acks”可以设置为0 、1、 all。当设置为0时,不考虑producer的响应 当buffer满后直接将数据send出去,这种方式吞吐量大,但可用性保证很差,一般用于日志数据。

acks设置为1时,缓冲区向partition写数据 写入leader成功后 会有一个返回,有返回后 才会写入下一个数据。若无返回 在Back ground I/O thread会等待。

acks设置为all时, 当leader写入成功且 follower写入成功,才会返回。

5、retries:buffer向topic任务失败 自动重试,设置为1 则重试1次。

kafka在consumer端顺序可以被保证。传统的消息传递系统 在consumer端不能保证顺序。

流存储可以将数据进行回放,因为它保证了数据的顺序。

kafka可以清洗日志

日志聚合比较流行的方案: ELK

左边4台机器,bath将日志写入logsth进行数据清洗,然后将数据写入es,kibma可以从es中获取数据进行分析。

logsth存在性能瓶颈,用kafka做一个buffer

流处理采用stream API,采用stream API时 数据量不会太大 不用去搭建一个新的平台,适用于偶尔有一个需求 且需求也不是很复杂。

如果有大量流处理需求,且需求很复杂不应该采用stream API,应该用flink、spark streaming等。

kafka什么时候删除数据:可以在rotation中进行配置,配置为6天 或者12天等。

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值