卡夫卡怎么利用Java实现数据的生产和消费实例教程

  

这篇文章主要介绍Kafka怎么利用Java实现数据的生产和消费实例教程,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!

Kafka的介绍

Kafka是一种高吞吐量的分布式发布订阅消息系统,它可以处理消费者规模的网站中的所有动作流数据。

Kafka 有如下特性:

  • 以时间复杂度为O(1)的方式提供消息持久化能力,即使对TB级以上数据也能保证常数时间复杂度的访问性能。

  • 高吞吐率。即使在非常廉价的商用机器上也能做到单机支持每秒100K条以上消息的传输。

  • 支持Kafka Server间的消息分区,及分布式消费,同时保证每个Partition内的消息顺序传输。

  • 同时支持离线数据处理和实时数据处理。

  • Scale out:支持在线水平扩展。

kafka的术语

  • Broker:Kafka集群包含一个或多个服务器,这种服务器被称为broker。

  • Topic:每条发布到Kafka集群的消息都有一个类别,这个类别被称为Topic。(物理上不同Topic的消息分开存储,逻辑上一个Topic的消息虽然保存于一个或多个broker上但用户只需指定消息的Topic即可生产或消费数据而不必关心数据存于何处)

  • Partition:Partition是物理上的概念,每个Topic包含一个或多个Partition。

  • Producer:负责发布消息到Kafka broker。

  • Consumer:消息消费者,向Kafka broker读取消息的客户端。

  • Consumer Group:每个Consumer属于一个特定的Consumer Group(可为每个Consumer指定group name,若不指定group name则属于默认的group)。

kafka核心Api

kafka有四个核心API

  • 应用程序使用producer API发布消息到1个或多个topic中。

  • 应用程序使用consumer API来订阅一个或多个topic,并处理产生的消息。

  • 应用程序使用streams API充当一个流处理器,从1个或多个topic消费输入流,并产生一个输出流到1个或多个topic,有效地将输入流转换到输出流。

  • connector API允许构建或运行可重复使用的生产者或消费者,将topic链接到现有的应用程序或数据系统。

示例图如下:

Kafka怎么利用Java实现数据的生产和消费实例教程

kafka 应用场景

  • 构建可在系统或应用程序之间可靠获取数据的实时流数据管道。

  • 构建实时流应用程序,可以转换或响应数据流。

以上介绍参考kafka官方文档。

开发准备

如果我们要开发一个kafka的程序,应该做些什么呢?

首先,在搭建好kafka环境之后,我们要考虑的是我们是生产者还是消费者,也就是消息的发送者还是接受者。
不过在本篇中,生产者和消费者都会进行开发和讲解。

在大致的了解kafka之后,我们来开发第一个程序。

这里用的开发语言是Java,构建工具Maven。

Maven的依赖如下:

 
  & lt;才能groupId> org.apache.kafka</groupId>
  ,,& lt; artifactId> kafka_2.12
  ,,& lt; version> 1.0.0
  ,,& lt; scope> provided,
  & lt;才能/dependency>
  ,,
  & lt;才能dependency>
  ,,,& lt; groupId> org.apache.kafka
  ,,,& lt; artifactId> kafka-clients
  ,,,& lt; version> 1.0.0
  & lt;才能/dependency>
  ,,
  & lt;才能dependency>
  ,,& lt; groupId> org.apache.kafka
  ,,& lt; artifactId> kafka-streams
  ,,& lt; version> 1.0.0
  & lt;才能/dependency> 

<强>卡夫卡生产商

在开发生产的时候,先简单的介绍下卡夫卡各种配置说明:

<李>

引导。服务器:卡夫卡的地址。

<李>

ack:消息的确认机制,默认值是0。

<李>

ack=0:如果设置为0,生产者不会等待卡夫卡的响应。

<李>

ack=1:这个配置意味着卡夫卡会把这条消息写到本地日志文件中,但是不会等待集群中其他机器的成功响应。

<李>

ack=:这个配置意味着领袖会等待所有的追随者同步完成。这个确保消息不会丢失,除非卡夫卡集群中所有机器挂掉。这是最强的可用性保证。

卡夫卡怎么利用Java实现数据的生产和消费实例教程