场景:
假设我有一个参数设置系统,设置完之后,结合mysql的canal,将数据封装好之后,调用kafka的生产者进行发送。
如果只有一个分区的情况下,按正常来讲,终端消费者最终还是能得到【与参数设置系统最后一次保存】的参数值。也就是顺序消费。
但是,如果仅仅只有一个分区,使用多线程去修改一个参数值的时候,假如10万次,这样就不停的往kafka发送消息。会不会严重影响性能?
如果多个分区,那么kafka按照自身的机制,就会将消息分发到不同的分区上,那这个时候消费者拉取的消息就是“无序”了。
我在另外的资料中看到:
一个解决办法是,一个topic只用一个partition,但这样很显然限制了灵活性。
另一个办法就是,所有发送的消息,用同一个key,这样同样的key会落在一个partition里面。
测试只用一个partition 的,好像确实是能顺序发送,顺序消费。
那么当一个topic ≥ 2 个partition的时候,如果指定了key,是不是真的能保证在broker重启、增加、减少的情况下,发送的消息都只会落在那个最初选定的那个分区之上?1
kafka默认是随机写的。你可以自己覆盖分区派发规则的。
你的答案