问题导读:
1 什么是Kafka的生产者?
2 Kafka都有什么使用场景?
3 消息写入kafka时,需要考虑什么问题?
无论你把Kafka作为消息队列、消息总线还是持久化平台,都需要有一个生产者的角色来写入数据、有一个消费者的角色读取数据。
比如,在信用卡交易系统中,有一个客户端应用程序(比如在线商店),在每次有交易的时候会直接把消息写入Kafka。另一个应用会立即根据规则引擎决定交易是批准还是拒绝,无论是批准还是拒绝,信息都会再写回Kafka,交易的回复信息会最终传回到交易初始化的地方。第三个应用会读取Kafka中的交易数据存储到数据库,之后会根据它来改善规则引擎。
开发者在构建应用的时候,可以根据Apache Kafka提供的client API与Kafka进行交互。 本章将会介绍如何使用生产者client API把消息写入Kafka。在下一章节中,将会介绍如何使用API读取Kafka中的数据。
另外,Kafka有自己的一套协议,因此客户端只需要知道kafka的端口号,就可以实现数据的写入和读取。Kafka提供了多种语言版本的api,比如C++,python,Go等等。这些client API并不是Kafka项目提供的,但是wiki中都有记录。协议以及其他的client API就不在本章的讲解范围之内了。
应用把消息写入kafka有很多种场景:比如记录用户的活动用于审计、分析,记录相关的系统指标,存储日志消息,记录一些小程序的信息,与其他应用进行异步交互,为写入数据库进行缓存等等。
这些不同的应用场景,都有不同的需求:比如消息是否重要,是否允许数据的丢失?能否接受数据的重复?对于数据的延迟以及吞吐是否有要求?
比如之前举得信用卡交易的场景,每条消息都是很重要的,必须具有较低的延迟,只能接受500ms以内的延迟,吞吐量还必须要高——因为希望每秒钟处理百万级的消息。
另一个应用场景是存储网页端的用户点击行为数据。在这种场景中,允许消息的丢失或者重复,对延迟也没什么要求——只要它不会影响用户的体验就可以。换句话说,我们不介意消息需要几秒钟才能写入kafka,因为用户只要点击了超链接,就会进入下一个页面。吞吐量则取决于应用的用户交互类型。
不同的需求就需要你通过配置,使用不同的producer API来写入Kafka。
|
|