🌈Kafka 集群环境部署与使用

Kafka相关链接资料

Kafka消息队列组件

Broker

  • 一台kafka服务器就是一个broker。一个集群由多个broker组成。一个broker可以容纳多个topic

Topic

  • 每条发布到Kafka集群的消息都有一个类别,这个类别被称为Topic (物理上不同的Topic消息分开存储,逻辑上一个Topic消息虽然保存于一个或多个broker上,但用户只需要指定消息的Topic 即可生成或消费数据而不必关心数据存于何处)

Partition

  • Partition 是物理上的概念,每个Topic包含一个或多个Partition 取决于kafka服务配置(partitions)

  • 一个非常大的topic 可以分布在多个broker(及服务器)上,一个topic可以分为多个partition,每个partition是一个有序的队列

  • partition中的每条消息都会分配一个有序ID(offset)。kafka只保证按一个partition中的顺序将消息发给consumer,不保证一个topic的整体(多个partition间)的顺序

Producer

  • 负责发布消息到 Kafka broker

    Consumer

  • 消息消费者,向kafka broker读取消息的客户端

Consumer Group

  • 每个Consumer属于一个特定的Consumer Group(可为每个Consumer指定group name,若不指定group name 则属于默认的group)

  • 多个Consumer 如果指定多个groupID,此时消息方式将是广播的方式。一个消息将被多个不通groupID的Consumer 消费,同一个groupID 的 多个Consumer只要有一个消费成功,其同一个组内 Consumer 将无法取到数据。

集群Kafka

服务配置信息

#192.168.0.143/broker&zookeeper brokerID 0 / partition 5 / replication-factor: 3
#192.168.0.144/broker&zookeeper brokerID 1 / partition 5 / replication-factor: 3
#192.168.0.145/broker&zookeeper brokerID 2 / partition 5 / replication-factor: 3
#partition 5

partition 的直接表现

  • partition 在kafka的日志目录中体现为:使用 {topic}-{partition} 格式命名的文件系统

    # 一个由三台kafka组成的集群,设置partition为5,新建topic名称[test-topic],根目录为root
    broker1:root
    test-topic-0
    test-topic-1
    broker2:root
    test-topic-2
    ...

    Kafka 集群备份机制

  • 使用命令查看topic信息

    ./kafka-topics.sh --describe --zookeeper localhost:2181
  • 使用命令创建topic

     ./kafka-topics.sh --create --zookeeper localhost:2181 --replication-factor 3 --partitions 5 --topic par-topic

    结果:

    描述:

    PartitionCount: 5 表示有3个分区

    ReplicationFactor: 3 表示复制因子为3

    Topic: par-topic Partition: 0 Leader: 1 Replicas: 1,3,2 Isr: 1,3,2

    # Partition: 0 分区下标是从0开始的,也就是第一个分区P0
    # Leader: 1 表示P0的Leader是在broker.id=1的集群节点上
    # Replicas: 1,3,2 列出了所有的副本节点,不管节点是否在服务中
    # Isr: 1,3,2 是正在服务中的节点,如果其中一个节点挂掉了,那么这里就会减少哪个挂掉节点的broker.id

    PS

    # 1. 当使用producer创建topic时,新产生的topic无法设置复制因子
    # 2. 当使用命令创建topic时,复制因子生效

最后更新于