AmosCloud

Library

Have a Question?

If you have any question you can ask below or enter what you are looking for!

Kafka

KAFKA

message queue
streaming platform

架构原理

file

核心概念

  • broker
    是kafka启动起来的一个进程角色,
    每个broker有自己在所属集群中的唯一id
    broker默认使用9092端口作为服务端口

  • topic
    是kafka全局的逻辑概念,用来划分所属不同的partition
    生产和消费数据,都需要先指定topic
    生产者在生产数据时,如果topic不存在,会自动按照默认配置创建

  • partition
    本质上是一个存储在本地磁盘上的文件夹
    文件夹名字 topic名-分区编号 例如: topic1-0 、topic1-1
    分区这个文件夹中包含了三类主要文件
    *.log *.index *.timeindex

  • replication-factor
    副本数量是指每条message在topic中保存的数量
    副本的数量不允许超过broker数量
    通常生产环境最多使用2个副本
    对于同一topic同一分区的不同副本来说,在broker启动时会选举出一个副本作为leader,其他副本作为follower
    leader负责与客户端交互进行数据的生产和消费,follower负责从leader同步数据,在leader宕机或者有新的副本加入集群时,会重新选举

  • offset
    是指每条消息在partition中存储的唯一标识,偏移量
    重新消费: 可以根据消息的offset,查找并重新消费某条或者某些消息
    记录进度: 可以根据消费过的offset的记录,下次从未消费的offset继续消费

  • producer
    将消息发送到kafka的程序就是生产者
    生产者默认使用轮询的方式,将消息发送到topic的所有分区

  • consumer
    从kafka中读取消息的程序就是消费者
    每个消费者会记录一个读取过的offset进度,下次启动时,会接着之前的进度继续消费

  • consumer gourp
    groupid相同的消费者,共用一份offset记录,同组之间不会重复消费

    1. 如果只有一个consumer线程,consumer会先找一个分区消费完,再消费其他分区,如果分区的数据一直在追加,可能导致其他分区的数据永远无法开始消费

搭建kafka集群

  • 版本:
    分支:
    0.10.x
    0.11.x
    1.x
    2.x
  1. 上传安装包解压

  2. 修改配置文件

    • server.properties
      # 必须是唯一的整数  通常从0开始编号
      broker.id=0
      # 设置broker的socket主机名和端口
      listeners=PLAINTEXT://bd0601:9092
      # kafka的messagelog保存的位置(需要手动创建)
      log.dirs=/opt/kafka_2.11-1.1.1/kafka-logs
      # zk集群的连接信息
      zookeeper.connect=bd0601:2181,bd0602:2181,bd0603:2181
  3. 分发安装包

  4. 修改个性化配置
    broker.id
    listeners

  5. 配置环境变量

    echo 'export KAFKA_HOME=/opt/kafka_2.11-1.1.1'  >> /etc/profile
    echo 'export PATH=.:$KAFKA_HOME/bin:$PATH' >> /etc/profile
    source /etc/profile
  6. 启动集群
    kafka-server-start.sh -daemon /opt/kafka_2.11-1.1.1/config/server.properties

kafka的命令行操作

# 查看topic列表
kafka-topics.sh --zookeeper bd0601:2181 --list
# 创建topic
kafka-topics.sh --zookeeper bd0601:2181 --create \
--topic topic_test_1 --partitions 3 --replication-factor 2
# 查看topic信息
kafka-topics.sh --zookeeper bd0601:2181 --describe \
--topic topic_test_1
# 启动控制台消费者
kafka-console-consumer.sh --bootstrap-server bd0601:9092 --topic topic_test_1
# 启动控制台生产者
kafka-console-producer.sh  --broker-list bd0603:9092 --topic topic_test_1
# 尝试生产消费

kafka 编程API

kafka 与flume

kafka 与 流式计算框架