Skip to content

分布式消息通信kafka #22

@superstonne

Description

@superstonne

分布式消息通信kafka

应用场景

  • 异步消息
  • 异步解耦

kafka特点

  • 高性能
  • 高吞吐量

集群部署

  1. tar -zxcf 解压安装包

  2. config目录修改server.properties配置

    broker.id

    listeners=PLAINTEXT://host:9092

    zookeeper.connect=zookeeper集群链表

  3. 启动kafka:sh kafka-server-start.sh -daemon ../config/server.properties

  4. 停止kafka sh kafka-server-stop.sh

  5. 启动后zookeeper集群上的节点

    [cluster, controller, brokers, zookeeper, auth, subscribe, ip, admin, isr_change_notification, controller_epoch, digest, consumers, latest_producer_id_block, config]

基本操作

  1. 创建一个kafka topic

    sh kafka-topics.sh --create --zookeeper 192.168.152.132:2181 --replication-factor 1 --partitions 1 --topic MyTopic

  2. 创建一个生产者

    sh kafka-console-producer.sh --broker-list 192.168.152.132:9092 --topic MyTopic

  3. 创建一个消费者

    sh kafka-console-consumer.sh --bootstrap-server 192.168.152.132:9092 --topic MyTopic --from-beginning

kafka的实现细节

消息

消息由key(可选)和value组成,key来决定消息放在哪一个分区。可批量发送。

topic & partition

topic是用来存储消息的逻辑概念。生产者发送消息时制定topic,topic根据key来将消息散列在不同的分区partition中,每个分区中消息按照新旧顺序来排列。

kafka高吞吐量的元素

  1. 消息按顺序存储
  2. 批量发送;batch.size、linger.ms,消息缓存在内存中,合适的时机批量发送。
  3. 零拷贝,FileChannel.transferTo

日志策略

日志保留策略

时间和大小

日志压缩策略

相同key的日志进行合并,保留最新的值

消息的可靠性

消息发送的可靠性

消息存储的可靠性

Partition的规则

高可靠性的副本

leader选举

数据同步

leader选举策略

ISR(副本同步队列)

维护的是有资格的follower

  1. 副本的所有节点必须和zookeeper保持连接状态
  2. 副本的最后一条消息的offset和leader的最后一条消息的offset之间的差值不能超过replica.lag.max.messages设置的值阈值

HW&LEO

highwatermark

leo offset

消息确认的方式

自动提交

手动提交

  • 同步提交
  • 异步提交

指定消费某个分区的消息

消息的消费原理

老版本kafka的offset的进度维护在zookeeper上,频繁读写zookeeper有性能因素。

新版本的consumer的offset维护在kafka内部的topic。

kafka分区分配策略

partition.assignment.strategy来指定策略

Range策略(默认)

roundrobin策略

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions