kafka 基础知识

2019-08-12  本文已影响0人  农民工进城

kafka不仅仅是消息中间件,还是个流式计算框架。

要点

1.基本介绍

kafka主要有两大应用:
1)构造实时流数据管道,它可以在系统或应用之间可靠地获取数据。 (相当于message queue)
2)构建实时流式应用程序,对这些流数据进行转换或者影响。 (就是流处理,通过kafka stream topic和topic之间内部进行变化)

Kafka作为一个集群,运行在一台或者多台服务器上;Kafka 通过 topic 对存储的流数据进行分类。
每条记录中包含一个key,一个value和一个timestamp(时间戳)。
Kafka有四个核心的API:

2. 基本概念

3.分区

主题-->分区-->消息
生产者将消息发送到主题,消费者订阅主题,而主题下是有不同分区了,消息是挂在不同的分区之下的。一个分区只能有一个消费者,不能出现多个消费者同时订阅一个分区。

其实分区的作用就是提供负载均衡的能力,或者说对数据进行分区的的主要原因,就是为了实现系统的伸缩性。不同的分区放在不同的节点上,数据的读写针对分区这个粒度进行的。这样可以通过增加新节点实现增加系统的吞吐量。

消息分区策略:
分区策略:轮询策略(默认)、随即策略、按消息键保序策略、其他策略(如:基于地理位置进行分区)

如何实现因果关系消息的顺序行:基于个别字段进行分区

4.避免消息丢失

解决方案:

5.拦截器

Kafka 拦截器分为生产者拦截器和消费者拦截器,都支持链。
生产者拦截器要实现org.apache.kafka.clients.producer.ProducerInterceptor

消费者拦截器:org.apache.kafka.clients.consumer.ConsumerInterceptor

6.幂等性和事务

消息投递语义:

Kafka:默认至少一次,那么Kafka如何做到精确一次?
幂等性和事务!!!

Consumer需要设置隔离级别:
solation.level
1)read_uncommitted:默认读未提交
2)read_committed:读已提交

7.rebalance

重平衡过程是如何通知到其他消费者实例的?
靠消费者端的心跳线程(Heartbeat Thread)
消费者定期的发生心跳请求到Broker端的协调者,以表明他还活着。当协调者决定开启新一轮平衡后,他会将“rebalance_in_progress”封装进心跳请求的响应中,返还给消费者实例。当消费者实例发现心跳响应中包含了“rebanlance_in_progress”,就能立马知道冲平生又开始了。
heartbeat.interval.ms控制重平衡通知的频率

上一篇 下一篇

猜你喜欢

热点阅读