kafka学习

Apache kafka

一、基本概念

官网将kafka定义为一个分布式流媒体平台它主要用于处理活跃的流式数据。并且出列它的三大功能:

1它可以让你发布和订阅记录流。在这方面,它类似于消息队列或企业消息传递系统。

2它允许您以容错方式存储记录流。

3它可以让您在发生记录时处理记录流

 

换句话说,它是一个高吞吐量的分布式发布订阅消息系统,它具有以下特点:

1、高吞吐量、低延迟:kafka每秒可以处理几十万条消息,它的延迟最低只有几毫秒

2、可扩展性:kafka集群支持热扩展

3、持久性、可靠性:消息被持久化到本地磁盘,并且支持数据备份防止数据丢失

4、容错性:允许集群中节点失败(若副本数量为n,则允许n-1个节点失败)

5、高并发:支持数千个客户端同时读写

 

二、kafka的使用场景

1、日志收集:一个公司可以用Kafka可以收集各种服务的log,通过kafka以统一接口服务的方式开放给各种consumer,例如hadoopHbaseSolr等。

2、消息系统:解耦和生产者和消费者、缓存消息等。

3、用户活动跟踪:Kafka经常被用来记录web用户或者app用户的各种活动,如浏览网页、搜索、点击等活动,这些活动信息被各个服务器发布到kafkatopic中,然后订阅者通过订阅这些topic来做实时的监控分析,或者装载到hadoop、数据仓库中做离线分析和挖掘。4、运营指标:Kafka也经常用来记录运营监控数据。包括收集各种分布式应用的数据,生产各种操作的集中反馈,比如报警和报告。

5、流式处理:比如spark streamingstorm

 

 

三、整体架构

Kafka的整体架构非常简单,是显式分布式架构,producerbrokerkafka)和consumer都可以有多个。Producerconsumer实现Kafka注册的接口,数据从producer发送到brokerbroker承担一个中间缓存和分发的作用。broker分发注册到系统中的consumerbroker的作用类似于缓存,即活跃的数据和离线处理系统之间的缓存。客户端和服务器端的通信,是基于简单,高性能,且与编程语言无关的TCP协议。几个基本概念:

1Topic:特指Kafka处理的消息源(feeds of messages)的不同分类。

2PartitionTopic物理上的分组,一个topic可以分为多个partition,每个partition是一个有序的队列。partition中的每条消息都会被分配一个有序的idoffset)。

3Message:消息,是通信的基本单位,每个producer可以向一个topic(主题)发布一些消息。

4Producers:消息和数据生产者,向Kafka的一个topic发布消息的过程叫做producers

5Consumers:消息和数据消费者,订阅topics并处理其发布的消息的过程叫做consumers

6Broker:将已发布的消息保存在一组服务器中,它们被称为代理(Broker)或Kafka集群,Kafka集群中的一台或多台服务器统称为broker

 

四、工作流程

对于每个topickafka集群维护了分区的日志文件(分区1、分区2、分区3),每个分区()是顺序的、不可改变的、一直不停地往后面追加的消息队列,称之为提交日志(commit log),每个在其中的消息都有一个称之为offset的序列号,来唯一的标识在分区里的每条消息,Producerstopics发送数据,每个producer负责选择将消息发送给topic的哪个partition

 

 

 

消息系统通常有两个模型:排队模式和广播模式,排队模式是许多消费者同时去服务器争夺数据,但是一条数据只分发给一个消费者,广播模式是消息广播给所有消费者,每个消费者都可以拿到消息。

 

生产者示例代码:

producer = new Producer(…);

message = new Message(“test message str”.getBytes());

set = new MessageSet(message);

producer.send(“topic1”, set);

 

消费者示例代码:

streams[] = Consumer.createMessageStreams(“topic1”, 1)

for (message : streams[0]) {

bytes = message.payload();

// do something with the bytes

}

 

五、与其他消息服务比较

 

 

1、kafka能实现批量发送消息,可以设置单位时间能批量处理发往同一分区的消息,而ActiveMQ和RabbitMQ暂时没有简单的办法来批量发送消息

 

2、Kafka性能比其他消息服务更好,它拥有高效的存储格式,从代理传输到消费者的字节更少ActiveMQ和RabbitMQ两个容器中的代理必须维护每个消息的传输状态

 

3、RabbitMQ遵循AMQP,RabbitMQ的broker由Exchange,Binding,queue组成,其中exchange和binding组成了消息的路由键;客户端Producer通过连接channel和server进行通信,Consumer从queue获取消息进行消费(长连接,queue有消息会推送到consumer端,consumer循环从输入流读取数据)。rabbitMQ以broker为中心;有消息的确认机制。

 

4、kafka遵从一般的MQ结构,producer,broker,consumer,以consumer为中心,消息的消费信息保存的客户端consumer上,consumer根据消费的点,从broker上批量pull数据;无消息确认机制。

 

5、RabbitMqkafka成熟,支持AMQP事务处理,在可靠性上,RabbitMq超过kafka
Kafka设计的初衷就是处理日志的,不支持AMQP事务处理,可以看做是一个日志系统,针对性很强,所以它并没有具备一个成熟MQ应该具备的特性;Kafka的性能(吞吐量、tps)比RabbitMq要强,如果用来做大数据量的快速处理是比RabbitMq有优势的。有大量的事件要分区、按顺序处理适合用kafka,较少的事件并且是系统消息投递可靠的、不关心顺序适合选用RabbitMQ

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值