kafka简介

一、基本概念

介绍

Kafka是一个分布式的、可分区的、可复制的消息系统。
Kafka将消息以 topic 为单位进行归纳。
将向Kafka topic发布消息的程序成为 producers .
将预订topics并消费消息的程序成为 consumer .
Kafka以集群的方式运行 ,可以由一个或多个服务组成,每个服务叫做一个 broker.
producers通过网络将消息发送到 Kafka集群 ,集群向消费者提供消息
客户端和 服务端 通过TCP协议通信 。Kafka提供了Java客户端,服务器上跑着一个kafka server,那些配置的ip就是kafka集群的ip

topic:
一个topic是一组消息,对每个topic,Kafka 对它的日志进行了分区:
每个分区都由一系列 有序的、不可变的消息 组成,这些消息被连续的追加到分区中。可以设置消息保存的时限。消息读完了仍旧保存着,在失效时限之前。将日志分区使得每个日志的数量不会太大,可以在单个服务上保存。另外每个分区可以单独发布和消费,为并发操作topic提供了一种可能。
每个分区中的每个消息 都有一个连续的序列号叫做offset,用来在分区中唯一的标识这个消息。
consumer唯一需要维护的数据是消息在日志中的位置,也就是offset.这个offset有consumer来维护:一般情况下随着consumer不断的读取消息,这offset的值不断增加,但其实consumer可以以任意的顺序读取消息,比如它可以将offset设置成为一个旧的值来重读之前的消息。
解读: 消息读完不被删除

分布式
每个partition在Kafka集群的若干服务中都有副本,这样这些持有副本的服务可以共同处理数据和请求,副本数量是可以配置的。副本使Kafka具备了容错能力。 解读: 并发处理生产者提交的请求

Producers
将消息发布到它指定的topic中,并负责决定发布到哪个 分区 。通常简单的由负载均衡机制随机选择分区,但也可以通过特定的 分区函数选择分区 。使用的更多的是第二种。
Consumers
发布消息通常有两种模式:队列模式(queuing)和发布-订阅模式(publish-subscribe)。
队列模式中 ,consumers可以同时从服务端读取消息,每个消息只被其中一个consumer读到
发布-订阅模式 ,消息被广播到所有的consumer中。
Consumers可以加入一个consumer 组,共同竞争一个topic,topic中的消息将被分发到组中的一个成员中。同一组中的consumer可以在不同的程序中,也可以在不同的机器上。
如果所有的consumer都在一个组中,这就成为了传统的队列模式,在各consumer中实现负载均衡。如果所有的consumer都不在不同的组中,这就成为了发布-订阅模式,所有的消息都被分发到所有的consumer中。
一般来说,每个topic都有若干数量的consumer组,每个组都是一个逻辑上的“订阅者”,为了容错和更好的稳定性,每个组由若干consumer组成。这 其实就是一个发布-订阅模式 ,只不过订阅者是个组而不是单个consumer。
有序性
在这方面Kafka做的更好,通过分区的概念,Kafka可以在多个consumer组并发的情况下提供较好的有序性和负载均衡。将每个分区分只分发给一个consumer组,这样一个分区就只被这个组的一个consumer消费,就可以顺序的消费这个分区的消息。因为有多个分区,依然可以在多个consumer组之间进行负载均衡。注意consumer 的数量不能多于分区的数量,也就是有多少分区就允许多少并发消费。
只能保证一个分区之内消息的有序性,在不同的分区之间是不可以的 如果需要topic中所有消息的有序性,那就只能让这个topic只有一个分区,当然也就只有一个consumer组消费它

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值