zoukankan      html  css  js  c++  java
  • Kafka笔记

    最近做的一个项目需要跟Kafka打交道,学习了很多相关知识,就到这里来汇总一下。

    kafka是一个传递消息的系统,原本是用来快速记录海量log的,现在也经常用作消息队列。它主要由三个部分组成,producer,broker以及consumer。producer发布消息,broker存储消息,consumer接收消息。

    发布消息的时候,producer会把它发送到broker的某一个topic上。每条消息都只属于一个topic,而一个topic会有一个或多个partition。那一条消息属于这个topic的哪一个partition会由一个key来决定。这个key既可以由用户定义,也可以由producer在发送的时候自己决定。

    broker收到消息后会把它变为二进制形式添加到所属topic的log的最后。注意,Kafka只能在log最末尾添加新的消息,而不能在任意地方插入、删除或者编辑。然后broker会发送一个成功的消息给producer。由于broker的本质其实是一个zookeeper的集群,producer的消息其实会发给所有的broker。producer可以在发送的时候就定义发送成功的标准是收到任意一个broker的成功回复还是所有brokers还是大多数brokers的成功回复。

    consumer接收消息的情况有些复杂。首先consumers会被分成不同的组。Kafka可以保证一条消息会被关注这个消息topic的每一个组中的一个且仅有一个consumer收到。这样用户就可以灵活的定义一个topic下的消息要被广播还是负载均衡了。两个极端情况:1,所有consumer都在一个group,那么broker相当于一个负载均衡器,每条消息会被送到不同的consumer;2,所有consumer都在不同group,那么相当于广播,每一条消息会被送给所有的consumer。其它情况都在这两者之间。

    Kafka的配置也有些繁琐。为了使用Kafka,首先你得有一个Zookeeper。然后对于Consumer来说,必须给定topic和Zookeeper地址,其它还可以设一些timeout之类的东西。对于Producer来说,需要给定Brokers,Zookeeper地址,其它还可以设一些缓存大小,timeout之类的。如果你想结合Avro来使用Kafka,那么还必须为Consumer和Producer设置Avro Schema Registry的地址。Avro是一套很复杂的定义文件结构的系统,我会在之后的博客中提到。

    那Kafka的基本使用就是这样了。有兴趣的可以去Apache官网下下来玩一玩。

  • 相关阅读:
    开发中常用js记录(二)
    c# 我所理解的 值类型 and 引用类型
    c# 枚举
    ModelState.IsValid总为false原因
    学习总结 之 WebApi服务监控 log4net记录监控日志
    How to Deinstall Oracle Clusterware Home Manually
    oracle client 低于 oracle server 端,导致报错ORA-01882
    转 zabbix 用户建立和中文化
    转 rman 恢复报错
    10g 升级到11g 失效对象2则
  • 原文地址:https://www.cnblogs.com/zhutianshi/p/4336792.html
Copyright © 2011-2022 走看看