I would highly recommend using Quixel since it’s textures are designed for physically accurate shader setups, if you want realistic textures that’s what you want to use, however as for making normal maps different methods give varying results so it’s usually best to just try different methods to see what works for you.
If I need realistic textures, Quixel is the way to go to create those (and the associated normal map, I assume).
If I already have an image texture and only want to create the normal map, it depends on the image texture because different solutions provide varying results.
Quixel offers a complete package for texturing, I’m not sure if you can generate normal maps with it but I know the textures you can access from it include the normal maps.
As for generating normal maps there’s a few different normal map generators out there and they all seem to work differently. Personally I would recommend CrazyBump since I’ve had some success with it and seen good results from it, keep in mind that the source texture you use to generate a normal map can have a huge effect on whether it looks good depending on the lighting while the photo taken and some other factors.