zoukankan      html  css  js  c++  java
  • kafka学习笔记

    前言

    最近在做测试平台的开发过程中,需要用到消息队列,在简单调研后选取了主流的kafka做为我们平台的消息中间件,以下是对kafka的学习笔记。

    1. 重要概念

    • topic:消息的主题/队列(逻辑概念)
    • producer:生产者
    • consumer:消费者
    • broker:集群中的服务器节点,即实际存储消息的服务器
    • consumer group:消费者组,每个consumer归属于一个group

    消息在同一个consumer group下的consumer间,实行负载均衡
    消息在不同consumer group下的consumer间,实行广播

    • partition:物理概念。一个topic包含多个partition,数据在partition中连续。
    • leader/follower:partition的多副本,其中一个为leader,其余为follower
    • controller:其中的一个broker,记录所有brokers的存活状态,决定选举
    • segment:每个partition在物理上被平均分配到许多个大小相等的segment。每个segment包含一个index file和一个data file。
    • offset:偏移量,每条消息的唯一标识。

    2. Log compaction

    kafka中的每一条数据都有一对key和value,存放在磁盘上。一般不会被永久保留,而是在到达一定的数量或者时间后对最早写入的数据进行删除。

    Log compaction确保kafka将始终保留单个topic partition的数据日志中每个key值的最后一个已知值。它给出在应用程序崩溃或系统故障后恢复状态,或者在操作维护期间重新启动应用程序后重新加载缓存这些场景的解决方法。

    3. 生产与消费

    一个消息可以被多个consumer group消费,但只能被同一个group下的一个consumer消费。好处是可以同时提供离线和实时处理(离线和实时分属两个group,各自消费,互不影响)。

    4.kafka的命令使用

    kafka搭建: http://www.orchome.com/6

    kafka启动命令:

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

    创建topic:

    bin/kafka-topics.sh --create --zookeeper localhost:2181 --replication-factor 1 --partitions 1 --topic test
    

    查看topic:

    bin/kafka-topics.sh --list --zookeeper localhost:2181
    

    生产消息:

    bin/kafka-console-producer.sh --broker-list localhost:9092 --topic test 
    This is a message
    This is another message
    

    消费消息:

    #从头开始消费消息
    bin/kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic test --from-beginning
    
    #从客户端启动后消费新到达的消息:
    bin/kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic test
    
    #指定消费者组,从该消费者组上次的偏移量开始消费
    bin/kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic test --consumer.config config/consumer.properties
    

    查看topic的分区、副本信息

    bin/kafka-topics.sh --describe --zookeeper localhost:2181 --topic
    

    5. 感悟

    • 一个topic分为多个partiton,每个partition被分到不同的broker,是为了提高吞吐率。
    • 一个partition会有多个replica,是为了做消息高可用,提高容错。
    • kafka将元数据信息保存在zookeeper中,元数据信息包括consumer group、controller、brokers和topic等信息,并由zookeeper来保持这些元数据的更新。

    6. API

    7. 其他

    kafka架构:

    segment中,index和log文件的对应关系

  • 相关阅读:
    ASP.NET Web API编程——客户端调用
    .Net多线程编程—使用Visual Studio 2012进行调试
    .Net多线程编程—误用点分析
    中国省市区数据mysql脚本
    swift/IOS 多线程使用
    swift 自定义TabBarItem
    swift 动画切换View心地层次顺序
    swift 用协议实现代理传值功能
    Swift简单新闻APP实例
    swift NSMutableArray 排序
  • 原文地址:https://www.cnblogs.com/znicy/p/8616050.html
Copyright © 2011-2022 走看看