发布于 2022-04-21 22:28:40
KafkaConsumer是一个相对较低级别的对象,它基本上能够从给定的偏移位置读取记录,寻找特定的偏移量,读取并保存现有卡夫卡存储区(称为__consumer_offsets)中的偏移量。类似地,receive与其poll(Duration)签名完全同步。
如果需要更多的自定义,例如异步行为,那么您可以使用类似并行消费者或spring的包装器。
说到库设计,通常最好只做一件事(基本上是一个应用的单一责任原则)。
例如,如果“主”库是异步的,库提供者将需要提供线程创建和维护语义,在没有记录(与spring的侦听器相比)时会发生什么,等等。通过公开低级别的API,这些与Kafka无关的担忧是可以避免的。
发布于 2022-04-22 18:11:47
如果我需要在我的应用程序节点线程池中并行地使用接收到的消息,我需要使用它并做一些非默认的开发工作来获得它。
卡夫卡主要是建立在这个概念的基础上,允许scale out,而不是scale up来提高性能。
Scale out意味着通过在系统体系结构中添加更多组件来提高性能,其中组件是完整的应用程序,其行为类似于黑匣子。您只需添加更多您所依赖的应用程序或其他应用程序实例(如kafka代理程序)。
按照这种模式,kafka有一个consumer-group,它允许您拥有多个应用程序,每个应用程序都有一个单独的kafka-consumer,但所有应用程序都属于同一个consumer-group。
只有一个kafka-consumer的consumer-group将使用需要从源消费的元素。因此,如果一个consumer-group中有10个consumer-group,它们将使用源中的并行元素。这就是kafka通过允许您使用scale-out来提高性能的方式。
您需要的似乎是更多的scale up,因为您希望生成多个线程,以便能够并行地使用更多的元素。当您这样做,您将面临硬件需求,您将能够达到一个特定的性能,通过增加更多的资源,但随后的成本将增加几何级数,也将有一个点,这将是很难提高性能更多。
总之,重新考虑使用多个线程的方法,这意味着scale up,并考虑使用apache-kafka的应用程序的多个实例,以便您可以轻松地使用scale out。
https://stackoverflow.com/questions/71960788
复制相似问题