Kafka初步

100 阅读4分钟

大致了解下MQ编程模型

分布式各服务之间的远程调用方式

  • http和rpc方式
    • 都是一对一的,耦合度较高,但是响应及时。
    • 如果请求量大,并发度高,就难以扩展,会又性能瓶颈,健壮性不高
      • 比如,服务A大量密集调用服务B,服务B就容易扛不住。
  • MQ
    • 解耦: 生产者和消费者可以独立开发和部署,互不影响。
    • 异步处理: 消息的发送和处理是异步的,有助于提升系统的响应速度和吞吐量。
    • 可靠性: 多数MQ系统提供消息持久化和重试机制,保证消息不会丢失。
    • 扩展性: 容易实现水平扩展,适合高并发环境。
    • 削峰: 将请求缓冲,削弱大量密集调用。减轻服务压力。

如果需要同步的场景,MQ就不太适用了。

Kafka相关概念

核心API和设计理念

事件流(Event streaming)

  • 比作人的神经系统,从事件源实时捕获数据,将事件持久化,以供之后检索,会对事件流进行操作、处理和响应。并根据需要将事件流路由到不同的目标。
  • 事件流处理因此确保了数据的连续流动和解释,使得正确的信息在正确的时间到达正确的地点

Apache Kafka® 是一个事件流处理平台。它具备以下三大关键功能:

  • 发布(写入)和订阅(读取)事件流:包括从其他系统持续导入/导出数据。(publish (write) and subscribe to (read))
  • 持久和可靠地存储事件流:根据需要长时间保存事件流。(store)
  • 实时或事后处理事件流:在事件发生时或事后对事件流进行处理。(process)

术语

  • Event :records the fact that "something happened"。(某事发生)
    • an event has a key, value, timestamp, and optional(可选的) metadata headers.
      • Event key: "Alice"
      • Event value: "Made a payment of $200 to Bob"
      • Event timestamp: "Jun. 25, 2020 at 2:06 p.m."
  • Producers :are those client applications that publish (write) events to Kafka.
  • Consumers :are those that subscribe to (read and process) these events.

    生产者和消费者可以互换的。一端不只是生产者也可以是消费者。

  • topics :Events are organized and durably stored.(组织并存储事件) 
    • Topics are partitioned, meaning a topic is spread over a number of "buckets" located on different Kafka brokers. (一个主题会放在不同桶中,以及不同的broker)
    • 通过Topic这样一个逻辑上的概念,我们就很好地实现了生产者与消费者之间有针对性的发送与拉取。 image.png

    当一个新事件发布到一个主题时,它实际上被追加到主题的某个分区中。具有相同事件键(例如,客户或车辆 ID)的事件被写入同一分区,Kafka 保证任何给定主题-分区的消费者总是以与写入完全相同的顺序读取该分区的事件。

  • broker(代理) :kafka集群的其中一个节点。
    • 代理这个概念是消息队列领域中一个常见的概念。Broker这个单词原本的意思是经纪人,比如说房地产经纪人、股票经纪人等。在消息队列领域中,它指的其实就是消息队列产品本身,比如说在Kafka这个领域下,Broker其实指的就是一台Kafka Server。换句话说,我们可以将部署的一台Kafka Server看作是一个Broker,就是这样简单。那么从流程上来说,生产者会将消息发送给Broker,然后消费者再从Broker中拉取消息。
  • 集群(Cluster) : 集群指的是由多个Broker所共同构成的一个整体,对外提供统一的服务,这类似于我们在部署系统时都会采用集群的方式来进行。借助于集群的方式,Kafka消息队列系统可以实现高可用与容错,即一台Broker挂掉了也不影响整个消息系统的正确运行。集群中的各台Broker之间是通过心跳(Heartbeat)的方式来检测其他机器是否还存活。

Kafka APIs

  • The Admin API to manage and inspect topics, brokers, and other Kafka objects.
  • The Producer API to publish (write) a stream of events to one or more Kafka topics.
  • The Consumer API to subscribe to (read) one or more topics and to process the stream of events produced to them.
  • The Kafka Streams API to implement stream processing applications and microservices.
  • The Kafka Connect API to build and run reusable(可重复) data import/export connectors that consume (read) or produce (write) streams of events from and to external(外部) systems and applications so they can integrate(整合) with Kafka.