【图文详细 】Kafka消息队列——Kafka 的各种 API 操作

版权声明:版权声明:本文为博主原创文章,转载请附上博文链接! https://blog.csdn.net/qq_42246689/article/details/84987740

7.1、Kafka 的 API 分类 

1、The Producer API  允许一个应用程序发布一串流式的数据到一个或者多个 Kafka Topic。 
 
2、The Consumer API  允许一个应用程序订阅一个或多个 Topic ,并且对发布给他们的流式数据进行处理。 
 
3、The Streams API  允许一个应用程序作为一个流处理器,消费一个或者多个 Topic 产生的输入流,然后生产一 个输出流到一个或多个 Topic 中去,在输入输出流中进行有效的转换。 
 
4、The Connector API  允许构建并运行可重用的生产者或者消费者,将 Kafka Topic 连接到已存在的应用程序或者数 据系统。比如,连接到一个关系型数据库,捕捉表(table)的所有变更内容。 

http://kafka.apache.org/11/documentation.html#producerapi

7.2、Kafka 的 Message 消费语义 

数据传输的事务定义通常有以下三种级别:

最多一次(At most once): 消息不会被重复发送,最多被传输一次,但也有可能漏传

最少一次(At least one): 消息不会被漏发送 ,最少被传输一次,但也有可能被重复传输

精确的一次(Exactly once): 不会漏传输也不会重复传输,每个消息都传输被一次而且仅仅 被传输一次,这是大家所期望的 
 
大多数消息系统声称可以做到“精确的一次”,但是仔细阅读它们的的文档可以看到里面存 在误导,比如没有说明当 consumer 或 producer 失败时怎么样,或者当有多个 consumer 并 行时怎么样,或写入硬盘的数据丢失时又会怎么样。kafka 的做法要更先进一些。当发布消 息时,Kafka 有一个“committed”的概念,一旦消息被提交了,只要消息被写入的分区的所 在的副本 broker 是活动的,数据就不会丢失。如果 producer 发布消息时发生了网络错误, 但又不确定实在提交之前发生的还是提交之后发生的,这种情况虽然不常见,但是必须考虑 进去,现在 Kafka 版本还没有解决这个问题,将来的版本正在努力尝试解决。 
 
并不是所有的情况都需要“精确的一次”这样高的级别,Kafka 允许 producer 灵活的指定级 别。比如 producer 可以指定必须等待消息被提交的通知,或者完全的异步发送消息而不等 待任何通知,或者仅仅等待 leader 声明它拿到了消息(followers 没有必要)。 
 
现在从 consumer 的方面考虑这个问题,所有的副本都有相同的日志文件和相同的 offset,consumer 维护自己消费的消息的 offset,如果 consumer 不会崩溃当然可以在内存中保存这 个值,当然谁也不能保证这点。如果 consumer 崩溃了,会有另外一个 consumer 接着消费 消息,它需要从一个合适的 offset 继续处理。这种情况下可以有以下选择: 
 
consumer 可以先读取消息,然后将 offset 写入日志文件中,然后再处理消息。这存在一种 可能就是在存储 offset 后还没处理消息就 crash 了,新的 consumer 继续从这个 offset 处理, 那么就会有些消息永远不会被处理,这就是上面说的“最多一次”。 
 
consumer 可以先读取消息,处理消息,最后记录 offset,当然如果在记录 offset 之前就 crash 了,新的 consumer 会重复的消费一些消息,这就是上面说的“最少一次”。 
 
“精确一次”可以通过将提交分为两个阶段来解决:保存了 offset 后提交一次,消息处理成 功之后再提交一次。但是还有个更简单的做法:将消息的 offset 和消息被处理后的结果保存 在一起。比如用 Hadoop ETL 处理消息时,将处理后的结果和 offset 同时保存在 HDFS 中,这 样就能保证消息和 offser 同时被处理了。 

7.3、Kafka 生产者 Java API 

 见代码 KafkaProducer JavaDoc: 

http://kafka.apache.org/11/javadoc/index.html?org/apache/kafka/clients/producer/KafkaProduc er.html

7.4、Kafka 消费者 Java API 

KafkaConsumer JavaDoc:

http://kafka.apache.org/11/javadoc/index.html?org/apache/kafka/clients/consumer/KafkaConsu mer.html 
 
Kafka 提供了两套 API 给 Consumer

1、The high-level Consumer API

2、The SimpleConsumer API 
 
第一种高度抽象的 Consumer API,它使用起来简单、方便,但是对于某些特殊的需求我们可 能要用到第二种更底层的 API 那么先介绍下第二种 API 能够帮助我们做哪些事情

猜你喜欢

转载自blog.csdn.net/qq_42246689/article/details/84987740