ZFS collects small random writes and after a few seconds all is written as a large sequential write. Such a write caching improves performance but on a powerloss some seconds of last writes are lost.
While this does not corrupt a CopyOnWrite filesystem like ZFS it may corrupt your ESXi, ext4 or ntfs filesystem on your virtualized environment. If you use databases or other transactional services they may got corrupted as well.
To prevent a dataloss you can use a hardware raid with cache and BBU on older filesystems. With ZFS you can enable sync write what means that you log every single write to a ZIL logdevice. A regular write is done after a few seconds as an async write. On a powerloss, last writes are restored on next boot from the logdevice. Without a dedicated Logdevice all writes are logged to your regular pool what means that every data must be written to the pool twice, once as a slow sync write, once as a fast large async write.
Unless you have ZIL grade enterprise SSDs in your pool, a dedicated ZIL is also helpful with SSD only pools as you can use cheaper SSDs for your pool and one enterprise write optimized SSD (ex ZeusRam or Intel S37x0) for performance and better reliabilty of your pool SSDs (less small random writes).
For your general use spindle pool, you do not need a ZIL as you usually do not use secure sync write there. Skip an L2Arc for more RAM and use it only if you cannot add RAM and an arc check shows a quite low arc hit rate.