第3章 Kafka生产者——向Kafka写入数据
不管是把Kafka作为消息队列、消息总线还是数据存储平台来使用,总是需要有一个可以往Kafka写入数据的生产者和一个可以从Kafka读取数据的消费者,或者一个兼具两种角色的应用程序。
例如,在一个信用卡事务处理系统里,有一个客户端应用程序,它可能是一个在线商店,每当有支付行为发生时,它负责把事务发送到Kafka上。另一个应用程序根据规则引擎检查这个事务,决定是批准还是拒绝。批准或拒绝的响应消息被写回Kafka,然后发送给发起事务的在线商店。第三个应用程序从Kafka上读取事务和审核状态,把它们保存到数据库,随后分析师可以对这些结果进行分析,或许还能借此改进规则引擎。
开发者们可以使用Kafka内置的客户端API开发Kafka应用程序。
在这一章,我们将从Kafka生产者的设计和组件讲起,学习如何使用Kafka生产者。我们将演示如何创建KafkaProducer和ProducerRecords对象、如何将记录发送给Kafka,以及如何处理从Kafka返回的错误,然后介绍用于控制生产者行为的重要配置选项,最后深入探讨如何使用不同的分区方法和序列化器,以及如何自定义序列化器和分区器。
在第4章,我们将会介绍Kafka的消费者客户端,以及如何从Kafka读取消息。
第三方客户端
出了本章的讨论范围。除了内置的客户端外,Kafka还提供了二进制连接协议,也就是说,我们直接向Kafka网络端口发送适当的字节序列,就可以实现从Kafka读取消息或往Kafka写入消息。还有很多用其他语言实现的Kafka客户端,比如C++、Python、Go语言等,它们都实现了Kafka的连接协议,使得Kafka不仅仅局限于在Java里使用。这些客户端不属于Kafka项目,不过Kafka项目wiki上提供了一个清单,列出了所有可用的客户端。连接协议和第三方客户端超