Kafka Streams基本原理说明

时间:2018-12-22 18:45:14

标签: apache-kafka apache-kafka-streams

我对Kafka流及其工作方式有一些疑问,我对一般的Kafka消费者和生产者范例很有经验,但是,这是我第一次尝试使用Kafka流。

问题:

  1. 在一般的Kafka使用者模型中,我们订阅一个主题并从一个分区开始使用,为简单起见,假设我们有1个分区和1个使用者,现在,如果我们要增加处理量,我们会增加分区数并另外添加更多的消费者,这在Kafka Streams中是如何工作的,如果我们增加分区,应该如何扩展应用程序,我们是否需要添加更多计算机,还是需要做其他事情?
  2. 当我通过Kafka消费者使用数据时,我可能最终会对消息做些事情,例如,我可能会查询API下载文件并写入NFS,然后转发消息或将传入消息值写入到数据库,然后将通知转发到另一个Kafka主题,如何解决同一用例,如果我们不遵循Select Field2 From Table2 IN "Database Path"; 的范例,而是使用KAFKA -> KAFKA,Kafka Streams是否可以解决此用例?
  3. 最后,如何处理异常以及如何管理偏移量。在不断运行的生产系统中,如果有任何异常情况(例如由于网络中断)而出现无休止的消息流,我们将关闭使用者并进行干净启动。如何使用Kafka流处理应用程序实现相同的目标?

1 个答案:

答案 0 :(得分:1)

  1. Consumer API仍以完全相同的方式在后台运行。要回答这个问题-您启动了更多正在运行的应用程序实例;这些不一定必须在完全不同的服务器上

  2. 实际上不建议使用Kafka Streams进行不限于subs = reddit.subreddit('SomeSubreddit') status = str('This is my status!') for post in subs.stream.submissions(): if 'botname' and 'report!' in post.title: post.reply(status) 交互的远程工作。至少在没有不接受的情况下会引入延迟,因此,例如在进行依赖于时间窗口的主题联接时,不应这样做。 Kafka Connect可以成为您将主题中的数据收集到数据库中的系统

  3. 同样,Kafka Streams只是生产者/消费者API的一层。您仍然会遇到相同的网络异常,或者,如果您读取了损坏的记录, options for handling poison pill records