Apache kafka 卡夫卡制作人设计-多主题

Apache kafka 卡夫卡制作人设计-多主题,apache-kafka,Apache Kafka,我正在尝试实现一个卡夫卡制作人/消费者模型,并且正在考虑是否应该为每个主题创建一个单独的发布者线程,而不是让一个发布者处理多个主题。任何帮助都将不胜感激 PS:我是卡夫卡新手,我认为每个主题最好有一个单独的主题,因为由于某些原因,如果特定制作人不在,那么受尊重的主题将受到影响,剩下的所有主题都将顺利进行,没有任何问题 如果我们为所有主题创建一个发布服务器,那么如果发布服务器由于某些原因关闭,那么所有主题都会受到影响 我想你说的独立发布者线程是指独立的生产者对象。如果是的话 由于消息在Kafka中

我正在尝试实现一个卡夫卡制作人/消费者模型,并且正在考虑是否应该为每个主题创建一个单独的发布者线程,而不是让一个发布者处理多个主题。任何帮助都将不胜感激


PS:我是卡夫卡新手,我认为每个主题最好有一个单独的主题,因为由于某些原因,如果特定制作人不在,那么受尊重的主题将受到影响,剩下的所有主题都将顺利进行,没有任何问题

如果我们为所有主题创建一个发布服务器,那么如果发布服务器由于某些原因关闭,那么所有主题都会受到影响

我想你说的独立发布者线程是指独立的生产者对象。如果是的话

由于消息在Kafka中存储为键值对,不同的主题可以具有不同的键值类型。 因此,如果您的卡夫卡主题具有不同的键值类型,例如

Topic1 - key:String, value:Student
Topic2 - key:Long, value:Teacher
以此类推,那么您应该使用多个生产者。这是因为在构造对象时,
KafkaProducer
类要求您提供键和值序列化器

Properties props=new Properties();
props.put("key.serializer",StringSerializer.class);
props.put("value.serializer",LongSerializer.class);
KafkaProducer<String,Long> producer=new KafkaProducer<>(props);
Properties=newproperties();
put(“key.serializer”,StringSerializer.class);
put(“value.serializer”,lonserializer.class);
卡夫卡制作人=新卡夫卡制作人(道具);

不过,您也可以为所有类型编写通用序列化程序!但是,最好事先知道我们对制作人做了什么。

出于显而易见的原因,我更喜欢保持简单的方法——一个制作人/多个制作人——一个主题

来自维基百科

KISS原则指出,如果系统保持简单而不是复杂,那么大多数系统工作得最好;因此,简单性应该是设计中的一个关键目标,并且应该避免不必要的复杂性

谈到一个制作人支持多个主题的可能性,也与事实相去甚远