kafka介绍

     kafka是消息中间件的一种,主要用于高并发的以及大数据量的消息处理。

kafka的基本概念

      Broker:指的是MQ的服务器
      Producer:消息生产者。消息的发送者。一般是独立的程序。
     Topic:在kafka里面,消息队列叫做Topic,是一个逻辑的概念可以理解为一组消息的集合,生产者和Topic及Topic和消费者的关系都是多对多。注意,生产者发送消息时,如果Topic不存在,可以自动创建(在服务器的server.properties的auto.create.topics.enable=true控制)
      Consumer:消息消费者。消息的接收者,一般是独立的程序

Partition

       kafka引入了一个分区(Partition)的概念。一个Topic可以划分成多个分区。 分区在创建topic的时候指定,每个topic至少有一个分区。
创建topic的命令:

//partitions是分区数,replication-factor是主题的副本数。
sh bin/kafka-topics.sh --create --zookeeper localhost:2181 --replication-factor 1 --partitions 1 --topic Topictest

         如果没有指定分区数,默认的分区数是一个,这个参数可以修改:num.partitions=l (server.properties)
        partition思想上有点类似于分库分表,实现的也是横向扩展和负载的目的。
        每个partition在服务器上都会有个物理目录,在配置的数据目录下(server.properties的log.dirs属性),Partition里面的消息被读取之后不会被删除,所以同一批消息在一个Partition里面顺序、追加写入的。这个也是kafka吞吐量大的一个很重要的原因。

​Partition副本Replica机制

       Kafka在0.8的版本之后增加了副本机制。
       每个partition可以有若干个副本(Replica),副本必须在不同的Broker。—般我们说的副本包括其中的主节点。
       由 replication-factor 指定一个 Topic 的副本数。

//partitions是分区数,replication-factor是主题的副本数。
sh bin/kafka-topics.sh --create --zookeeper localhost:2181 --replication-factor 1 --partitions 1 --topic Topictest

     服务端有一个参数控制默认的副本数:offsets.topic.replication.factor(server.properties)

       图中红色的partition为leader,灰色的为follower,follower的数据是从leader同步过来的,leader在哪台机器是不一定的,选举岀来的。生产者发消息、消费者读消息都是针对leader

segment 

        kafka的数据是放在后缀.log的文件里面的。如果一个partition只有一个log文件,消息不断地追加,这个log文件也会变得越来越大,这个时候要检索数据效率就很低了。
所以要把partition再做一个切分,切分岀来的单位就叫做段(segment) 实际上kafka的存储文件是划分成段来存储的,在配置的数据目录下,默认存储路径:/tmp/kafka-logs/ 
       每个segment都有至少有1个数据文件和2个索引文件,这3个文件是成套出现的。(partition—个目录,一个segement—套文件)

Consumer Group

      kafka引入了一个Consumer Group消费组的概念,通过Consumer Group可以让同一Group的消费者消费的同一个Topic,提升消息的消费速率,避免消息在Broker的堆积。在代码中通过groupId来配置。消费同一个topic的消费者不一定是同一个组,只有group id相同的消费者才是同一消费者组。
     注意:同一Consumer Group的消费者不能消费相同的partition的消息,同一topic的partition会分配给同一Consumer Group的不同消费者

Consumer Offset

        partition里面的消息是顺序写入的,被读取之后不会被删除。如果消费者挂了或者下一次读取,想要接着上次的位置读取消息或者从某个特定的位置读取消息,怎么办呢?会不会出现重复消费的情况,我们可以用消息的偏移量来解决这个问题。
       因为消息是有序的,可以对消息进行编号,用来标识一条唯一的消息。这个编号叫做offset,偏移量。offset记录着下一条将要发送给consumer的消息的序号,offset直接保存在服务端。

Kafka主要特性

因为kafka是用来解决数据流的传输的问题的,所以它有这些特性:
•高吞吐、低延迟:kakfa最大的特点就是收发消息非常快,kafka每秒可以处理 几十万条消息,它的最低延迟只有几毫秒;
•高伸缩性:如果可以通过增加分区partition来实现扩容。不同的分区可以在不同 的Broker中。通过ZK来管理Broker实现扩展,ZK管理Consumer可以实现 负载;
•持久性、可靠性:Kafka能够允许数据的持久化存储,消息被持久化到磁盘,并 支持数据备份防止数据丢失;
•容错性:允许集群中的节点失败,某个节点宕机,Kafka集群能够正常工作;
•高并发:支持数千个客户端同时读写。

Kafka与RabbitMQ的区别

1、产品侧重:kafka:流式消息处理、消息引擎;RabbitMQ:消息代理
2、性能:kafka有更高的吞吐量。RabbitMQ主要是push, kafka只有pull。
3、消息顺序:分区里面的消息是有序的,同一个consumer group里面的一个消 费者只能消费一个partition,能保证消息的顺序性。
4、消息的路由和分发:RabbitMQ更加灵活。
5、延迟消息、死信队列:RabbitMQ支持。
6、消息的留存:kafka消费完之后消息会留存,RabbitMQ消费完就会删除。Kafka 可以设置retention,清理消息。

优先选择RabbitMQ的场景:

消息时序控制(控制消息过期或者消息延迟);                                                                                高级灵活的路由规则;
高级的容错处理能力,在消费者更有可能处理消息不成功的情景中(瞬时或者持 久);
需要更简单的消费者实现。

优先选择Kafka的情况:

需要延长消息留存时间,包括过去消息重放的可能;
需要严格的消息顺序;
需要满足的高伸缩能力。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值