Kafka介绍

Posted truekai

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Kafka介绍相关的知识,希望对你有一定的参考价值。

kafka介绍:

作用:

  • 系统之间解耦和
  • 峰值压力缓冲
  • 异步通信

特点:生产者消费者模式,先进先出(FIFO)保证顺序,自己不丢数据,默认每隔7天清理数据,高吞吐量,没有主从关系,依靠Zk协调

结构:

  • topic:消息队列/分类

技术图片

 

 

  kafka里面的消息是有topic来组织的,简单的我们可以想象为一个队列,一个队列就是一个topic,然后它把每个topic又分为很多个partition(自己指定),这个是为了做并行的,在每个partition内部消息强有序,相当于有序的队列,其中每个消息都有个序号offset,比如0到12,从前面读往后面写。一个partition对应一个broker,一个broker可以管多个partition,比如说,topic有6个partition,有两个broker,那每个broker就管3个partition。这个partition可以很简单想象为一个文件位置信息叫offset,当数据发过来的时候它就往这个partition上面append,追加就行,消息不经过内存缓冲,直接写入磁盘(零拷贝技术),kafka和很多消息系统不一样,很多消息系统是消费完了我就把它删掉,而kafka是根据时间策略删除,而不是消费完就删除,在kafka里面没有一个消费完这么个概念,只有过期这样一个概念。

  producer自己决定往哪个partition里面去写,这里有一些的策略,譬如如果hash(默认算法是 hash 取 %),或者是轮询的负载均衡,不用多个partition之间去join数据了。consumer自己维护消费到哪个offset,每个consumer都有对应的group,group内是queue消费模型(各个consumer消费不同的partition,因此一个消息在group内只消费一次),group间是publish-subscribe消费模型,各个group各自独立消费,互不影响,因此一个消息在被每个group消费一次

分区的意义:

1.kafka为什么要在topic里加入分区的概念?

  producer只需要关心消息发往哪个topic,而consumer只关心自己订阅哪个topic,并不关心每条消息存于整个集群的哪个broker。  为了性能考虑,如果topic内的消息只存于一个broker,那这个broker会成为瓶颈,无法做到水平扩展。若没有分区,一个topic对应的消息集在分布式集群服务组中,就会分布不均匀,即可能导致某台服务器A记录当前topic的消息集很多,若此topic的消息压力很大的情况下,服务器A就可能导致压力很大,吞吐也容易导致瓶颈。

  可靠性的原因之一:Kafka会给每个分区找一个节点当带头大哥(Leader),以及若干个节点当随从(Follower)。消息写入分区时,带头大哥除了自己复制一份外还会复制到多个随从。如果随从挂了,Kafka会再找一个随从从带头大哥那里同步历史消息;如果带头大哥挂了,随从中会选举出新一任的带头大哥,继续笑傲江湖。

2.kafka消息存储和生产者模型

技术图片

环境搭建:

  非常简单

  1. 解压压缩包
  2. 配置../ kafka_2.10-0.8.2.2/config/server.properties文件

    三个地方需要配置,broker.id、log.dirs、zookeeper.connect

    broker.id:必须是整数

    log.dirs:真实数据存储的地方

    zookeeper.connect:zk的地址

  3.启动

  bin/kafka-server-start.sh   config/server.properties

   4.一些命令

  

    创建Topic:
    kafka-topics.sh --create --zookeeper hadoop:2181 --replication-factor 1 --partitions 1 --topic test

    查看创建的Topic:
    kafka-topics.sh --list --zookeeper hadoop:2181
    
    启动生产者脚本:
    kafka-console-producer.sh --broker-list hadoop:9092 --topic test
    
    启动消费者脚本:
    kafka-console-consumer.sh --zookeeper hadoop:2181 --topic test --from-beginning
    
    --from-beginning的使用:从头开始消费

  查看topic详细信息
    kafka-topics.sh --describe --zookeeper hadoop:2181 --topic test

 

  

    

   

以上是关于Kafka介绍的主要内容,如果未能解决你的问题,请参考以下文章

Kafka-文件管理

kafka安装和使用远程代码进行访问 ---附踩坑记录

kafka安装和使用远程代码进行访问 ---附踩坑记录

kafka中常用API的简单JAVA代码

Android课程---Android Studio使用小技巧:提取方法代码片段

Apache Kafka教程:入门介绍