My favourite topic https://groups.google.com/forum/#!topic/akka-user/mNVxRPRUDv0
Jay Kreps recently strongly endorsed Avro for use with Kafka. http://t.co/l9uTFmb6OS On Mon, Apr 13, 2015 at 10:54 AM, Greg Young <[email protected]> wrote: > For 1 use weak serialization (say json) > > > On Monday, April 13, 2015 at 4:54:24 PM UTC+3, Chris Ridmann wrote: >> >> Hello! >> >> I've recently been experimenting with architectures that use CQRS / >> Cluster Sharding / Event Sourcing / DDD, and I have some beginner questions. >> >> 1) What is the best way to handle changing the structure of "events" as >> business requirements (or refactorings) change over time? >> >> As a brief example: >> >> // v1 >> case class ChangeName(id: String, first:String) extends Cmd >> case class NameChanged(id: String, first: String) extends Evt >> >> // v2 >> // now biz req. changes and we want to be able to change both first and >> last name >> // i can freely change the 'Cmd' because we don't persist it, however if >> I change the 'Evt' >> // i will get 'RecoveryFailure was caused by: >> java.io.InvalidClassException' during recoveries >> case class ChangeName(id: String, first:String, last: String) extends Cmd >> case class NameChanged(id: String, first: String, last: String) extends >> Evt >> >> >> >> It seems I could always just maintain 2 different events, e.g. >> NameChangedV1, and NameChangedV2, but that doesn't seem maintainable in the >> long run. >> >> Another approach I thought of is to save a snapshot before introducing >> any breaking changes to an "Event" interface before bringing down the app >> for upgrading. This seems hard - is it even possible with the >> 'ClusterSharding' extension to send a message (e.g. Snap) to all of its >> known id's in the system? >> >> How does changing events affect the "read" side of things in CQRS? >> >> ============ >> >> 2) When a node crashes, how can I make sure the "entry" gets restarted >> and completes processing when the node is brought back up? >> >> Here's a very brief example that may help clarify what I'm asking: >> >> // sent in the beginning of the flow from a front-end >> case class ProcessMessage(id: String, message: Message) extends Cmd >> case class MessageToBeProcessed(id: String, message: Message) extends Evt >> >> // sent at the end of the flow from another processor actor >> case class MessageProcessed(id: String, message: Message) extends Cmd >> case class MessageComplete(id: String, message: Message) extends Evt >> >> >> Let's say the node crashes right after I persist the event >> 'MessageToBeProcessed' and before I send it to a processor actor to >> complete processing. Will the 'ClusterSharding' extension re-activate this >> entry on another available node right away, or will it wait until that >> entry receives another "Cmd"? If it doesn't re-activate, is there a >> recommended approach to solve this? >> >> >> Thanks! >> -Chris >> >> -- > >>>>>>>>>> Read the docs: http://akka.io/docs/ > >>>>>>>>>> Check the FAQ: > http://doc.akka.io/docs/akka/current/additional/faq.html > >>>>>>>>>> Search the archives: https://groups.google.com/group/akka-user > --- > You received this message because you are subscribed to the Google Groups > "Akka User List" group. > To unsubscribe from this group and stop receiving emails from it, send an > email to [email protected]. > To post to this group, send email to [email protected]. > Visit this group at http://groups.google.com/group/akka-user. > For more options, visit https://groups.google.com/d/optout. > -- >>>>>>>>>> Read the docs: http://akka.io/docs/ >>>>>>>>>> Check the FAQ: >>>>>>>>>> http://doc.akka.io/docs/akka/current/additional/faq.html >>>>>>>>>> Search the archives: https://groups.google.com/group/akka-user --- You received this message because you are subscribed to the Google Groups "Akka User List" group. To unsubscribe from this group and stop receiving emails from it, send an email to [email protected]. To post to this group, send email to [email protected]. Visit this group at http://groups.google.com/group/akka-user. For more options, visit https://groups.google.com/d/optout.
